Привет, Хабр! Меня зовут Виктор Прусаков, я ведущий разработчик в команде DSML в ГК Юзтех и уже четыре года занимаюсь data science. Эта статья написана по мотивам моего выступления на AIConf и посвящена системе машинного зрения, способной распознавать наличие СИЗ, опасные действия и перемещение персонала в зонах риска. Модульная архитектура с гибким ядром обеспечивает быструю кастомизацию решения под производственные задачи, что критично для реализации концепции нулевого травматизма.

Система машинного зрения может здорово помочь как бизнесу, так и безопасникам — она позволяет определять наличие или отсутствие СИЗ на человеке в опасной ситуации, распознавать людей в «красных зонах» или проводить учёт. 

В разработанной системе есть ядро с основными классическими модулями, а также возможность разработки дополнительных модулей детекторов под нужды заказчика. Такая гибкость решения позволяет масштабировать его на различные производственные площадки независимо от специфики деятельности.

Но обо всём по порядку.

Машинное зрение: зачем это нужно

Начнем с проблематики — для чего нужно машинное зрение? Компания стремится к нулевому травматизму. На производствах сложно добиться такого, ведь для этого нужно обращать внимание на мелочи и при несоблюдении требований безопасности реагировать на ЧП.

Итого, проблематика: 

  1. Травмы на производстве. Они приводят к различным экономическим потерям, снижению производительности и даже к летальным исходам;

  2. Штрафы и компенсации. Если происходят аварии из-за нарушения техники безопасности, компании выплачивают штрафы. В случае летального исхода штрафы могут быть огромными;

  3. Необходимость постоянного контроля за инцидентами и их предотвращение. Здесь больше играет роль человеческий фактор, потому что некоторые работники могут случайно стать нарушителями техники безопасности из-за усталости, незнания или других причин. 

Конечно, можно посадить человека, чтобы он смотрел в монитор и следил за всеми, но вариант так себе. Поэтому мы решили прибегнуть к искусственному интеллекту. Как говорится, если не хватает естественного интеллекта, будем использовать ИИ.

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

  • контроль ношения СИЗ (средств индивидуальной защиты) в зависимости от зоны детекции (первый и основной);

  • контроль несанкционированного проникновения на объект;

  • контроль за действиями и аномальными позами сотрудников;

  • детекция и контроль за техникой на объекте.

Рассмотрим модуль с детектированием СИЗ и нарушением нахождения в зонах

Архитектура достаточно простая и используется на одном из полевых лагерей геологоразведки. 

Камеры видеонаблюдения подключены к базе данных — все материалы сохраняются в ней. Из БД материалы переходят в препроцессинг, после него отрабатывает наша модель. После модели идёт постобработка, где как раз и находится алгоритм выявления различных нарушений. Всё это связано при помощи шины данных NiFi.

Датасет

Разработка начинается с датасета. Рассмотрим его предметнее.

  1. Датасет с видеокамер реального объекта заказчика

Обычно у дата-сайентистов всего две проблемы: 1) датасет слишком маленький и данных не хватает, 2) датасет слишком большой — много мусора. Нам повезло — у нас было слишком много мусора. Заказчик передал более 500 ГБ реальных кадров с видеокамер с реального полевого лагеря.

2. Раскадровка и отбор материалов 

Здесь мы столкнулись с первой трудностью — материал был несколько разбалансирован. Полевые работы обычно ведутся в определённые сезоны (лето, осень, возможно, весна), а рабочий день — в дневное время суток. В датасете было больше солнечных и ясных кадров, меньше — пасмурных. Но поскольку материалов было достаточно много, мы всё-таки смогли сделать некий минимум, собрать датасет из всех возможных вариантов погодных условий.

3. Итоговый датасет 

В итоге в него попало более 3000 изображений. 

4. Разметка 

Разметку мы делали при помощи приложения LabelImg.

Вот пример — кадры с реальных камер полевого лагеря:

Слева — жилые зоны с зонами для курения, справа сверху — въезд в лагерь, снизу — ремзона для техники.

Мы получили от заказчика требования по разметкам зон: жилые зоны с зонами для курения, зона въезда в лагерь, зона разгрузки-погрузки техники и зона ремонта. Где полосочки — это въезд в лагерь и въезд в ремзону.

Собрав датасет, мы приступили к разметке. Это выглядит следующим образом.

Так как у нас было не так много классов объектов мы все сделали за раз — сразу разметили технику, людей и наличие на них соответствующих жилетов и касок. 

И мы столкнулись снова с проблемой дисбаланса — объектов людей и техники было больше, чем жилетов и касок на людях.

В целях компенсации мы решили не заниматься синтетическими данными, а найти в интернете  уже готовые размеченные дата-сеты. Они как раз предназначены для моделей детектирования средств индивидуальной защиты.

