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

Авторы статьи: Шелагурова Марина, Степанов Вячеслав, Фиргалеева Азалия

1. Постановка задачи

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

Условия эксперимента:

Минимально система должна выполнять следующие функции:
  • Регистрация пользователя
  • Распознавание пользователя
  • Работа с базой данных пользователей:
  1. Экспорт данных
  2. Импорт данных
  3. Удаление всех данных
  4. Удаление конкретного пользователя

Для работы с данными пользователя была выбрана база данных sqllite.

2. Выбор моделей

Обзор моделей

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

  • Ultralytics YOLOv8
  • MediaPipe
  • MTCNN
  • FastMTCNN
  • CenterFace
  • Dlib
  • RetinaFace
  • OpenCV
  • YuNet
  • SSD
  • InsightFace
  • Face_Recognition
  • DeepFace
Ниже приведен перечень библиотек, которые содержат методы-детекторы:

  • Ultralytics YOLOv8
  • MediaPipe
  • MTCNN
  • FastMTCNN
  • CenterFace
  • Dlib
  • RetinaFace
  • OpenCV
  • YuNet
  • SSD
  • InsightFace
  • Face_Recognition
Библиотеки, которые содержат методы извлечения эмбеддингов:

  • InsightFace
  • DeepFace
  • OpenCV
  • Face_Recognition
  • Dlib.
Рассмотрим подробнее каждую из этих технологий.

Ultralytics YOLOv8

Описание: фреймворк для создания, обучения и предсказаний с использованием модели YOLO.
Детекторы: YOLOv8 модели.
Ресурсы: рекомендуется использовать GPU для обработки в реальном времени.
Требования: Python, PyTorch.
Функции: обнаружение объектов, включая лица.
Интеграция: простая интеграция с Python-скриптами.
Документация: https://docs.ultralytics.com

MediaPipe

Описание: библиотека от Google для обработки мультимедийных данных, включая обнаружение объектов и лиц.
Детекторы: Mediapipe Face Detection, Mediapipe Face Mesh.
Ресурсы: работает на CPU/GPU.
Требования: Python, C++, Android, iOS.
Функции: детекция лиц, сетка лица, отслеживание рук и другие ML-решения.
Интеграция: Python, мобильные и web-приложения.
Документация: https://google.github.io/mediapipe

MTCNN

Описание: многозадачные каскадные сверточные сети для детекции лиц.
Детекторы: MTCNN.
Ресурсы: CPU/GPU.
Требования: TensorFlow или PyTorch.
Функции: Детекция лиц и их выравнивание.
Интеграция: Python.
Документация: https://github.com/ipazc/mtcnn

FastMTCNN

Описание: улучшенный метод для обнаружения лиц, использующий Fast-Multi-Task Cascaded Convolutional Networks для быстрого и точного обнаружения.
Детекторы: FastMTCNN.
Ресурсы: рекомендуется использовать GPU для более быстрой работы.
Требования: TensorFlow или PyTorch.
Функции: быстрая реализация MTCNN для детекции лиц.
Интеграция: Python.
Документация: https://github.com/serengil/mtcnn

CenterFace 3

Описание: метод для обнаружения лиц, который обеспечивает точное позиционирование и определение ключевых точек лица.
Детекторы: CenterFace.
Ресурсы: Рекомендуется использовать GPU.
Требования: PyTorch.
Функции: Детекция лиц и их выравнивание.
Интеграция: Python.
Документация: https://github.com/Star-Clouds/CenterFace

Dlib

Описание: библиотека с открытым исходным кодом для машинного обучения и обработки изображений, включая обнаружение лиц
Детекторы: Dlib HOG, Dlib CNN.
Эмбеддинги: Dlib ResNet.
Ресурсы: CPU/GPU.
Требования: C++ библиотека с Python обертками.
Функции: Детекция лиц, оценка позы и распознавание лиц.
Интеграция: Python, C++.
Документация: http://dlib.net


RetinaFace

Описание: метод для обнаружения лиц с использованием RetinaNet, который обеспечивает высокую точность и скорость обнаружения.
Детекторы: RetinaFace.
Ресурсы: Рекомендуется использовать GPU.
Требования: PyTorch или MXNet.
Функции: современная детекция лиц.
Интеграция: Python.
Документация: https://github.com/serengil/retinaface

OpenCV

