← Volver al Blog
InvestigaciónReconocimiento facialArcFace

La evolución del reconocimiento facial con redes neuronales: de DeepFace a ArcFace y más allá

Introducción

El reconocimiento facial —identificar o verificar la identidad de una persona a partir de su rostro— es una de las áreas más activas e influyentes de la visión por computador. El paso de las características manuales a las redes neuronales profundas ha mejorado drásticamente la precisión, la robustez y la escalabilidad.

Antes del Deep Learning

Eigenfaces y Fisherfaces (años 90)

Los primeros métodos trataban las imágenes faciales como vectores de alta dimensión y usaban técnicas de reducción de dimensionalidad. Eigenfaces (PCA) y Fisherfaces (LDA) fueron enfoques pioneros, pero eran sensibles a iluminación, pose y expresión.

Descriptores locales (años 2000)

Métodos como LBPH y Gabor Features mejoraron la robustez al codificar textura local. Sin embargo, su capacidad de representación era limitada para escenarios faciales no controlados.

La revolución del Deep Learning

DeepFace (2014)

DeepFace, de Facebook, fue un punto de inflexión al alcanzar 97.35% en LFW. Sus principales innovaciones fueron:

  • alineación facial 3D como preprocesamiento
  • entrenamiento con 4 millones de imágenes
  • arquitectura CNN profunda con clasificación softmax
  • demostración de que las características aprendidas superan a las handcrafted features

Serie DeepID (2014–2015)

La familia DeepID de la Chinese University of Hong Kong elevó aún más la precisión:

  • enfoque multi-patch con extracción de regiones faciales distintas
  • aprendizaje conjunto de identificación y verificación
  • 99.47% en LFW con DeepID2+

FaceNet (2015)

FaceNet, de Google, introdujo triplet loss:

  • aprendizaje directo de embeddings en espacio euclidiano
  • estrategia eficiente de selección de triplets
  • embeddings de 128 dimensiones aptos para búsqueda a gran escala
  • 99.63% en LFW

La revolución ArcFace

ArcFace: Additive Angular Margin Loss (CVPR 2019)

ArcFace, desarrollado por el equipo de InsightFace, introdujo una loss function simple y extremadamente efectiva que se ha convertido en un estándar de facto para entrenamiento de reconocimiento facial.

Innovación principal

ArcFace añade un angular margin al ángulo entre el feature vector y su class center correspondiente en la hypersphere normalizada. La loss function es:

L = -log(e^(s·cos(θ_yi + m)) / (e^(s·cos(θ_yi + m)) + Σ e^(s·cos(θ_j))))

Aquí, m es el additive angular margin y s el scaling factor.

Por qué ArcFace funciona

  • Interpretación geométrica: el margen tiene un significado claro sobre la hypersphere
  • Entrenamiento estable: converge mejor que otras pérdidas basadas en margen
  • Fuerte generalización: favorece clusters compactos intra-clase y mejor separación inter-clase

Impacto y adopción

ArcFace es hoy una de las loss functions más adoptadas en reconocimiento facial:

  • más de 8.000 citas
  • integrado en InsightFace y muchos otros frameworks
  • base de numerosas propuestas líderes en NIST FRVT

Escalado con Partial FC (CVPR 2022)

Entrenamiento a gran escala

A medida que los datasets de reconocimiento facial crecieron a millones de identidades, la capa de clasificación se convirtió en un cuello de botella. Partial FC lo aborda así:

  • muestrea aleatoriamente solo una parte de los class centers en cada iteración
  • permite entrenar con 10M+ identidades en una sola máquina
  • mantiene la precisión mientras reduce memoria y cómputo
  • resulta esencial para modelos productivos a gran escala

Manejo de ruido: Sub-center ArcFace (ECCV 2020)

Entrenamiento robusto con datos ruidosos

Los datos reales suelen contener muestras mal etiquetadas. Sub-center ArcFace responde con:

  • K sub-centers por clase en lugar de un único centro
  • los dominant sub-centers capturan muestras limpias
  • los sub-centers no dominantes absorben ruido
  • soporte para detección y limpieza automática de ruido

Estado actual del arte

InsightFace Recognition Pipeline

InsightFace ofrece un pipeline completo de reconocimiento facial:

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

El model zoo de InsightFace ofrece modelos preentrenados para distintos escenarios de despliegue:

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%

Futuro

El campo sigue evolucionando en torno a:

  • Masked face recognition: identificación robusta con oclusión parcial
  • Cross-age recognition: reconocimiento fiable entre distintas edades
  • Privacy-preserving recognition: uso de cifrado homomórfico y federated learning
  • 3D face recognition: aprovechamiento de información de profundidad para mejorar precisión

Conclusión

Desde Eigenfaces hasta ArcFace, el reconocimiento facial ha cambiado de forma radical. ArcFace, Partial FC y Sub-center ArcFace de InsightFace se encuentran en el centro de esa evolución y proporcionan bases sólidas para sistemas modernos de reconocimiento facial en investigación y empresa.