2D/3D распознавание лиц
и трекинг тела
3DiVi Новости
Статьи

Как успешно портировать CV/ML модели на Rockchip NPU для ускоренного распознавания лиц

В 2024 году команда 3DiVi Face SDK столкнулась с новым для себя вызовом: один из партнеров решил реализовать систему контроля и управления доступом (СКУД) с распознаванием лиц, используя для этого одноплатный компьютер от Forlinx.

Чтобы уложиться в существующие ограничения по времени на распознавание, нам нужно было портировать наши модели на NPU. У нас получилось, а NPU в целом оказался рабочим вариантом засунуть тяжелый процессинг в Edge-устройство.

Как работает распознавание лиц: базовый пайплайн

Нашему партнеру требовалась детекция лиц на видеопотоке с последующей верификацией (1:1). Чтобы чуть лучше понять, что это значит, давайте вспомним схему базового пайплайна распознавания лиц.
  • Вначале модуль детекции находит лицо на изображении. Как правило, все детекторы лиц, которые сегодня используются в проде, являются сверточными нейронными сетями (CNN).

  • Далее, находим ключевые точки лица. Эту операцию также выполняет нейронная сеть, иногда отдельная (Fitter), иногда та же, что осуществляет детекцию. В нашем случае – это отдельная сверточная сеть.

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

  • И, наконец, из выровненного изображения лица ещё одна нейронная сеть извлекает биометрический шаблон.

Требования к скорости распознавания и оборудованию

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

  • Face Detector
  • Face Fitter
  • Face Template Extractor

При этом, у нас были следующие ограничения по времени:

  • Суммарное время работы Face Detector и Face Fitter – не более 40 мс.
  • Извлечение шаблона и сравнение двух шаблонов – не более чем за 500 мс.

Казалось бы, ограничения вполне приемлемы. Но теперь давайте посмотрим, на чем же нам предстоит работать. Полюбуйтесь, OK3568-C.
Не самое производительное устройство, не правда ли?

Мы выбрали конкретные модели Face Detector, Face Fitter и Face Template Extractor из состава 3DiVi Face SDK и замерили время их работы. Результаты, представленные в таблице ниже, ожидаемо, не укладывались в заявленные ограничения по времени.

После этого мы перешли к инференсу на NPU.

Инференс на Rockchip NPU

Отметим, что инференс на Rockchip NPU может осуществляться в двух видах:

  • Дефолтный режим. При этом модели переводятся из Float32 в Float16, и происходит незначительная (зачастую) потеря точности.
  • Инференс с квантизацией. При этом модели переводятся из Float32 в Int8, происходит потеря точности, иногда весьма ощутимая.

В ходе экспериментов мы получили следующие замеры времени:
А что же с качеством распознавания? Да, мы получили небольшую просадку, но после нескольких экспериментов квантизованная в Int8 модель все ещё может быть успешно применена в проде (датасет LFW).

Выводы

Подводя итоги, отметим, что использование NPU оказалось эффективным способом ускорения инференса моделей CV/ML. При этом небольшое снижение точности, не критичное для задачи контроля доступа, полностью оправдано соблюдением временных ограничений на распознавание.
Если в вашем проекте по распознаванию лиц нужен инференс на NPU, пишите смело. Будем рады помочь.