Данный кейс представлен нефтехимической компанией Сибур на чемпионате Sibur Challenge 2023 по направлению "Видеоаналитика".
Более подробно вы можете ознакомится с материалами на платформе AI Today. Вся информация находится в свободном доступе.
https://platform.aitoday.ru/event/9\
Цитата из условия задачи:
Необходимо создать модель распознавания действий с вагон-цистерной на эстакаде, которая пошагово отслеживает жизненный цикл вагон-цистерны (въезд на эстакаду, подготовка к сливу, слив, подготовка к отъезду, выезд поезда и т. д.).
Для решения задачи вам предоставлен набор видеороликов, каждый из которых относится к одному из четырех классов:
bridge_down
- класс "мостик опущен",
bridge_up
- класс "мостик поднят",
no_action
- класс "нет операций в кадре",
train_in_out
- класс "въезд/выезд цистерны".
В одном ролике может быть ровно один класс. Особенность задачи заключается в том, что модель распознавания не должна требовать дорогой и долгой дотренировки или сбора дополнительных данных для развертывания системы видеоаналитики в новых локациях. Кроме того, модель должна быть устойчива к потере связи, т. е. пропущенным кадрам в видео.
Метрика - F1 (macro).
Всего представлено 496 видеороликов дительностью не более 10 секунд с соотношением:
bridge_down
- 306
bridge_up
- 75
no_action
- 49
train_in_out
- 66
Формат видеороликов выглядит следующим образом
Несмотря на то что ролики всего четырех классов, наполнение внутри каждого класса достаточно разообразно. Разные виды локаций, разные углы обзора камеры, различное освещение и даже тип цистерн отличается.
- Первая модель / Анализ / Предварительные выводы
- Подготовка качественной обучающей выборки. Автоматизированный подход к семплированию видео файлов. Основная идея: создать максимально репрезентативную выборку, в тоже време небольшого размера
- Выбор и разметка объектов для выполнения ObjectDetection
- Обучение YOLO8n
- Разбор алгоритма принятия решения на основе ObjectDetection
- Подход к логированию работы модели
- Результаты модели
notebooks
- содержит файлы jupiter notebooks
research_review.jpynb
- Изложение хода иследованияyolo8_train.jpynb
- Обучение модели YOLO 8n на платформе Google_Colab
scripts
- основной модуль проекта. Содержит набор скриптов. Перечисляться будут согласно логической связи.
contrast_increase.py
- повышает контрастность изображенийframes2emb.py
- выполняет преобразование video_file -> one_frame -> embedding.
Фото сохраняются в папкуimages_for_emb
согласно классам. Эмбеддинги сохраняются в датафреймы по классам. Также сохраняются названия, пути к видео и к фото для дальнейшей работы. Сохраняется четкое соответвие video_name -> embeddingfind_subclass.py
- Разделяет видеофайлы из одного класса на подклассы для дальнейшего семплирования. Похожие/идентичные видео в один подкласс. Схожеть определяется на основе эмбеддинговshow_subclasses.py
- для визуальной оценки качества разбиения на подклассыsampling_images.py
- семплирование видео для получения тренировочной и тестовой выборки на основании подклассовget_train_out_frames.py
- подготавливает фото из классаtrain_in_out
для дальнейшей разметкиcheck_result_model_with_logs.py
- скрипт для получения предсказания по одному видеофайлу с функцией логированияcheck_result_model_without_logs.py
- скрипт для получения предсказания по одному видеофайлу без логированияchecking_batch_videos.py
- предсказания для массива видеофайлов. Использует скриптcheck_result_model_without_logs.py
show_results_model.py
- массив видеофайлов -> фотографии с частотой 1 кадр в секунду с нанесением bounding_boxeses от YOLO 8ncheck_one_video.py
- один видеофайл -> одна фотографии с нанесением bounding_boxeses от YOLO 8n
dataframes
- содержит файлы в формате ".csv" для хранения, администрирования и проведения агрегаций данных
logs
- содержит файлы с расширением ".log" с логированием эскпериментов
images_for_emb
- содержит фотографии по классам для получения эмбеддингов
images_for_labeling
- содержит фотографии для дальнейшей разметки
weights
- содержит различные веса для модели YOLO 8n
prepair_dataset
- содержит исходные видеофайлы, распределенные по классам
root
requiremets.txt
- Object Detection -
YOLO 8n
- https://docs.ultralytics.com/ - Разметка фотографий -
Roboflow
- https://roboflow.com/ - Получение эмбеддингов -
Resnet18
- https://pytorch.org/hub/pytorch_vision_resnet/ - Трансформации изображений -
OpenCV
- https://opencv.org/\
Со всем списком используемых библиотек вы можете ознакомится в файле requirements.txt
- Для обучения использовались кадры из 255 видео (train)
- При тестировании на 241 видеофайле (test) при 10 кадров с ролика модель показала качество F1(macro) = 0.98
- Скорость обаботки одного видеофайла на процессоре Intel Core i5-8250U: 2,5 - 3,2 секунд
- Используя найденый способ сэмлирования, еще снизить размер обучающей выборки (до 30%). Проверить качество и стабильность работы модели
- Протестировать модель на меньшем количестве кадров с ролика. Проверить стабильности работы при разрыве более чем в 2 секунды
- Найти способ оптимизации обрабоки видео. Скорость обработки одного ролика 2,5 - 3,2 секунды (10 кадров). Скорость Object Detection одного фрейма 100 - 150 мс. 10 фреймов = 1,5 секунды. Выяснить на что уходит оставшееся время?
- Сочетание простой модели YOLO 8n и обычной логики показали неплохой результат.
- Подход к сэмплированию - рабочий. Он позволяет не только снизить количество фотографий для разметки, но повышает качество тренировочной выборки. Данный подход можно использовать и в других задачах видеоаналитики.
- Вся модель в целом может быть отправной точкой в оптимизации логистики. Собрав данные с разных локаций, можно определить сколько обычно уходит времени на определенные операции. Выяснить почему на некоторых локациях операции занимают больше времени, чем на других. Увидеть проблемы, наладить процессы. Это позволить уменьшить простой подвижного состава и снизить расходы на его аренду.
Хочу выразить огромную благодарность всем организаторам этого чемпионата! Работа на кейсом доставила удовольствие. Входе выполнения пришлось изучить новые полезные инструменты, освоить тонкости на практике. Сформировался подход для решения такого типа задач, который можно будет использовать в будущем.