Разработка системы детекции лиц (Face Detection)

Разработка системы детекции лиц (Face Detection)

Направления AI-разработки

Часто задаваемые вопросы

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1460
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1314
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1012
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1275
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    727
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    1018

Разработка системы детекции лиц (Face Detection)

Детекция лиц — первый и критичный этап любого face-пайплайна. Задача найти все лица на изображении и вернуть bounding boxes с confidence score. На первый взгляд кажется простой, но реальные условия — маленькие лица на расстоянии, профильные ракурсы, частичные перекрытия, плохое освещение, маски — превращают её в нетривиальную инженерную задачу. В production-системах отказ детекции даже одного лица может привести к критическому снижению качества всего пайплайна. Например, в видеонаблюдении на стадионе лица размером 20×20 пикселей — стандарт. Без специализированной оптимизации такие объекты теряются в 40% кадров. Мы разрабатываем детекторы, которые работают в production с латентностью до 4 мс на GPU, сохраняя высокую точность даже на сложных сценах.

Почему стандартные детекторы часто ошибаются?

Большинство open-source детекторов обучаются на датасетах вроде WiderFace, где лица хорошо освещены и крупные. В реальности камеры видеонаблюдения, уличные условия, маски и очки снижают точность до 60–70%. Мы решаем это дообучением на целевых данных с аугментацией, имитирующей реальные условия — повороты, тени, размытие. Например, добавление синтетических масок при дообучении повышает AP с 65% до 89% на датасете MAFA.

Как мы решаем проблему детекции лиц?

Используем три основных подхода в зависимости от требований.

SCRFD (Sample and Computation Redistribution for Face Detection) — текущий лучший по соотношению скорость/качество. SCRFD-10GF достигает 95.2% AP на WiderFace Hard, что в 2 раза быстрее RetinaFace-R50 при сопоставимой точности. Подробнее о модели можно узнать в репозитории InsightFace.

RetinaFace — классика с landmark detection (5 точек: глаза, нос, уголки рта). Используется для alignment перед face recognition.

YOLOv8 fine-tuned на WiderFace — универсальный вариант при наличии кастомных требований.

from insightface.app import FaceAnalysis import cv2 # InsightFace: детекция + landmark detection app = FaceAnalysis(allowed_modules=['detection']) app.prepare(ctx_id=0, det_size=(640, 640)) def detect_faces(image_path: str) -> list[dict]: img = cv2.imread(image_path) faces = app.get(img) results = [] for face in faces: results.append({ 'bbox': face.bbox.astype(int).tolist(), # [x1, y1, x2, y2] 'confidence': float(face.det_score), 'landmarks': face.kps.astype(int).tolist() # 5 keypoints }) return results 

Детекция мелких лиц

Стандартные детекторы теряют лица меньше 16×16 пикселей. Для камер видеонаблюдения с большим расстоянием до объекта:

  • Image tiling: разбиваем изображение на перекрывающиеся тайлы, детектируем на каждом, мержим результаты через NMS
  • SAHI (Slicing Aided Hyper Inference) — автоматический tiling с merge. Библиотека доступна на GitHub.
from sahi import AutoDetectionModel from sahi.predict import get_sliced_prediction model = AutoDetectionModel.from_pretrained( model_type='yolov8', model_path='face_detector.pt', confidence_threshold=0.3 ) result = get_sliced_prediction( image='crowd.jpg', detection_model=model, slice_height=512, slice_width=512, overlap_height_ratio=0.2, overlap_width_ratio=0.2 ) 

Производительность на различном железе

Детектор WiderFace Hard AP Latency CPU Latency GPU (T4)
SCRFD-500MF 90.5% 8 ms 1.5 ms
SCRFD-10GF 95.2% 45 ms 4 ms
RetinaFace-R50 94.9% 90 ms 7 ms
YOLOv8n (WiderFace) 93.1% 12 ms 2 ms
Как выбрать детектор для вашего проекта?

Если латентность критична (например, real-time видео), лучший выбор — SCRFD-500MF на GPU. Если важна максимальная точность — SCRFD-10GF. Для встраиваемых систем без GPU подойдёт YOLOv8n, оптимизированный через ONNX Runtime с INT8 квантованием.

Как дообучить модель для детекции лиц в масках?

Пандемия сформировала отдельный класс задач — детекция лиц в медицинских масках. Датасет MAFA содержит 35,806 размеченных лиц в масках. Дообучение стандартного детектора на MAFA+WiderFace: AP на masked faces повышается с 65% до 89%. Процесс дообучения включает:

  1. Сбор или генерацию синтетических данных с масками
  2. Аугментацию: повороты, изменение освещения, размытие
  3. Fine-tuning предобученной модели на смешанном датасете
  4. Валидацию на отдельном тестовом наборе

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

Что входит в работу над системой детекции

Мы предоставляем решение под ключ, включающее:

  • Анализ ваших условий и подготовка синтетических/реальных данных
  • Выбор и дообучение детектора (SCRFD/RetinaFace/YOLOv8)
  • Оптимизация latency и memory footprint (INT8 quantization, ONNX Runtime)
  • Интеграция в ваш пайплайн (REST API, gRPC, RTSP)
  • Документация и обучение вашей команды
  • Поддержка на этапе эксплуатации

За 5 лет опыта в computer vision мы реализовали более 30 проектов по детекции и распознаванию лиц. Обрабатываем до 100 кадров/с на одном GPU. Результат гарантируем — если точность не достигает целевых показателей, дорабатываем бесплатно.

Сроки разработки

Задача Срок
Детекция, стандартные условия, готовая модель 1 неделя
Кастомные условия (маски, камеры, освещение) 2–3 недели
Детекция мелких лиц, оптимизация pipeline 3–5 недель

Закажите демо-версию детектора для ваших данных и получите предварительную оценку за 1 день. Свяжитесь с нами, чтобы обсудить ваш кейс.