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

Как мы разработали систему машинного зрения для детектирования СИЗ и техники

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

a3875fa5f4964529986af9217e5bafdc.png

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

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

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

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

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

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

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

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

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

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

4b0ab9df6351884a814689a4343051f9.jpeg

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

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

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

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

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

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

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

899da8b8004d2f863b6b1ad81ba84402.jpeg

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

Датасет

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

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

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

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

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

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

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

4. Разметка

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

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

ed0bda10bea6df4205d3fc297bccdd22.jpeg

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

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

22d8dea7792aa27cabd011077d4e7b59.jpeg

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

13615a064799a3d0ba403442eef22253.jpeg

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

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

1408c7607a194231f34ce888d372e176.jpeg

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

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

47df985aa68667844aabfb0857d46ba1.jpeg

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

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

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

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

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

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

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

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

5f9e535c669bf262bd235a52f880d554.jpeg

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

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

6ce856466171ed6293f692c385c6a060.jpeg

Выбор пал в пользу скорости — на модель 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 ГБ.

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

Инференс

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

2af7adcd1b402629e4d71d69888e68ff.jpeg

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

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

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

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

552148c75650c3c44017e502fabda891.jpeg

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

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

01fe186afc354ef9ee59f18e4589b471.jpeg

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

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

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

7ccb276fa0b7b9adce5fe08ede722008.jpeg

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

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

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

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

861b8f2e6fae38e092cfccb49fa67558.jpeg

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

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

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

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

daa069549a690d9f33ca8f58160e4665.jpeg

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

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

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

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

3ffc0e987b59281bb8fd1383d286cda5.jpeg

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

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

b3525e5201c6500784bd0a6ffb24ef47.jpeg

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

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

eb0c599a1567ca13e7bce2c72ab8282d.jpeg

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

ef8ec4dca58ee555687720c6395669a4.jpeg

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

c98a7911bb3d30bd2e22cb0f21403bf7.jpeg

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Источник

Отказ от ответственности: Статьи, размещенные на этом веб-сайте, взяты из общедоступных источников и предоставляются исключительно в информационных целях. Они не обязательно отражают точку зрения MEXC. Все права принадлежат первоисточникам. Если вы считаете, что какой-либо контент нарушает права третьих лиц, пожалуйста, обратитесь по адресу service@support.mexc.com для его удаления. MEXC не дает никаких гарантий в отношении точности, полноты или своевременности контента и не несет ответственности за любые действия, предпринятые на основе предоставленной информации. Контент не является финансовой, юридической или иной профессиональной консультацией и не должен рассматриваться как рекомендация или одобрение со стороны MEXC.