Розробка системи детекції облич (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 день. Зв'яжіться з нами, щоб обговорити ваш кейс.







