Как стать автором
Обновить
0

Как мы распознаем средства индивидуальной защиты

Время на прочтение7 мин
Количество просмотров6.5K
Наверное, вам всю жизнь было очень интересно, как натренировать нейронную сеть распознавать людей в касках и оранжевых жилетах! Нет? Но мы все равно расскажем.

Нас зовут Татьяна Воронова и Эльвира Дяминова. Мы занимаемся анализом данных в компании «Центр 2М», много работаем с самыми настоящими заводами и предприятиями. Из-за нарушений техники безопасности они терпят многомиллионные убытки, работники получают травмы, поэтому хорошо бы уметь детектировать такие нарушения системно и как можно раньше. Лучше всего – автоматически. Так у нас появляются задачи, связанные с распознаванием на видео средств индивидуальной защиты (СИЗ) и определением людей или техники в опасной зоне.

image

По большей части к нам приходят заказы на определение касок (точнее, их отсутствие) и спецодежды. Мы уже накопили опыт в выполнении подобных задач и теперь можем описать проблемы, с которыми столкнулись, и способы их решения.

Поскольку по условиям сотрудничества мы не имеем права публиковать кадры с объектов заказчика, статью будем иллюстрировать изображениями из интернета, на которых люди в касках часто улыбаются и отлично выглядят. К сожалению, в открытом доступе не для всех особенностей задач, с которыми мы сталкиваемся в реальности, можно найти хорошие примеры. В частности, в жизни люди в касках реже улыбаются, а проблема лысых рабочих (о ней мы расскажем чуть позже) в интернете вообще толком не раскрыта!

Изображение из интернета (размер 1920x1280):

image

Задачу распознавания СИЗ можно сводить к одной из двух классических задач компьютерного зрения: к классификации изображений и детекции объектов. На практике выяснилось, что лучше использовать не какой-то один из этих подходов, а выбирать наиболее подходящий для каждого конкретного случая, а также гибко их комбинировать. Например, мы можем сначала определить, где на изображении находятся люди, затем классифицировать вырезанные по силуэту изображения на классы «в спецодежде» и «без», а наличие каски детектировать вторым проходом.

На предварительно вырезанных фигурах людей классификация наличия касок и спецодежды выглядит так (вид изначальной картинки):

Результат работы моделей для классификации спецодежды и касок

image

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

Результат работы модели для классификации спецодежды и модели для детектирования касок:

image

Первый этап: детектирование человека


Качество определения мелких объектов (каски/очки/перчатки) на больших кадрах так себе. Компьютеру, как и человеку, гораздо проще сначала понять, где там люди, а уж потом разбираться, что на них надето. Итак, всё начинается с определения людей на кадре.

В результате экспериментов мы выяснили, что для детектирования людей хорошо подходит нейронная сеть Faster R-CNN c Inception v2 в качестве feature extraction. У TensorFlow уже есть предобученные нейронные сети для детектирования объектов.

Для нас Faster R-CNN Inception v2 (обученная на датасете COCO) является базовым методом, который мы пробуем первым делом при решении подобных задач.

Первоначально детектируем людей на кадре (а затем на найденных людях находим СИЗ):

image

Обратите внимание, что мы увеличили bounding box «с человеком» по оси y:

image

На данной фотографии рабочий снят при хорошем освещении и на контрастном фоне (с изображениями, найденными в интернете, такое случается сплошь и рядом). Поэтому и bounding box с человеком построился хорошо. Однако в нашей практике нередки случаи (особенно в условиях недостаточной видимости), когда модель по детектированию обрезает у человека каску, после чего искать её на обрезанном изображении бесполезно. В связи с этим по оси y мы на 15% увеличиваем предсказанные bounding box прежде, чем переходить на второй этап.

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

Более фундаментальная проблема состоит в том, что индустриальные помещения, в которых существует «опасная зона», часто бывают огромными и соответственно люди на кадрах получаются очень маленькими. Наш базовый метод на основе Faster R-CNN Inception v2 в таких случаях показывал плохие результаты, и в итоге мы опробовали Faster R-CNN Nas. Результаты были впечатляющими, люди прекрасно распознавались даже вдалеке, однако скорость работы была намного ниже базовой модели. При достаточных ресурсах и необходимости высокой точности можно использовать Faster R-CNN Nas.

