Дан огромный датасет с фотографиями, на которых люди показывают один из шести жестов, либо не показывают вовсе. Каждой фотографии присвоен класс. Необходимо обучить модель, определяющую, какой жест изображён на фотографии. Задача решалась в рамках соревнования MachinesCanSee от VisionLabs на платформе Boosters.Pro
- Детектирование кистей
- Сбор и обработка данных. Здесь мы собираем данные с размеченными кистями рук (т.е. известны координаты кистей на изображениях). После сбора данных мы приводим их в единый формат.
- Обучение детектора кистей. В качестве модели была взята модель YOLOv5x
- Классификация жестов
- Инференс детектора кистей. Теперь когда у нас есть обученный детектор кистей мы можем прогнать через него фотографии из нашего датасета с жестами. В результате получим для каждого изображения координаты боксов с кистями рук
- Постобработка локализаций рук. Мы оставляем верних бокс с кистью, так как в подавляющем числе случаев целевой жест показывается верхней рукой. Также мы расширяем наш бокс, чтобы кисть наверняка оказалась на обрезанной фотографии (кропе).
- Обучение классификатора жестов. На вход классификатору подаётся верхний бокс с кистью, классификатор обучается на метках жестов. В качестве модели была взята EfficientNetV2-M
- End-to-end Inference. Здесь мы делаем функцию инференса обеих моделей. То есть на вход функции подаётся фотография, а на выходе выдаётся наиболее вероятный жест, который был детектирован на этой фотографии (или "no gesture"). Важный момент: мы берём все боксы с кистями на фотографии, после чего пропускаем их через классификатор и берём класс с максимальной вероятностью среди всех боксов.
Вы можете посмотреть весь код, перейдя на Google Colab
- Дообучение детектора кистей на датасете жестов. Для этого мы получаем координаты кистей от предобученного детектора для наших данных с жестами, после чего уточняем их вручную.
- Обучение классификатора на всем массиве данных с жестами. К сожалению, не хватило времени, хотя размер тренировочных данных сильно влиял на обученность модели (обучение было произведено на половине данных)
- Описание задачи с данными
- Данные & Модели
- Модель детектора кистей (YOLOv5)
- Модель классификатора (для импорта нужен модуль timm)
- First hand dataset source
- Second hand dataset source
OS: Linux-5.4.104+-x86_64-with-Ubuntu-18.04-bionic
Python: 3.7.11 (default, Jul 3 2021, 18:01:19) [GCC 7.5.0]