Но у нас кадры с камер видеонаблюдения более панорамные, а в датасете, который мы нашли, более крупные планы с жилетами и касками. Также там ещё были очки, перчатки и другие СИЗ. Мы взяли только интересующие нас детали и переконвертировали в необходимый формат.

Здесь снова жилая зона, ремзона, разные люди и заправка. Причём это кадры с разными погодными условиями.

После того, как мы всё собрали и разметили, мы подготовились к выбору модели.

Сравнение моделей

Поскольку у нас уже был опыт в решениях Computer Vision, мы выбрали из моделей, которые уже использовали:

  • YOLO. Они быстрые, точные, универсальные и простые в обучении и интеграции в итоговое решение;

  • DETR. Эти модели очень точные, имеют среднюю скорость на инференсе и работают с видеопотоком Faster. Последнее — это преимущество, но не критичное для нас из-за наличия 12-ти камер. Мы брали по одному кадру в секунду с каждой. Поэтому основным критерием модели была скорость на инференсе;

  • Faster R-CNN. Здесь средняя точность при  средней скорости. Это уже, можно сказать, классика — одни из первых моделей в области Computer Vision.

Посмотрим на метрики качества и время обработки (усреднённые данные).

По метрикам качества видно, что модели YOLO незначительно уступают моделям DETR, но сильно их превосходят по времени обработки на инференсе. В итоге мы остановились на семействе моделей YOLO.

Эту систему мы внедрили год назад, а разрабатывали ещё раньше. На тот момент последняя версия YOLO была v9 — с неё и начали. Обучили модель на части нашего датасета — показатели качества и скорость на инференсе были удовлетворительные, но мы решили пойти дальше и начали обучать модели более ранних версий. Дойдя до YOLO v5 выяснилось, что эта версия лишь немногим уступает v9 по качеству (около  1−2%), но мы выигрываем несколько миллисекунд на инференсе.

Выбор пал в пользу скорости — на модель YOLO v5. 

Параметры модели и итоговые метрики

Дано: самая тяжёлая модель  YOLO-v5x среднего image size с размером batch 8. Остановились на 80 эпохах, так как при обучении нескольких версий поняли, что больше смысла обучать нет.

Метрики качества:

  • mAP@0.5 = 0.83 

  • mAP@0.5:0.95 = 0.57 

  • accuracy = 94.8%

Для нас было не так критично, если модель задетектирует бокс немного уже или короче. Из-за этого падает метрика качества mAP, но было важнее, чтобы модель детектировала правильное количество объектов. Поэтому мы использовали метрику качества accuracy.

Стенд для обучения:

  • GPU Nvidia RTX 2080Ti

  • CPU Intel® Core i7-9700 

  • ОЗУ 32 ГБ.

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

Инференс

После обучения модели мы перешли к инференсу и решили проверить одну гипотезу.

Поскольку у нас было 12 камер — 12 потоков, — мы решили попробовать отказаться от многопоточности, объединив все кадры в один большой, и запихивать его в модель. Но кадры с видеокамер более панорамные и объекты чаще всего находятся где-то далеко. Поэтому при таком подходе модель допускала много ошибок: она не находила объекты, расположенные далеко, и качество проседало. Так мы пришли к выводу, что лучше не мудрить и использовать  встроенное в библиотеку YOLO решение — многопоточность с очередями.

От размножения моделей мы также решили отказаться, так как это усложняет процесс внедрения и обновления моделей. При таком подходе у нас общая скорость на инференсе составила около 650 мс. 

Стенд для инференса у нас уже был более производительный — мы использовали RTX A4000, процессор i9 14 поколения и чуть больше оперативной памяти 

Результат работы нашей модели выглядел так.

Она задетектировала в ремзоне несколько единиц техники. Справа, на более крупном фрагменте — несколько единиц техники и рабочий в специальном жилете и каске, то есть в полном обмундировании.

Вот ещё несколько кадров работы нашей модели (въезд в лагерь, жилая зона, ремзона):

Здесь задетектированы единицы техники, люди, наличие или отсутствие на них касок и жилетов.

Анализ нарушений

Следом мы перешли к алгоритму анализа нарушений. Так выглядит один из вариантов выведения инцидентов.

Поскольку в нашем случае чаще всего правила нарушает именно человек, в случае, если модель задетектировала какой-то объект, мы исходим из того, что внизу бокса находятся ноги человека. Если нижняя часть бокса находится в определённой зоне, то считаем, что человек целиком находится в ней.

Например, здесь ноги человека находятся не в зоне, хотя можно сказать, что сам он всё-таки там. 

При таком подходе мы столкнулись с проблемой — люди не только стоят. Заказчик нам выдал перечень во��можных нарушений. В их числе, например, перемещение людей на технике. Человек может ехать только в кабине — сверху ездить нельзя. Там он принимает горизонтальное или сидячее положение. В этом случае наш алгоритм не совсем работает. Так мы пришли к тому, что нужно сделать модели по распознаванию поз.

