ニューラルネットワークによる顔認識の進化: DeepFace から ArcFace、そしてその先へ
はじめに
顔認識は、顔画像から個人を識別または認証する技術であり、コンピュータビジョンの中でも特に重要で影響力の大きい分野です。Handcrafted Features から深層ニューラルネットワークへの移行により、精度、頑健性、スケーラビリティは飛躍的に向上しました。
Deep Learning 以前
Eigenfaces と Fisherfaces (1990年代)
初期の顔認識手法は、顔画像を高次元ベクトルとして扱い、次元削減を利用して識別を行いました。Eigenfaces (PCA) や Fisherfaces (LDA) は先駆的でしたが、照明、姿勢、表情の変化に弱いという欠点がありました。
Local Feature Descriptors (2000年代)
LBPH や Gabor features のような局所特徴は、ロバスト性を改善しました。しかし、制約の少ない実環境下での顔認識には、表現力が十分ではありませんでした。
Deep Learning 革命
DeepFace (2014)
Facebook の DeepFace は、LFW ベンチマークで 97.35% を達成し、ほぼ人間並みの性能を示した転換点でした。主な特徴は次の通りです。
- 前処理としての 3D face alignment
- 400 万枚規模の学習データ
- softmax classification を用いた deep CNN architecture
- 学習特徴が handcrafted features を大きく上回ることを実証
DeepID シリーズ (2014–2015)
香港中文大学の DeepID 系列は、さらに高い精度を達成しました。
- 顔の複数領域から特徴を抽出する multi-patch approach
- identification と verification の joint learning
- DeepID2+ で LFW 99.47% を達成
FaceNet (2015)
Google の FaceNet は triplet loss を導入しました。
- ユークリッド空間での直接的な embedding learning
- 効率的な triplet selection strategy
- 大規模検索に適した 128 次元 embedding
- LFW 99.63% を達成
ArcFace 革命
ArcFace: Additive Angular Margin Loss (CVPR 2019)
InsightFace チームが開発した ArcFace は、シンプルでありながら極めて効果的な loss function を提示し、顔認識学習の事実上の標準となりました。
主要なイノベーション
ArcFace は、正規化された hypersphere 上で、feature vector と正解 class center の角度に angular margin を加えます。損失関数は次の通りです。
L = -log(e^(s·cos(θ_yi + m)) / (e^(s·cos(θ_yi + m)) + Σ e^(s·cos(θ_j))))
ここで m は additive angular margin、s は scaling factor です。
ArcFace が有効な理由
- 幾何学的な解釈性: angular margin に明確な幾何学的意味がある
- 安定した学習: 他の margin-based loss と比べて収束が安定している
- 高い汎化性能: クラス内の凝集とクラス間の分離を同時に強化できる
影響と普及
ArcFace は現在、最も広く採用されている顔認識 loss function のひとつです。
- 8,000 件超の引用
- InsightFace を含む多数の framework に統合
- NIST FRVT の上位提出の基盤技術として採用
大規模学習への対応: Partial FC (CVPR 2022)
大規模分類層の最適化
顔認識データセットが数百万 ID 規模に達すると、分類層がボトルネックになります。Partial FC はこれを次のように解決します。
- 各イテレーションで class center の一部のみをランダムにサンプリング
- 単一マシンでも 1,000 万 ID 超の学習が可能
- 精度を維持しながらメモリと計算量を大幅削減
- 実運用モデルに不可欠な設計
ノイズへの対応: Sub-center ArcFace (ECCV 2020)
ノイズを含むデータでの堅牢学習
現実の学習データには誤ラベルが含まれることがあります。Sub-center ArcFace は次の方法で対処します。
- 各クラスに単一中心ではなく K 個の sub-center を学習
- dominant sub-center がクリーンサンプルを表現
- 非支配的な sub-center がノイズサンプルを吸収
- 自動的なノイズ検出とクリーニングを支援
現在の最先端
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
InsightFace の model zoo は、さまざまな導入要件に合わせた事前学習モデルを提供しています。
| 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 に至るまで、顔認識は劇的な進化を遂げました。InsightFace の ArcFace、Partial FC、Sub-center ArcFace は、この進化の中心にあり、研究者と企業の双方に最先端の顔認識基盤を提供しています。