Как стать автором
Обновить

Выбираем быстрый детектор людей в 2021

Время на прочтение3 мин
Количество просмотров6.1K

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

Поэтому решил почитать про самые актуальные методы и пощупать их руками. Руками нужно щупать прежде всего потому, что мне нужно распознавать достаточно крупые объекты в простых, но реальных условиях и делать это быстро. То есть, ищется самый быстрый детектор, возможно, в ущерб точности (в разумных пределах).

Вот в этой статье описана достаточно полная картина, включая историческое развитие. Вкратце:

  • Олдскульные методы компьютерного зрения - Виола-Джонс (aka каскад Хаара)(2001) и Histogram of Oriented Gradients (2006)

  • Сверточные нейросети из которых начинают выделяться MobileSSD и YOLO (2014 - 2017)

  • Различные версия YOLO (с 2018)

По итогу, там утверждается, что самый быстрый детектор - это YOLOv4.

Что касается первых двух этапов, я нашел серию неплохих статей:

  • первая описывает олдскульные методы, подчеркивая их быстроту и нестабильность

  • вторая часть рассказывает о нейросетях на 2018 год, приходя к выводу, что самый быстрый MobileSSD

Попробуем сравнить YOLO vs MobileSSD работающие через OpenCV. Ну а раз OpenCV, добавим к тесту Виолу-Джонса и HOG, они все равно туда входят.

Итак, находим интересную картинку на стоке:

https://unsplash.com/photos/PhhtSyCeN0I
https://unsplash.com/photos/PhhtSyCeN0I

Окружение

Нам понадобятся:

  • Python3 64bit

  • opencv_python

  • MobileSSD (последняя версия, которая у меня работает с OpenCV - это ssd_mobilenet_v1_coco_2017_11_17)

  • YOLOv4 (нормальная и tiny версии)

Тест

Запускаем бенчмарк (на моем лаптопе, который примерно соответсвует стандартному облачному юниту) и получаем несколько неожиданные результаты:

yolo found 12 persons in 1.97 seconds avg 

tiny_yolo found 8 persons in 0.22 seconds avg 

ssd found 14 persons in 0.1 seconds avg 

hog found 2 persons in 0.18 seconds avg 

haar found 0 persons in 0.07 seconds avg

YOLO обнаружило много людей, но сделало это очень медленно - на картинку ушло 2 секунды (официальные бенчмарки говорят про 100 FPS на самом мощном GPU, но на дохленьком CPU - как видно нет).

YOLO
YOLO
  1. TinyYOLO - на 30% меньше детекций, но почти в 10 раз быстрее.

    Это согласуется с данным других источников:

    The FPS (Frames Per Second) in YOLOv4-tiny is approximately eight times that of YOLOv4. However, the accuracy for YOLOv4-tiny is 2/3rds that of YOLOv4 when tested on the MS COCO dataset.

TinyYOLO
TinyYOLO
  1. Старенький MobileSSD еще в 2 раза быстрее TinyYOLO. Это очень неожиданно. Может быть кто-нибудь из читателей сможет объяснить?

MobileSSD v1
MobileSSD v1
  1. HOG медленнее MobileSSD и слегка быстрее TinyYOLO. Но точность удручает. Скорость метода можно варьировать путем изменения размера картинок, но даже такой результат получем на разрешении в два раза большем чем для YOLO.

  1. Виола-Джонс. Быстро отработал, но ничего не нашел.

Заключение

Неожиданно, безоговорочным победителем вышел MobileSSD.

По скорости он значительно обошел обе версии YOLO, а по точности все три нейросети показали солидные результаты.

Олдскульные алгоритмы провалились за пределами теплицы, а по скорости не ушли далеко от MobileSSD.

Возможно, что-то не так было в методике тестирования, например Opencv-DNN - не лучший инструмент для запуска YOLO.

Очень надеюсь, что люди в теме прочитают это и дадут свой комментарий.

Ссылки

Теги:
Хабы:
+5
Комментарии21

Публикации

Изменить настройки темы

Истории

Работа

Data Scientist
60 вакансий
Python разработчик
132 вакансии

Ближайшие события

Weekend Offer в AliExpress
Дата20 – 21 апреля
Время10:00 – 20:00
Место
Онлайн