Сравним несколько моделей.

У YOLOpose высокая скорость, но средняя точность. Что интересно, точность у них высокая по метрикам, но по факту, если человек находится в неестественной позе или он частично скрыт за каким-то объектом, модель пытается дорисовать конечности или туловище там, где их нет.

У MediaPipe очень высокая скорость, но точность ещё ниже. На кадре видно, что люди стоят в достаточно открытых позициях, но модель все равно детектирует скелет не там, где нужно, и не в том положении, которое действительно занимает человек.

Наверное, самый мощный инструмент по распознаванию поз — это MMPose. У них очень высокая точность. Модели этого семейства в детектировании поз могут, наверное, вообще всё, вплоть до определения мимики, положения пальцев рук и всего остального. Также они могут детектировать положение скелета животных. При этом есть нюанс — очень низкая скорость, а также влияние количества объектов на итоговую скорость инференса. То есть, если объектов больше одного, время инференса может вырасти в несколько раз.

Рассмотрим метрики качества и время обработки моделей детекции поз.

Модели YOLOpose в среднем достаточно быстро работают.  

В MediaPipe при наличии одного человека обработка кадра занимает около 18 мс; при наличии пяти и более объектов время на инференсе возрастает в несколько раз. 

MMPose — достаточно сложный инструмент, в нашем случае он не нужен. Достаточно  определять положение ног, рук и направление взгляда. Поэтому мы от него решили отказаться.

В итоге выбор пал на YOLOpose и MediaPipe. У этих инструментов есть различия по количеству точек при разметке: YOLOpose — всего 17 точек и MediaPipe — 33 точки.

Очевидно, что разметка из 33 точек значительно дольше и сложнее. Но и нам нужен был скорее общий скелет человека.

Мы попробовали YOLOpose из коробки на видео из открытых источников — взяли материал с камеры видеонаблюдения из рандомного магазина.

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

Мы решили дообучать эту модель. При этом размечать ничего не хотели — сложно, неинтересно и долго. Снова вышли в интернет, нашли размеченные датасеты из открытых источников. Думали, что взлетит, но столкнулись с тем, что датасет был неправильно размечен.

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

Распознавание поз: слева — модель из коробки, справа — наша модель, обученная на 200 изображениях.

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

На основе результатов этой модели мы уже сможем сделать более точный анализ нарушений и инцидентов. Например, если в кадре видно лестницу, рядом с которой лежит человек, вряд ли он там прилёг отдохнуть. Скорее всего, он упал и ему нужна помощь. Модель сможет помочь более точно определять положение человека и анализировать это.

Подытоживая: технические особенности системы

Система предназначена для проведения аналитики видеоданных (видеозаписей и потоков от видеокамер), а именно — автоматизации следующих задач

  • Возможность задавать и определять зоны детекции в кадре

  • Детекция заранее определённых объектов

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

  • Осуществление работы с различными типами ML-моделей 

Мы выбрали YOLOpose, но когда нужно улучшить качество, приходится пренебречь скоростью. В таких случаях мы сможем без проблем заменить наши ML-модели на любые другие.

  • Формирование отчётности 

  • Предоставление удобного пользовательского интерфейса для работы в системе

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

Технические модули системы:

  • модуль первичной обработки видеопотока;

  • модуль распознавания объектов (люди, техника, СИЗ);

  • модуль анализа нахождения объекта в зоне;

  • модуль постпроцессинга;

  • модуль сохранения важных результатов видеоанализа в базу данных. 

Для тех, кто захочет пойти по нашему пути или использовать наши подходы в своих проектах, могу выделить два основных совета:

  1. Уделите особое внимание материалам, с которыми вы работаете. Да, сейчас есть много датасетов в открытых источниках, которые могут значительно облегчить этап подготовки данных. Но нужно обращать внимание на качество используемых материалов, т.к. из-за некорректной разметки можно потерять значительное время на этапах обучения и валидации моделей с последующей переразметкой.

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

Над чем мы сейчас работаем

Поскольку у нас достаточно большой опыт в решениях Computer Vision, мы начали работать в направлении распознавания аудио и текста — разрабатываем коробочную версию видеоаналитической платформы обработки данных. Она будет предусматривать работу с различными источниками и типами данных, включать разные сценарии применения (CV, ASR, STD, OCR и т.д.), а также закрывать любые потребности бизнеса при работе с ML-моделями и обработки их результатов.

Скрытый текст

А чтобы узнать больше о том, как развиваются технологии компьютерного зрения, трендах LLM, свежих фреймворкаах и инструментах по машинному обучению — следите за обновлениями ежегодной конференции AIConf! Регистрируйтесь на мероприятие и следите за нашими публикациями на Хабре — вас ждёт ещё много интересного!