Описание: библиотека с открытым исходным кодом для компьютерного зрения, включая обнаружение объектов и лиц.
Детекторы: Haarcascade, DNN (Deep Neural Networks).
Эмбеддинги: Haarcascade, YuNet
Ресурсы: CPU/GPU.
Требования: C++ библиотека с Python обертками.
Функции: Общий компьютерный анализ, включая детекцию лиц.
Интеграция: Python, C++.
Документация: https://docs.opencv.org


YuNet

Описание: легкая сеть для детекции лиц.
Детекторы: YuNet.
Ресурсы: CPU/GPU.
Требования: OpenCV.
Функции: эффективная детекция лиц.
Интеграция: Python, C++.
Документация: https://docs.opencv.org/4.x/d2/d58/

SSD

Описание: Single Shot MultiBox Detector (SSD) - метод для обнаружения объектов, включая лица, с использованием одной сети.
Детекторы: SSD.
Ресурсы: Рекомендуется использовать GPU.
Требования: TensorFlow, PyTorch.
Функции: Обнаружение объектов, включая лица.
Интеграция: Python.
Документация: https://github.com/tensorflow/models/tree/

InsightFace

Описание: библиотека для обнаружения и распознавания лиц с использованием глубокого обучения.
Детекторы: RetinaFace, SCRFD.
Эмбеддинги: ArcFace, CosFace.
Ресурсы: рекомендуется использовать GPU.
Требования: MXNet, PyTorch.
Функции: Детекция, распознавание и анализ лиц.
Интеграция: Python.
Документация: https://insightface.ai

Face_Recognition

Описание: библиотека для распознавания лиц, основанная на библиотеке Dlib
Детекторы: Dlib HOG, Dlib CNN.
Эмбеддинги: Dlib ResNet.
Ресурсы: CPU/GPU.
Требования: Dlib, Python.
Функции: Детекция и распознавание лиц.
Интеграция: Python.
Документация: https://github.com/ageitgey/face_recognition

Ниже приведена Таблица 1 с характеристиками работы детекторов перечисленных библиотек. Тестирование проводилось на персональном компьютере Intel Core i5-1145G7, 8GB RAM.

Таблица 1. Характеристики работы детекторов

В Таблице 2 приведены характеристики работы некоторых моделей для извлечения эмбеддингов.

Таблица 2.

Вывод:
Некоторые модели, такие как YOLOv8, MTCNN и Dlib, обеспечивают высокую точность, но требуют значительных вычислительных ресурсов. Легковесные модели, такие как YuNet и CenterFace, лучше подходят для мобильных устройств и встроенных систем.
Модели InsightFace, такие как ArcFace и CosFace, а также модели типа RetinaFace, обеспечивают высокую точность распознавания лиц.
Библиотеки типа OpenCV, face_recognition и Mediapipe предоставляют простые в использовании API и хорошо документированы.

В работу были взяты следующие модели и их комбинации:
  • Face_recognition
  • DeepFace
  • OpenCV (каскады Хаара + LBPHrecognizer)
  • Yunet: Face Detection YuNet и SFace
  • MTCNN+InceptionResnetV1
  • Insightface

3. Тестирование моделей

Тестирование моделей осуществлялось двумя способами:
  1. С помощью видеокамеры на реальных людях.
  2. На тестовом наборе данных.
Тестирование проводилось на персональном компьютере Intel Core i5-7300HQ,8 GB RAM.

3.1. Исходные данные для экспериментов

Face_recognition

Регистрация пользователя проводилась по 1 кадру и 10 кадрам.
Embedding, name хранятся в БД sqllite.

В качестве детектора использовалась встроенная функция в dlib: get_frontal_face_detector(). Эта функция возвращает детектор, основанный на методе гистограмм ориентированных градиентов (HOG) и классификаторе на основе метода поддерживающих векторов (SVM).

DeepFace

Регистрация пользователя проводилась по 1 кадру и 10 кадрам.
Embedding, name хранятся в БД sqllite.

Для детектирования лиц использовалась встроенная в DeepFace функция DeepFace.extract_faces(), в которой в качестве детектора был выбран бэкенд opencv, использующий каскады Хаара для обнаружения лиц.

