Украинская IT-компания Fulcrum разработала нейросеть, которая умеет распознавать в толпе людей без медицинских масок. Об этом AIN.UA рассказали в компании.

Компания выложила код проекта на GitHub, а также описала его процесс создания и технологии. По словам backend-разработчика Сергея Калачникова, который работал над проектом, идея была в том, чтобы проверить: можно ли находить лица без масок только по веб-камерам. Это — некоммерческий проект, по словам разработчика, командой двигало скорее любопытство.

На обучение нейросети ушло две недели. Процесс ее создания разработчики описали в блоге. Вкратце он выглядел так:

  • В финальной версии нейросети использованы TensorFlow 2 Nightly, OpenCV 2, Keras, Yolov3. OpenCV — для обработки изображений и создания “квадратов” с масками. Yolov3 — “мозг” нейросети.
  • Начинали с задания попроще: обучить сеть находить маски на изображениях, а потом уже двигаться к обработке видео. В процессе создали два приложения. Первое написано на Node.js, используется для создания ярлыков. Оно помогает составлять наборы данных и трансформировать координаты расположения объектов на картинке с Labelbox JSON в XML Yolov3-формат.
  • Для начала надо было определить точное положение маски (или любого объекта). Для этого использовали сайт Labelbox. Он удобен, поскольку генерирует файл с нужными настройками: расположением маски, размерами изображения, времени, которое потрачено на изображение, и т.д. Эти файлы позднее попадают в одну из упомянутых программ.
  • Для Labelbox написали код, который парсит оттуда данные. Они позднее распределяются по другим файлам, в представлении, необходимом для того, чтобы с ними работала нейросеть. Программа также создает якоря на основании этих данных. Их используют, чтобы определять высоту и ширину маски, и как ее масштабировать. В итоге получается финальный набор данных с изображениями и подписями к ним.
  • Вторая программа написана на Python, она включает в себя Yolov3 и обучает нейросеть. С помощью этого приложения разработчики создали свою модель распознавания объектов на изображении.
  • Максимальный размер для распознаваемого куска изображения установили на 288 px. Это число может быть и больше, его выбрали небольшим ради увеличения скорости обработки.
  • num.epoch обозначает количество шагов для обучения. 30 шагов обучения заняли 12 часов времени (с размером изображения в 288 px).
  • Для видео пришлось писать отдельный скрипт. Но он работал по тем же принципам, которые использовали для анализа изображений. Он основан на Yolov3. Также команда настроила openCV для загрузки видео и поиска кадров с определенной частотой. Программа работает так: в определенную папку загружается видеофайл, и она начинает обрабатывать видео покадрово.
  • Веб-камеры обычно записывают короткие видео по 10-15 минут. Эти видео можно было бы отсылать на сервер, где их будет обрабатывать похожий софт. Это может пригодиться, если компания или организация, к примеру, хочет следить, чтобы все ее сотрудники носили маски.

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