Сравнение Алгоритмов Обнаружения Лиц

Привет, Хабр! Очень часто в Интернете встречаю следующий вопрос: «Какое готовое решение для распознавания лиц лучше использоватьЭ» Итак, я выбрал с Github 5 решений, которые мне показались хорошими, относительно новыми и простыми в использовании, и мне хотелось бы сравнить их между собой.

Всем, кому интересно, что из этого получилось, добро пожаловать в разрез!

Сравнение алгоритмов обнаружения лиц



Суть эксперимента

Для начала я отобрал на Kaggle фотографии из различных датасетов, содержащих лица, и сформировал свой собственный датасет. Я постарался сделать набор данных максимально разнообразным.

В полученном датасете присутствуют люди в очках, курящие, в шапках, разных возрастов и национальностей, с бородами, и самое главное, все фотографии были не самого высокого разрешения, на которых лица были слегка размыты, или я делал это размытие с помощью библиотека OpenCV. Полученные фотографии были разделены на 5 классов, в каждом по 50 фотографий:

  • dummy face – в этой папке собраны лица статуй, персонажей Симпсонов, персонажей аниме, Барби;
  • лица в масках;
  • лица, сфотографированные в профиль;
  • белокожие;
  • темнокожий.

Далее я разметил эти фотографии с помощью замечательной программы ярлык меня .

Я старалась обозначить так, чтобы подбородок, лоб и щеки попадали в ограничивающую рамку.

Последние две части лица не обязательно могут быть включены полностью:

Сравнение алгоритмов обнаружения лиц

После разметки я прогнал фотографии по каждому из алгоритмов и рассчитал следующие показатели: пересечение через объединение, точность и полноту.

Вы можете прочитать об этих показателях здесь И здесь .

Уточню, что в данном случае найденное лицо является истинно положительным, не найденное лицо — ложноотрицательным, а ложноположительное (условно, когда машина распознала лицо) — ложноположительным.

Я также рассчитал скорость алгоритма.

Ну а теперь перейдем к самим решениям!

RetinaFace

И начну, пожалуй, с самого лучшего алгоритм на основе таких показателей, как «Пересечение через объединение», точность и полнота.

Как вы можете видеть в файле readme этого репозитория, эффективность его обнаружения потрясающая:

Сравнение алгоритмов обнаружения лиц

Кроме того, с помощью этого репозитория можно находить ключевые точки лица, выравнивать и распознавать лица.

Результат работы этого алгоритма на моих данных показан в таблице ниже:

Сравнение алгоритмов обнаружения лиц



Facenet-pytorch

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

Этот алгоритм также имеет возможность запуска на графическом процессоре, что ускоряет работу алгоритма примерно на 40% и потребляет около 1 ГБ видеопамяти (цифры, указанные в таблице ниже, являются результатом запуска алгоритма на центральном процессоре).

Результаты представлены ниже:

Сравнение алгоритмов обнаружения лиц



ДБФейс

Этот решение в описании проекта, как и первое решение, показывает впечатляющие результаты:

Сравнение алгоритмов обнаружения лиц

На деле оно оказалось немного хуже по метрикам машинного обучения, чем первое решение, но гораздо лучше по скорости:

Сравнение алгоритмов обнаружения лиц



Распознавание лица

Данный решение — один из самых популярных, судя по звездам на Github, но точно не лучший:

Сравнение алгоритмов обнаружения лиц

Думаю, нынешнее решение может быть настолько популярным, потому что помимо распознавания лиц есть много других полезных функций: возможность находить ключевые точки лица, распознавать лица, работать в режиме реального времени + разработка ведется уже довольно давно.

много времени.



Ультра-легкий-быстрый-универсальный-детектор лица-1 МБ

алгоритм работает очень быстро, что негативно сказалось на других метриках.

Этот алгоритм также имеет возможность запуска на графическом процессоре, но я не увидел никакой разницы во времени выполнения алгоритма.

Вот результаты, которые мне удалось получить:

Сравнение алгоритмов обнаружения лиц



Заключение

Все результаты были получены с использованием стандартных параметров.

Конечно, если бы мы могли настроить некоторые параметры, мы могли бы увидеть еще лучшие результаты.

Исходный код с реализацией каждого алгоритма и расчетом метрик я выложил на Гитхаб .

Там же доступны наборы данных и разметка.

Хочу отметить, что все эксперименты проводились на Ubuntu. Я также готов принять пул-реквесты с вашими решениями и результатами! Теги: #Машинное обучение #python #машинное+обучение #Обработка изображений #OpenCV #распознавание лиц

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.