Второй этап: определение злостных нарушителей


В зависимости от задачи зачастую используются:

  • Модель для классификации изображений – Inception v3
  • Модель для детектирования объектов – Faster R-CNN Inception v2

Классификация спецодежды и касок


Мы протестировали разные архитектуры нейронных сетей для классификации изображений и в итоге остановились на Inception v3, решив воспользоваться тем, что он предназначен для работы с переменным размером изображений. У нас уже было много вырезанных картинок с людьми, и посчитать медианные значения для высоты и ширины не составило труда. Так мы пришли к тому, что для обучения классификаторов стали приводить изображения к размеру 150x400.

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

Примеры из нашего датасета по спецодежде:

image

В качестве метрик мы ничего специфического не изобретали, используем полноту (recall) и точность (precision).

Модель для классификации наличия / отсутствия спецодежды:

Результаты на валидационной выборке

image

Детектирование СИЗ


Модель для классификации работает быстрее модели для детектирования объектов, однако из-за того, что защитные очки и перчатки на изображении маленького размера, хороший классификатор для таких СИЗ создать затруднительно. Поэтому мы обучили нейронную сеть Faster R-CNN на датасете с шестью классами:

  • glasses / not_glasses
  • gloves / not_gloves
  • helmet / not_helmet

image

Сбор датасета и разметка


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

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

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

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

image

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

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

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

После удаления неподходящих изображений мы приступили непосредственно к разметке (для детектирования объектов). Это оказалось не так-то просто. Оказывается, качество итогового детектора во многом зависит от того, какую в точности область на изображении размечать как «каску» или «перчатки». Первоначально мы выделяли каски и очки без захвата лиц, а перчатки с захватом рук. Однако с опытом мы постепенно совершенствовали свой подход, отсматривая ошибки первого и второго рода, где люди держат каски в руках, а нечто круглое на чем-то длинном оказывается «перчаткой». Сейчас при разметке касок и очков мы стараемся захватывать лицо до кончика носа, а при разметке перчаток, наоборот, ограничились кистью.

image

В результате наших манипуляций над датасетом мы получили следующие результаты.

Модель для детектирования наличия / отсутствия СИЗ на примере касок:
Результаты на валидационной выборке до начала «глобальных работ» над датасетом

image


Итоговые результаты на валидационной выборке

image

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

Модель для классификации наличия / отсутствия касок:
Результаты на валидационной выборке до начала «глобальных работ» над датасетом

image

Итоговые результаты на валидационной выборке

image

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

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

image

Бонус


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

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

За основу мы решили взять размер 1000x600 для холста, на который будут «наноситься» люди. Первоначально рассматривали два варианта компоновки:

  • Фиксированная ширина и высота (200х600), при таком подходе на кадре находятся 5 персон.
  • Фиксированная ширина и высота (125х600), 8 персон.

Такое решение было связано с тем, что при фиксированных данных мы точно знаем количество персон на фотографии, что даёт нам прогнозирование нагрузки. Однако в ходе разработки мы рассмотрели и такой вариант:
  • Фиксированная высота и пропорциональная ширина (***х600), разное количество персон.

Предполагалось, что при увеличении размеров и сохранении пропорций результаты будут лучше по сравнению с другими вариантами компоновок. Количество персон колебалось от 3 до 5 (+/–).

В результате мы получили, что вариант с фиксированной шириной и высотой (200х600) является наилучшим среди рассмотренных. Для детектирования очков и перчаток данный способ, конечно, не подходит, так как объекты маленькие, а вот для детектирования касок / отсутствия касок данный метод показал хорошие результаты.

Например, на валидационной выборке:

image

image

Авторы статьи: Татьяна Воронова (tvoronova), Эльвира Дяминова(elviraa)
Теги:
Хабы:
Всего голосов 12: ↑12 и ↓0+12
Комментарии3

Публикации

Информация

Сайт
center2m.ru
Дата регистрации
Дата основания
Численность
Неизвестно
Местоположение
Россия

Истории