В данной библиотеке можно использовать несколько различных моделей для извлечения эмбеддингов лица
  • VGG-Face: Модель, разработанная Visual Geometry Group (VGG) из Оксфордского университета. Хорошо зарекомендовала себя в задачах распознавания лиц.
  • FaceNet: Модель, разработанная Google, которая используется для определения эмбеддингов лиц с высокой точностью.
  • OpenFace: Модель, разработанная CMU, которая является открытой и эффективной для задач распознавания лиц.
  • DeepID: Модель, разработанная в Китайском университете Гонконга, которая также хорошо зарекомендовала себя в задачах распознавания лиц.
  • ArcFace: Современная модель, которая используется для распознавания лиц и показывает высокую точность на различных наборах данных.

Каскады Хаара + LBPH Recognizer

Регистрация пользователя проводилась по 1 кадру и 10 кадрам.

Embedding хранятся в отдельном файле, т.к. модель LBPH работает с ним: дообучение и извлечение Embedding происходит из этого файла. Имена пользователей хранятся в БД sqllite. Таким образом, невозможно из файла модели удалить данные или добавить без переобучения всей модели.

Для данной модели использовался детектор haarcascade_frontalface_default.xml

Face Detection YuNet и SFace

Регистрация пользователя проводилась по 1 кадру и 10 кадрам.
Embedding, name хранятся в БД sqllite.

Использовалась модель для детектирования лиц, созданная с использованием архитектуры YuNet - face_detection_yunet_2023mar.onnx.

Использовалась модель для распознавания лиц, основанная на архитектуре SFace - face_recognition_sface_2021dec.onnx.

MTCNN+InceptionResnetV1

Регистрация пользователя проводилась по 1 кадру и 10 кадрам.

Embedding, name хранятся в БД sqllite.

MTCNN использовалась в качестве детектора, а InceptionResnetV1 в качестве эмбеддера

Insightface

Регистрация пользователя проводилась по 1 кадру и 10 кадрам.

Embedding, name хранятся в БД sqllite.

Для детекции и распознавания лиц использовался класс FaceAnalysis из библиотеки insightface.app. Этот класс предназначен для анализа лиц и поддерживает различные функции, такие как обнаружение, распознавание и экстракция признаков лиц. FaceAnalysis по умолчанию использует модель ArcFace для распознавания лиц.

3.2. Тестирование моделей в реальном масштабе времени

Для тестирования моделей был создан интерфейс, который включает следующие функции:
  • Регистрация пользователя.
  • Идентификация пользователя.
  • Просмотр пользователей в базе данных.
  • Удаление пользователя по его id.
  • Удаление всех пользователей из базы данных.
  • Установка времени для определения живости лица.
  • Выключение метода определения живости лица.
  • Выход.

Тестирование проводилось на следующем наборе кейсов:
  1. Влияние освещения.
  2. Поворот и наклон головы.
  3. Наличие маски.
  4. Наличие очков.
  5. Повязка на глазу.
  6. Повязка на носу.
  7. Макияж.
  8. Эмоции.
Ниже приведены примеры кейса «Влияние освещения»
Дневной свет
Ночь, свет от ноутбука
Ночь, искусственное освещение
Также измерялось время регистрации пользователя и время распознавания.

Face_recognition

  1. Влияние освещения: работает при любом освещении, если исключить прямую засветку камеры. Распознает в полной темноте – только при свете от монитора ноутбука.
  2. Поворот и наклон головы: распознает при наклонах головы на 45 градусов, при повороте лица тоже на 45 градусов.
  3. Наличие маски: распознает с маской.
  4. Наличие очков: распознает с очками.
  5. Повязка на глазе: распознает при закрытии повязкой одного глаза.
  6. Повязка на носе: не распознает при закрытии носа.
  7. Макияж: распознает с/без.
  8. Эмоции: распознает при любых эмоциях.
  • Время распознавания – 0.4 с.
  • Время регистрации - 7 с.
Стабильное распознавание пользователей происходит уже при регистрации по 1 кадру.

DeepFace

  1. Влияние освещения: сильная зависимость от освещения.
  2. Поворот и наклон головы: распознает при наклонах головы на 3 градуса, при повороте лица на 3 градуса.
  3. Наличие маски: не распознает с маской.
  4. Наличие очков: распознает с очками.
  5. Повязка на глазе: не распознает при закрытии повязкой одного глаза.
  6. Повязка на носе: не распознает при закрытии носа.
  7. Макияж: распознает с/без.
  8. Эмоции: распознает при любых эмоциях не стабильно.
