Skip to content

filon-mary/Hackathon_Renue_project

Repository files navigation

Распознавание мусора на конвейерной ленте

Цель проекта: Необходимо разработать решение для отслеживания и сортировки мусора на конвейере – выделять мусор в общем потоке предметов.

  • Решение должно выдавать координаты центра обнаруженных объекта для каждого кадра;
  • Скорость обработки должна быть не более 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 иногда показывает себя лучше двух лидеров, но основная проблема в потере мелких объектов и разделения крупных объектов на мелкие, что занижает ключевые метрики. При этом данный трекер в некоторых случаях показывает себя лучше при распозновании объектов среднего размера.

Рекомендации для заказчика:

  1. Модернизировать конвейерную ленту, выбрать ребристую, чтобы уменьшить "катание" мусора по ленте.
  2. Попробовать изменить скорость движения ленты - возможно, незначительное замедление ленты даст лучшую скорость в сортировке мусора и снизит количество мусора, который повторно закидывается на ленту.
  3. Улучшить освещение в зоне камеры, возможно, добавить боковой свет - а вдруг это повлияет на качество детекции объектов.
  4. Провести обучение детектора на большем датасете.

В соответствии с поставленной задачей лучшим по метрике 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.

Demo

python tracker.py --input_video_path './Videos/test.mp4' --metrics

Авторы