май 2019
используется в продукте Deepmark БКД

Задача
Разработать фреймворк качественного распознавания лиц для микрокомпьютеров
Средний показатель FPS на Cortex A53 при идентификации одного пользователя (в СКУД, на турникетах)
3 кадра
Минимальный размер ОЗУ для работы фреймворка
1 Гб
Возможность гибкой настройки рабочей точки алгоритма - баланса FAR / FPS для заданного FRR
Алгоритм должен адаптивно подстраиваться под характеристики аппаратной платформы.
Баланс точности и производительности должен быть гибко настраиваемым. Алгоритм должен эффективно использовать вычислительную мощность серверных платформ и при этом обеспечивать достаточный показатель fps для встраиваемых платформ.
Количество лиц в базе алгоритма идентификации
до 20.000
Минимальный размер лица в режиме черного списка
40 пикселей
Минимальный размер лица в режиме белого списка
80 пикселей
Целевая аппаратная платформа для встраиваемого варианта решения:
NanoPi Fire3-LTS

Результат
Визуализация кластеризации лиц с помощью алгоритма t-SNE

Процесс
Обнаружение лиц: выбираем архитектуру детектора
Останавливаем свой выбор на каскадной архитектуре MTCNN, которая при высокой базовой производительности позволяет гибко настраивать детектор для различных задач. Процесс обнаружения состоит из четырёх стадий (используются 4 нейросетевых модели). Результатом выполнения четвёртой стадии помимо уточнённого прямоугольника лица являются координаты центров глаз, кончика носа и уголков рта, которые используются для выравнивания лица перед идентификацией.
Производительность алгоритма может регулироваться изменением масштабирующего фактора пирамиды изображений, используемых на первой стадии. Кроме того, в задаче идентификации одного пользователя четвертая стадия выполняется только для одного лица, что также значительно сокращает время выполнения.

Идентификация лиц: разрабатываем каскадную архитектуру, обучаем модели
Выбираем две архитектуры свёрточных нейронных сетей - MobileNetV2 и ResNet36 и объединяем их в один каскад. Оптимизируем архитектуру нейронных сетей для сокращения используемого объёма памяти. Цель - возможность работы фреймворка на платформе с 1 Гб.

Выбираем фреймворк: ncnn. Он глубоко оптимизирован для развёртывания на мобильных и встраиваемых платформах и поддерживает квантование параметров сети до float16 и int8.
Наш алгоритм
MobileNetV2
ResNet36
Тестируем производительность и fps на микрокомпьютере
Тестируем производительность на NanoPi Fire 3 в задаче идентификации из списка в 20000 пользователей. Формат кадра - HD, минимальный размер лица 120 пикселей.
среднее время работы детектора
~ 160 мс
время идентификации пользователя c помощью модели MobileNet V2
130 мс
время идентификации пользователя c помощью модели ResNet36
580 мс
среднее время идентификации пользователя с помощью каскадной модели
~ 180 мc
средний показатель FPS
~ 2.9





