Цель проекта: Необходимо разработать решение для отслеживания и сортировки мусора на конвейере – выделять мусор в общем потоке предметов.
- Решение должно выдавать координаты центра обнаруженных объекта для каждого кадра;
- Скорость обработки должна быть не более 100 мс;
- Высокая метрика
MOTA
(Multiple Object Tracking Accuracy).
Задачи:
- Ознакомиться с данными, форматами датасетов
- Изучить работу трекеров, выбрать подходящий и создать базовое решение
- Обучить трекер, провести сравнительный анализ моделей и алгоритмов, предложить варианты улучшения решения
- Протестировать решение, проанализировать результат
- Подготовить доклад по результатам исследований
В проекте использовались следующие трекеры:
- Базовое решение от
ultralytics
- Базовое решение от
ultralytics
с подбором гиперпараметров Deep SORT
с перебором гиперпараметровSMILEtrack
SORT
Лучшие метрики:
Трекер | MOTA | MOTP | время на фрейм, мс | среднее отклонение | гиперпараметры |
ultralytics | 0.9124 | 0.0929 | 146.17 | 287.58 | - |
ultralytics hyp | 0.9173 | 0.9142 | 113.04 | 19.93 | `iou` 0.6 или 0.7, `conf` 0.5, `max_det` 50 или 300 |
deep sort | 0.9319 | 0.321 | 50.17 | 36.09 | `max_dis_iou` 0.8, `age` 1, `max_cos_dis` 0.3 или 0.1, `n_init` 6 |
smile | 0.9197 | 0.099 | 199.10 | 61.42 | - |
sort | 0.9148 | 0.1812 | 55.10 | 60.32 | - |
Относительно двух трекеров был проведен визуальный анализ.
Для deep sort
:
Смазанные видео, итог:
- У некоторых объектов айди меняется под конец кадра (возможно это происходит из-за наложения одной рамки на другую)
- У некоторых объектов, у кого была такая же проблема – в конце айди вернулось как было, то есть эта проблема касается не всех подряд
- Попались и такие объекты, когда в начале, буквально на два кадра смог выделить объекты рамкой (причем только у одного из двух объектов был трекер)
- Происходит «наложение» рамок друг на друга из-за чего объект, который шел все время с одним айди, под конец кадра уходит совсем с другим
- Некоторые объекты находятся и выделяются рамкой только в самом конце
- А также некоторые объекты не находятся самим треком, трека нет
- Некоторые объекты плохо определяются (выделяются рамкой) – рамка оказалась меньше и захватила объект не полностью
- Бывает такое, что из-за неправильных размеров рамки, два объекта превращаются в один
Общий итог:
- Большинство объектов находятся, выделяются рамкой и рамка не пропадает до самого конца
- Большинство объектов трекаются нормально
Для smile
:
Положительные моменты:
- Объекты сразу выделяются рамкой по размеру, у
DeepSort
рамка в некоторых случаях сначала была гораздо больше, чем сам объект и только на середине кадра рамка находила оптимальный размер - Почти все объекты находятся сразу и выделяются рамкой
- Трекаются объекты хорошо
- Уверенность отслеживания объектов – высокая
Отрицательные моменты:
- Периодические пропажи рамок объектов
- Рамка иногда захватывала объект не полностью
- Объект не находился и не трекался до самого конца кадра, только под самый конец объект находился и выделился в рамку
- Периодически мелкие объекты не обнаруживаются, и не выделяются рамкой
- Разделение одного крупного объекта на несколько маленьких
- касательно метрики
MOTA
, скорости обработки кадра и среднего отклонения покаывает себяDeep SORT
. Обратная сторона высокойMOTA
это раздувание объекта в ширину и довольно выскоая метрикаMOTP
; - со средним временем обработки кадра и так же хорошим отклонением показывает себя базовое решение от
YOLO
с лучшими гиперпараметрамиiou
равное 0.6 или 0.7,conf
равное 0.5,max_det
равное 300 или 50. Этот вариант так же показывает себя лучше в метрикеMOTP
; - трекер
SORT
показал себя хуже двух предыдущих моделей как относительноMOTA
, так и относительноMOTP
; - трекер
Smile TRACK
иногда показывает себя лучше двух лидеров, но основная проблема в потере мелких объектов и разделения крупных объектов на мелкие, что занижает ключевые метрики. При этом данный трекер в некоторых случаях показывает себя лучше при распозновании объектов среднего размера.
Рекомендации для заказчика:
- Модернизировать конвейерную ленту, выбрать ребристую, чтобы уменьшить "катание" мусора по ленте.
- Попробовать изменить скорость движения ленты - возможно, незначительное замедление ленты даст лучшую скорость в сортировке мусора и снизит количество мусора, который повторно закидывается на ленту.
- Улучшить освещение в зоне камеры, возможно, добавить боковой свет - а вдруг это повлияет на качество детекции объектов.
- Провести обучение детектора на большем датасете.
В соответствии с поставленной задачей лучшим по метрике MOTA был выбран трекер - Smile
, с результатом MOTA
= 0.9197, поскольку так же показал хоршую метрику MOTP
, практически на уровне базовой YOLO
, но немного лучше. Так же приведены рекомендации касательно того, как можно улучшить работу системы распознавания и забора мусора с ленты.
Ожидается такая структура каталогов по умолчанию:
renue_project
|——————tracker.py
|——————Datasets
| └——————gt
| └——————gt.txt
| └——————v2
| └——————images
|——————Videos
|——————Models
| └——————ultralytics
| └——————yolov10x_v2_4_best.pt
Установить зависимости из файла requirements.txt:
pip install -r requirements.txt
Запустить главный файл*:
python tracker.py
Доступные опции:
'--gt_path' Path for ground truth tracks
'--imgs_path' Input dir for images
'--videos_path' Input dir for videos
'--input_video_path' Input path for new video
'--output_video_path' Out path for a processed video
'-v' Process a regular video by a given index: 0-5
'-vb' Process a blured video by a given index: 0-18
'--model_weights' Path to YOLO model weights
'--tracker' Tracker model
'--show_video' Wheither to show video of tracking or not
'--metrics' Count metric or not
'--first_n_frames' Apply only to first n frames
*
- исходя из того, что tracker.py
пользуется относительными путями, он должен находиться в одной папке с Datasets и Videos.
- (дополнение от Алексея Новикова:) по всей видимости, в моей адаптации SMILEtrack к ultralytics имеется баг, который не позволяет отслеживать состояние, когда треков нет, что выражается в
results[0].boxes.id
всегда равнымNone
. Это не позволяет на данный момент отлавливать событие отсутствия треков, что на участках без мусора может вывалить трекер в ошибку. Эта ошибка была исправлена после дедлайна, чтобы не менять исходный файл, добавлен файлtracker_fixed.py
.
python tracker.py --input_video_path './Videos/test.mp4' --metrics