Разработка системы детекции лиц (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%. Процесс дообучения включает:
- Сбор или генерацию синтетических данных с масками
- Аугментацию: повороты, изменение освещения, размытие
- Fine-tuning предобученной модели на смешанном датасете
- Валидацию на отдельном тестовом наборе
Это позволяет добиться стабильной работы в условиях масок, очков и других 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 день. Свяжитесь с нами, чтобы обсудить ваш кейс.







