Розробка систем виявлення обличчя
Виявлення обличчя - це перший етап майже будь-якого face-конвеєра. Завдання: знайти всі обличчя на зображенні та повернути обмежувальні рамки з оцінкою впевненості. Звучить просто, але реальні умови добавляють складність: маленькі обличчя на відстані, профільні кути, часткові перекриття, погане освітлення, маски.
Сучасні детектори облич
SCRFD (Sample and Computation Redistribution for Face Detection, InsightFace) — поточно найкращий за співвідношенням швидкість/якість. SCRFD-10GF: 95.2% AP на WiderFace Hard.
RetinaFace — класика з детекцією орієнтирів (5 точок: очі, ніс, кутики рота). Використовується для вирівнювання перед розпізнаванням облич.
YOLOv8 fine-tuned на WiderFace — універсальний варіант для кастомних вимог.
from insightface.app import FaceAnalysis
import cv2
# InsightFace: виявлення + детекція орієнтирів
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
Виявлення дрібних облич
Стандартні детектори втрачають обличчя менше ніж 16x16 пікселів. Для камер відеоспостереження на великій відстані:
- Image tiling: розділяємо зображення на перекриваючі плитки, виявляємо на кожній, об'єднуємо результати через NMS
- SAHI (Slicing Aided Hyper Inference) — автоматична плитка з об'єднанням:
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 | Затримка CPU | Затримка GPU (T4) |
|---|---|---|---|
| SCRFD-500MF | 90.5% | 8 мс | 1.5 мс |
| SCRFD-10GF | 95.2% | 45 мс | 4 мс |
| RetinaFace-R50 | 94.9% | 90 мс | 7 мс |
| YOLOv8n (WiderFace) | 93.1% | 12 мс | 2 мс |
Виявлення облич у масках
Пандемія сформувала окремий клас завдань — виявлення облич у медичних масках. Набір даних MAFA містить 35,806 розміткованих облич у масках. Дофінальтрування стандартного детектора на MAFA+WiderFace: AP на маскованих обличчях збільшується з 65% до 89%.
| Завдання | Графік |
|---|---|
| Виявлення, стандартні умови, готова модель | 1 тиждень |
| Кастомні умови (маски, камери, освітлення) | 2–3 тижні |
| Виявлення дрібних облич, оптимізація конвеєра | 3–5 тижнів |







