Как мы построили embedding-модель уха на Vision Transformers: от идеи до 88% точности. cnn.. cnn. embeddings.. cnn. embeddings. visual transformer.. cnn. embeddings. visual transformer. биометрическая аутентификация.. cnn. embeddings. visual transformer. биометрическая аутентификация. биометрия.. cnn. embeddings. visual transformer. биометрическая аутентификация. биометрия. датасет.. cnn. embeddings. visual transformer. биометрическая аутентификация. биометрия. датасет. искусственный интеллект.. cnn. embeddings. visual transformer. биометрическая аутентификация. биометрия. датасет. искусственный интеллект. компьютерное зрение.. cnn. embeddings. visual transformer. биометрическая аутентификация. биометрия. датасет. искусственный интеллект. компьютерное зрение. Машинное обучение.. cnn. embeddings. visual transformer. биометрическая аутентификация. биометрия. датасет. искусственный интеллект. компьютерное зрение. Машинное обучение. распознавание изображений.. cnn. embeddings. visual transformer. биометрическая аутентификация. биометрия. датасет. искусственный интеллект. компьютерное зрение. Машинное обучение. распознавание изображений. эмбеддинги.
Как мы построили embedding-модель уха на Vision Transformers: от идеи до 88% точности - 1

Пока весь мир гонится за распознаванием лиц и отпечатков пальцев, мы в решили взглянуть на человека чуть сбоку — буквально. 

Пришел клиент, принес проект. Система поиска родственных связей по фото. Все работает, все ищется, но хочется, чтобы было еще точнее, еще глубже. «А что если сравнивать…уши», – подумали мы. 

Почему уши? Потому что они, как и лица, обладают уникальной формой, но в отличие от лица — не меняются с возрастом, не маскируются бородой и не хмурятся на паспортном контроле.
Идеальный кандидат для дополнительного биометрического сигнала. Но не все так просто.

Нам предстоял полный цикл разработки модуля распознавания и сравнения ушей:

  • Детектировать ухо на изображении;

  • Построить модель landmark-детекции (чтобы точно знать, где именно ухо);

  • Удалить фон и изолировать объект анализа;

  • Построить embedding-модель, которая будет превращать изображение уха в вектор;

  • Разработать алгоритм сравнения эмбеддингов для поиска по базе.

Остановимся на четвертом пункте — самом интересном: embedding-модель.

Как мы построили embedding-модель уха на Vision Transformers: от идеи до 88% точности - 2

Почему Vision Transformers

Сначала мы, как и все приличные люди, пробовали CNN. Быстро поняли, что CNN-архитектуры недостаточно хорошо справляются с вариативностью ушей: угол съемки, освещение, пряди волос, наушники и прочий реальный мир. Классические backbone вроде ResNet50 и EfficientNet давали эмбеддинги, которые были… скажем так, неубедительны.

Тогда мы начали смотреть в сторону Vision Transformers (ViT). Их глобальный взгляд на картинку оказался особенно полезен для выделения сложных контуров уха. К тому же, архитектура на трансформерах позволяла лучше улавливать мелкие и уникальные детали — изгибы, доли, завитки — все, что делает ухо ухом.

Для прототипа мы взяли vit_base_patch16_224, предобученный на ImageNet. Слои адаптировали под задачу биометрии:

  • выкинули классификационную голову,

  • добавили head на 128-д размерность эмбеддинга,

  • применили L2-нормализацию,

  • потеряли пару вечеров на тюнинг learning rate и заморозку первых слоев.

Получилась легкая, но выразительная модель, которую мы начали обучать на нашей (очень неоднородной) базе ушей.

Как мы построили embedding-модель уха на Vision Transformers: от идеи до 88% точности - 3

Однако финальную точность 88% мы получили уже на другой архитектуре — Swin Transformer V2. Это обновленный трансформер с иерархическим патчингом и оконным вниманием, который оказался гораздо устойчивее к шуму и частично закрытым ушам (волосы, капюшоны, аксессуары). Он лучше справлялся с локальными деталями, а при этом не терял контекст всей структуры уха.

Переход на Swin V2 дал нам прирост около 6–8% к точности без увеличения объема данных — просто за счет архитектурных преимуществ. В условиях слабого и шумного датасета — это было решающим.

Данных нет — держи совочек, копай сам

Если вы думали, что датасет с ушами легко скачать с Kaggle — у нас плохие новости.

В отличие от лицевых датасетов, приличного датасета ушей в природе почти не существует. OpenEar? Мало и шумно. EarVN1.0? Почти непригоден без чистки.

Собирать вручную? Можно — но долго и дорого. Мы пошли другим путём.

В качестве базы мы взяли хорошо известный датасет VGGFace2, который изначально предназначен для распознавания лиц. У него богатое разнообразие по ракурсам, возрасту, освещению — и, главное, во многих случаях видны уши.

Дальше — техническая магия:

  • прогнали датасет через нашу модель детекции уха;

  • отфильтровали кадры, где ухо перекрыто (волосами, головными уборами и прочим);

  • собрали чистый поднабор с более-менее открытыми и читаемыми ушами;

  • аугментировали и нормализовали изображения.

Так у нас появился основной обучающий набор.

А вот для тестирования мы уже собрали отдельный датасет: вручную нашли фото в открытых источниках, спарсили, почистили, разметили. Он получился более разнообразным и «грязным» — и именно на нём финальная модель показала себя особенно стабильно.

Как мы построили embedding-модель уха на Vision Transformers: от идеи до 88% точности - 4

Метрики, метрики, метрики

Валидация шла по top-1 accuracy в задаче поиска по эмбеддингам. Прогресс выглядел примерно так:

  • CNN: 62–70%, сильно плавает от фона и освещения;

  • Первые версии ViT: 75–80%;

  • Финальная модель с дообучением и регуляризацией: 88.1%.

Больше всего буста дала комбинированная loss-функция:

loss = 0.8 triplet_loss(anchor, pos, neg) + 0.2 center_loss(embedding, label)

Так мы обеспечили сходимость кластеров эмбеддингов вокруг классов (людей) и при этом сохранили обучаемость по градиентам.

Обработка шума и фона

На удивление, одна из главных проблем была в фоне. Волосы, сережки, капюшоны — все это создавало ложную информацию в эмбеддинге. Поэтому до подачи в ViT мы изолировали ухо:

  • Детектировали bounding box;

  • Выделяли landmarks (20 ключевых точек);

  • Строили маску и вырезали фон;

  • Только потом масштабировали в input для трансформера.

Это снизило overfitting и улучшило стабильность при inference на реальных фото.

Вывод

Мы построили надежную и достаточно легкую embedding-модель для распознавания ушей. На ViT. С точностью 88%. Без большого датасета. С полной изоляцией объекта. И главное — она действительно помогает в мультибиометрической системе, повышая итоговую точность поиска родственных связей.

Мы не утверждаем, что уши заменят лица. Но как дополнительный биометрический сигнал — они чертовски хороши. Особенно, если с ними правильно обращаться.

Если вы внедряете биометрию, ищете нестандартные сигналы или просто хотите сделать что-то, чего никто не делал — приходите, расскажем, как уши могут быть полезны бизнесу.

Автор: alexsphera

Источник

Rambler's Top100