Эволюция распознавания лиц с нейронными сетями: от DeepFace к ArcFace и дальше
Введение
Распознавание лиц — это задача идентификации или верификации личности по изображению лица. Это одна из самых активных и значимых областей компьютерного зрения. Переход от handcrafted features к глубоким нейронным сетям радикально улучшил точность, устойчивость и масштабируемость.
До эпохи Deep Learning
Eigenfaces и Fisherfaces (1990-е)
Ранние методы представляли изображение лица как высокоразмерный вектор и применяли методы снижения размерности. Eigenfaces (PCA) и Fisherfaces (LDA) были важными вехами, но плохо переносили изменения освещения, позы и выражения.
Локальные дескрипторы признаков (2000-е)
Подходы вроде LBPH и Gabor Features улучшили устойчивость за счёт кодирования локальной текстуры. Тем не менее их представительная сила была ограничена для реальных unconstrained-сценариев.
Революция Deep Learning
DeepFace (2014)
DeepFace от Facebook стал поворотной точкой, достигнув 97.35% на LFW. Ключевые инновации:
- 3D face alignment на этапе предобработки
- обучение на 4 миллионах изображений
- глубокая CNN-архитектура с softmax classification
- демонстрация того, что обучаемые признаки превосходят handcrafted features
Серия DeepID (2014–2015)
Семейство DeepID от Chinese University of Hong Kong ещё сильнее подняло точность:
- multi-patch-подход с извлечением признаков из разных областей лица
- совместное обучение identification и verification
- 99.47% на LFW у DeepID2+
FaceNet (2015)
Google FaceNet ввёл triplet loss:
- прямое обучение embeddings в евклидовом пространстве
- эффективная стратегия выбора triplets
- 128-мерные embeddings для large-scale retrieval
- 99.63% на LFW
Революция ArcFace
ArcFace: Additive Angular Margin Loss (CVPR 2019)
ArcFace, разработанный командой InsightFace, предложил простую и очень эффективную loss function, ставшую де-факто стандартом для обучения face recognition.
Ключевая инновация
ArcFace добавляет angular margin к углу между feature vector и соответствующим class center на нормализованной hypersphere. Формула loss function:
L = -log(e^(s·cos(θ_yi + m)) / (e^(s·cos(θ_yi + m)) + Σ e^(s·cos(θ_j))))
Здесь m — additive angular margin, а s — scaling factor.
Почему ArcFace работает
- Геометрическая интерпретация: margin имеет ясный смысл на hypersphere
- Стабильное обучение: ArcFace сходится надёжнее, чем многие другие margin-based losses
- Сильная обобщающая способность: метод усиливает внутриклассовую компактность и межклассовое разделение
Влияние и распространение
ArcFace — одна из самых широко применяемых loss functions в face recognition:
- более 8 000 цитирований
- интеграция в InsightFace и множество других frameworks
- основа для многочисленных топовых результатов на NIST FRVT
Масштабирование с Partial FC (CVPR 2022)
Обучение на очень больших объёмах
Когда datasets распознавания лиц выросли до миллионов идентичностей, классификационный слой стал bottleneck. Partial FC решает проблему следующим образом:
- на каждой итерации случайно выбирается только часть class centers
- становится возможным обучение на 10M+ identities на одной машине
- заметно снижаются требования к памяти и вычислениям при сохранении точности
- это критически важно для production-моделей большого масштаба
Работа с шумом: Sub-center ArcFace (ECCV 2020)
Устойчивое обучение на шумных данных
Реальные обучающие данные часто содержат ошибочные метки. Sub-center ArcFace решает проблему так:
- для каждого класса обучается K sub-centers вместо одного центра
- dominant sub-centers представляют чистые примеры
- неосновные sub-centers поглощают шумные образцы
- упрощается автоматическое обнаружение и очистка шума
Современное состояние
InsightFace Recognition Pipeline
InsightFace предлагает полный pipeline для распознавания лиц:
from insightface.app import FaceAnalysis
import numpy as np
app = FaceAnalysis(name='buffalo_l')
app.prepare(ctx_id=0, det_size=(640, 640))
# Extract embeddings
face1 = app.get(img1)[0]
face2 = app.get(img2)[0]
# Compute similarity
sim = np.dot(face1.embedding, face2.embedding)
sim = sim / (np.linalg.norm(face1.embedding) * np.linalg.norm(face2.embedding))
print(f"Similarity: {sim:.4f}")
Model Zoo
Model zoo от InsightFace содержит предобученные модели под различные deployment-сценарии:
| Model | Backbone | LFW | CFP-FP | AgeDB-30 |
|---|---|---|---|---|
| buffalo_s | MobileFaceNet | 99.33% | 95.51% | 95.13% |
| buffalo_l | ResNet-50 | 99.83% | 99.50% | 98.23% |
| antelopev2 | ResNet-100 | 99.80% | 99.47% | 98.10% |
Будущее
Область продолжает развиваться в направлениях:
- Masked face recognition: надёжная работа при частичном перекрытии лица
- Cross-age recognition: стабильная идентификация в разных возрастах
- Privacy-preserving recognition: применение homomorphic encryption и federated learning
- 3D face recognition: использование глубинной информации для дальнейшего роста точности
Заключение
От Eigenfaces до ArcFace распознавание лиц прошло огромный путь. ArcFace, Partial FC и Sub-center ArcFace от InsightFace находятся в центре этой эволюции и обеспечивают мощную основу для современных систем face recognition в исследованиях и бизнесе.