← Назад в Блог
ИсследованиеРаспознавание лицArcFace

Эволюция распознавания лиц с нейронными сетями: от 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-сценарии:

ModelBackboneLFWCFP-FPAgeDB-30
buffalo_sMobileFaceNet99.33%95.51%95.13%
buffalo_lResNet-5099.83%99.50%98.23%
antelopev2ResNet-10099.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 в исследованиях и бизнесе.