В Таблице 3 приведены время регистрации и время распознавания пользователей для каждой модели.

Таблица 3. Характеристики работы моделей

Особенности: нестабильность распознавания и его заметное торможение. Самый стабильный результат показала модель VGG-face.

Каскады Хаара + LBPH Recognizer

  1. Влияние освещения: работает хорошо только при любом освещении.
  2. Поворот и наклон головы: распознает при наклонах головы на 5 градусов, при повороте лица на 5 градусов.
  3. Наличие маски: распознает с маской, но не стабильно.
  4. Наличие очков: распознает с очками.
  5. Повязка на глазе: распознает при закрытии повязкой одного глаза.
  6. Повязка на носе: не распознает при закрытии носа.
  7. Макияж: распознает с/без.
  8. Эмоции: распознает при любых эмоциях.
  • Время распознания – 0.001 с.
  • Время регистрации - 2 с.
При регистрации пользователя по 1 кадру дальнейшее распознавание не проходило.

Face Detection YuNet и SFace

  1. Влияние освещения: освещение сильно влияет на распознавание. Если регистрировать в темноте, то может распознавать в темноте. Если регистрировать при свете, то в темноте уже не идет распознавание и наоборот.
  2. Поворот и наклон головы: распознает при наклонах головы на 5 градусов, при повороте лица на 5 градусов.
  3. Наличие маски: распознает с маской, но не стабильно.
  4. Наличие очков: распознает с очками.
  5. Повязка на глазе: распознает при закрытии повязкой одного глаза.
  6. Повязка на носе: не распознает при закрытии носа.
  7. Макияж: распознает с/без.
  8. Эмоции: распознает при любых эмоциях.
  • Время распознавания – 0.03 с.
  • Время регистрации - 4 с.
Особенности: нестабильность распознавания, как при 1, так и при 10 кадрах регистрации.

MTCNN+InceptionResnetV1

  1. Влияние освещения: освещение сильно влияет на распознавание. Если регистрировать в темноте, то может распознавать в темноте. Если регистрировать при свете, то в темноте распознавание уже не идет и наоборот.
  2. Поворот и наклон головы: распознает при наклонах головы на 5 градусов, при повороте лица на 5 градусов.
  3. Наличие маски: распознает с маской.
  4. Наличие очков: распознает с очками.
  5. Повязка на глазе: распознает при закрытии повязкой одного глаза.
  6. Повязка на носе: не распознает при закрытии носа.
  7. Макияж: распознает с/без.
  8. Эмоции: распознает при любых эмоциях.
  • Время распознавания – 0.18 с
  • Время регистрации – 3.6 с
Особенности: нестабильность распознавания, как при 1, так и при 10 кадрах регистрации.

Insightface

  1. Влияние освещения: освещение сильно влияет на распознавание.
  2. Поворот и наклон головы: распознает при наклонах головы на 5 градусов, при повороте лица на 5 градусов.
  3. Наличие маски: распознает с маской.
  4. Наличие очков: распознает с очками.
  5. Повязка на глазе: распознает при закрытии повязкой одного глаза.
  6. Повязка на носе: не распознает при закрытии носа.
  7. Макияж: распознает с/без.
  8. Эмоции: распознает при любых эмоциях.
  • Время распознавания – 0.9 с
  • Время регистрации – 5.5 с
Особенности: нестабильность распознавания, как при 1, так и при 10 кадрах регистрации.

3.3. Тестирование моделей на подготовленном наборе данных

В Таблице 4 приведены модели и их точности, определенные на тестовом наборе данных, предоставленном заказчиком.

Таблица 4. Точность моделей

Метод сравнения с пороговым значением минимальных экстремумов эмбеддингов, который используется при использовании моделей, таких как SFace, InceptionResnetV1 и Insightface, демонстрирует недостаточную эффективность при работе с большими объемами данных. Основная причина этого заключается в том, что такой подход, основанный на простом сравнении эмбеддингов, может приводить к ложным срабатываниям и ошибкам распознавания.

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

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

4. Итоги

Анализ результатов показал, что по качеству распознавания наиболее удовлетворяют модели Face_recognition и Каскады Хаара + LBPH Recognizer, у последней время распознавания и регистрации намного меньше, однако она затрудняет перенос пользователя с одной базы данных другую, требуя переобучения всей модели на новых данных.
Made on
Tilda