Привет, Хабр! Меня зовут Виктор Прусаков, я ведущий разработчик в команде DSML в ГК Юзтех и уже четыре года занимаюсь data science. Эта статья написана по мотивам моего выступления на AIConf и посвящена системе машинного зрения, способной распознавать наличие СИЗ, опасные действия и перемещение персонала в зонах риска. Модульная архитектура с гибким ядром обеспечивает быструю кастомизацию решения под производственные задачи, что критично для реализации концепции нулевого травматизма.
Система машинного зрения может здорово помочь как бизнесу, так и безопасникам — она позволяет определять наличие или отсутствие СИЗ на человеке в опасной ситуации, распознавать людей в «красных зонах» или проводить учёт.
В разработанной системе есть ядро с основными классическими модулями, а также возможность разработки дополнительных модулей детекторов под нужды заказчика. Такая гибкость решения позволяет масштабировать его на различные производственные площадки независимо от специфики деятельности.
Но обо всём по порядку.
Начнем с проблематики — для чего нужно машинное зрение? Компания стремится к нулевому травматизму. На производствах сложно добиться такого, ведь для этого нужно обращать внимание на мелочи и при несоблюдении требований безопасности реагировать на ЧП.
Итого, проблематика:
Травмы на производстве. Они приводят к различным экономическим потерям, снижению производительности и даже к летальным исходам;
Штрафы и компенсации. Если происходят аварии из-за нарушения техники безопасности, компании выплачивают штрафы. В случае летального исхода штрафы могут быть огромными;
Необходимость постоянного контроля за инцидентами и их предотвращение. Здесь больше играет роль человеческий фактор, потому что некоторые работники могут случайно стать нарушителями техники безопасности из-за усталости, незнания или других причин.
Конечно, можно посадить человека, чтобы он смотрел в монитор и следил за всеми, но вариант так себе. Поэтому мы решили прибегнуть к искусственному интеллекту. Как говорится, если не хватает естественного интеллекта, будем использовать ИИ.
Наша система состоит из нескольких модулей. Некоторые из них уже используются на производствах, а другие находятся на этапе разработки:
контроль ношения СИЗ (средств индивидуальной защиты) в зависимости от зоны детекции (первый и основной);
контроль несанкционированного проникновения на объект;
контроль за действиями и аномальными позами сотрудников;
детекция и контроль за техникой на объекте.
Архитектура достаточно простая и используется на одном из полевых лагерей геологоразведки.
Камеры видеонаблюдения подключены к базе данных — все материалы сохраняются в ней. Из БД материалы переходят в препроцессинг, после него отрабатывает наша модель. После модели идёт постобработка, где как раз и находится алгоритм выявления различных нарушений. Всё это связано при помощи шины данных NiFi.
Разработка начинается с датасета. Рассмотрим его предметнее.
Датасет с видеокамер реального объекта заказчика
Обычно у дата-сайентистов всего две проблемы: 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 эпохах, так как при обучении нескольких версий поняли, что больше смысла обучать нет.
Метрики качества:
[email protected] = 0.83
[email protected]: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-модели на любые другие.
Формирование отчётности
Предоставление удобного пользовательского интерфейса для работы в системе
Все инциденты у нас сохраняются в отдельной базе данных. Оператор в любой момент может задать необходимый диапазон и увидеть все инциденты, произошедшие в это время.
Технические модули системы:
модуль первичной обработки видеопотока;
модуль распознавания объектов (люди, техника, СИЗ);
модуль анализа нахождения объекта в зоне;
модуль постпроцессинга;
модуль сохранения важных результатов видеоанализа в базу данных.
Для тех, кто захочет пойти по нашему пути или использовать наши подходы в своих проектах, могу выделить два основных совета:
Уделите особое внимание материалам, с которыми вы работаете. Да, сейчас есть много датасетов в открытых источниках, которые могут значительно облегчить этап подготовки данных. Но нужно обращать внимание на качество используемых материалов, т.к. из-за некорректной разметки можно потерять значительное время на этапах обучения и валидации моделей с последующей переразметкой.
Если нет специальных требований, используйте простые инструменты. В большинстве случаев они отлично справляются со своей задачей, чего будет вполне достаточно для закрытия потребностей.
Поскольку у нас достаточно большой опыт в решениях Computer Vision, мы начали работать в направлении распознавания аудио и текста — разрабатываем коробочную версию видеоаналитической платформы обработки данных. Она будет предусматривать работу с различными источниками и типами данных, включать разные сценарии применения (CV, ASR, STD, OCR и т.д.), а также закрывать любые потребности бизнеса при работе с ML-моделями и обработки их результатов.
Скрытый текстА чтобы узнать больше о том, как развиваются технологии компьютерного зрения, трендах LLM, свежих фреймворкаах и инструментах по машинному обучению — следите за обновлениями ежегодной конференции AIConf! Регистрируйтесь на мероприятие и следите за нашими публикациями на Хабре — вас ждёт ещё много интересного!
Источник


