MiVOLO: новая нейросеть State-of-the-Art для определения пола и возраста по фотографии

MiVOLO: новая нейросеть State-of-the-Art для определения пола и возраста по фотографии

Привет, Хабр!

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

Пример конечного результата работы нашего движка

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

Пример того, как может выглядеть вход в нашей задаче
Пример того, как может выглядеть вход в нашей задаче

И очень нехорошо, если на фото ребёнок, а мы предложили купить взрослую одежду, или, например, перепутали пол. А по самой одежде это очень тяжело понять (хотя мы и так тоже пытаемся, но точность невелика). Кроме того, возраст может в принципе давать ещё какую-то дополнительную информацию, помогающую делать рекомендации качественнее.

Вообще, open source решений для этой задачи довольно много. До создания своего, мы использовали открытую модель FairFace, выбрав её за простоту и близость к нашей задаче. Но, процент ошибок в проме удручал — в разных проектах он составлял от 1 до 10% и более. Соотвественно, это потенциальные 10% случаев, когда рекомендация вообще никак не вкатит пользователю и прибыль будет упущена. Звучит плохо. С другой стороны, мы никогда не занимались лицами профессионально, поэтому старались поступать мудро и надеялись на чужие решения (внутри компании или внешние open source).

Но со временем стало ясно, что терпеть дальше нельзя, а главное, что ничего для нашей задачи радикально более удачного уже и не появится. Дело в том, что визуальный домен у нас слишком широкий: от мыльного селфи до профессиональной студийной съёмки. Условия, фильтры, качество, цвета, размеры, всё совершенно произвольное и без каких-либо допущений. Системы распознавания лиц к таким условиям не адаптированы и не могут быть, а их основе, зачастую, и создают методы определения пола и возраста. Да и в целом, немногие на рынке эту задачу решают. Поэтому, 3 месяца назад мы начали разрабатывать свой подход.

Изначально, мы просто хотели как-то нивелировать существующие ошибки. Амбициозных целей мы себе в этой задаче не ставили, считая её не профильной и вспомогательной.

Ход работ: Создание baseline

Решение от FairFace имеет ряд серьёзных недостатков. Наибольшим изначально виделся их классификационный подход. Во-первых диапазоны разбиты неудачно для нас, во-вторых постоянно всплывали проблемы пограничных случаев, в-третьих, алгоритм не делает различия в ошибке между классами, например, 0-5 лет или 60-70, при тренировке, что никак не могло сказаться благоприятно на способности к генерализации. Тренировочного кода к модели тоже нет.

Задача для timm, огромного репозитория классификационных моделей от Hugging Face, претренированных на больших открытых датасетах.

Мы заменили классификацию на регрессию, с соответствующими изменениями в нужных частях кода. Этого нет в статье, поскольку она посвящена уже конечному решению на трансформере, но на этом этапе нашей основной моделью для экспериментов была чисто свёрточная нейросеть resnext50_32x4d. Она быстрая и хорошо себя зарекомендовала. Кроме того, мы прикрутили к сети Deep Imbalance Regression. Не вдаваясь в детали, эти подходы позволяют существенно компенсировать естественный дисбаланс возраста в данных. Особенно полезной оказалась первая техника, позволяющая посчитать веса для примеров в соответствии с их распределением, которые затем применяют в целевой функции MSE (Mean Squared Error).

Визуализация распределения возрастов в датасете IMDB-clean. Примерно такая же картина в большинстве открытых данных.
Визуализация распределения возрастов в датасете IMDB-clean. Примерно такая же картина в большинстве открытых данных.

Первые же эксперименты показали перспективность подхода, например, мы с полутыка получили Если вдаваться в детали, то там несколько странная история. В оригинале VOLO описан как чисто трансформерная модель и в статье нет ни слова про свёртки, но в реализации они используют 

конволюционные стебли для подготовки патчей в PatchEmbed модуле. Вероятно, что изначальная идея взята из: https://arxiv.org/abs/2104.0113, но это не точно

‘ data-abbr=»гибридная модель»>гибридная модель VOLO. Она сочетает в себе преимущества свёрточных и трансформерных нейросетей. В этой модели, вместо простого нарезания изображения на Актриса Марсия Кросс на 30th Annual Film Independent Spirit Awards (2015), на тот момент ей было 53 года. Это контрольное изображение вызвало у разметчиков большие трудности: средняя ошибка ушла выше 16 лет.

Актриса Марсия Кросс на 30th Annual Film Independent Spirit Awards (2015), на тот момент ей было 53 года. Это контрольное изображение вызвало у разметчиков большие трудности: средняя ошибка ушла выше 16 лет.

Поэтому, мы отправились размечать с нуля на Впрочем, ТикТоку самому плохеет ещё сильнее 🙂

‘ data-abbr=»многие эффекты в ТикТок»>многие эффекты в ТикТок, да даже просто хорошее сглаживание, результат сильно изменят.

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

Материалы

В первую очередь, хочу попросить вас посмотреть наш командный Телеграм канал. Мы там публикуем дополнительные материалы, мнения, новости, детали нашей работы. Если он вам понравится, пожалуйста, подпишитесь! Для нас это очень важно.

Материалы из этого текста:

 

Источник

Читайте также