顔検出の進化: Handcrafted Features から Deep Learning Frameworks へ
はじめに
顔検出は、画像内の人の顔を見つけ、その位置を特定するコンピュータビジョンの基本タスクです。認識、認証、属性推定、face swapping など、ほぼすべての顔解析アプリケーションの前提となります。問いはシンプルで、「この画像のどこに顔があるか」を正確に答えることです。
Viola-Jones 時代 (2001–2012)
画期的な成果
2001 年に発表された Viola-Jones detector は、10 年以上にわたり顔検出を代表する手法でした。主な革新は次の通りです。
- Haar-like Features: 目元と頬のコントラストのような単純な顔構造を効率的に表す矩形特徴
- Integral Images: スケールに依存せず高速に特徴量を計算する前処理
- AdaBoost: 多数の weak classifier を組み合わせて strong classifier を構成する学習方式
- Cascade Architecture: 顔でない領域を早い段階で除外し、リアルタイム性を実現する多段構造
限界
Viola-Jones detector は、非正面顔、極端な照明変化、部分的な遮蔽への対応が弱く、主として frontal face detection に最適化されていました。現実世界の多様な条件には十分に対応できませんでした。
移行期: DPM とハイブリッド手法 (2010–2015)
Deformable Part Models
より複雑な要件に対応するため、顔を目・鼻・口などのパーツ集合として扱う DPM が登場しました。姿勢変化への耐性は向上しましたが、計算コストは大きくなりました。
Deep Learning 革命 (2014–現在)
CNN が景色を一変
Convolutional Neural Networks の普及により、顔検出は大きく前進しました。深層モデルは、手設計の特徴量に頼らず、データから階層的な表現を直接学習できます。これを可能にした要素は次の通りです。
- 大規模学習データセット (WIDER FACE)
- 高性能 GPU ハードウェア
- ネットワーク設計の進歩
主要 Framework
MTCNN (2016)
Multi-task Cascaded Convolutional Networks は、Proposal Network (P-Net)、Refine Network (R-Net)、Output Network (O-Net) の 3 段構成を導入し、顔検出とアライメントを同時に実現しました。
RetinaFace (CVPR 2020)
InsightFace の RetinaFace は、実環境における高密度な顔位置推定を実現しました。主な特長は次の通りです。
- Single-stage の anchor-based detection
- 顔検出と 5 点ランドマーク推定の同時学習
- self-supervised mesh decoder を含む multi-task learning
- WIDER FACE ベンチマークでの最先端精度
SCRFD (ICLR 2022)
Sample and Computation Redistribution for Efficient Face Detection は、効率面で新たな基準を打ち立てました。
- NAS ベースの architecture search による最適な計算配分
- 学習効率を高める sample redistribution 戦略
- 従来手法より優れた accuracy-speed trade-off
- 500M FLOPs から 34G FLOPs まで幅広いモデル展開
性能比較
最新の Deep Learning detector は、古典的手法を大きく上回ります。
| Method | WIDER FACE Easy | WIDER FACE Medium | WIDER FACE Hard |
|---|---|---|---|
| Viola-Jones | ~50% | ~40% | ~20% |
| MTCNN | 85.1% | 82.0% | 60.7% |
| RetinaFace | 96.9% | 96.1% | 91.4% |
| SCRFD-34GF | 97.2% | 96.5% | 93.7% |
実装への組み込み
InsightFace を使えば、最先端の顔検出を比較的容易に導入できます。
from insightface.app import FaceAnalysis
app = FaceAnalysis(providers=['CUDAExecutionProvider'])
app.prepare(ctx_id=0, det_size=(640, 640))
faces = app.get(img)
for face in faces:
print(f"Bounding box: {face.bbox}")
print(f"Detection score: {face.det_score:.4f}")
print(f"Landmarks: {face.kps}")
まとめ
Handcrafted Features から Deep Learning Frameworks への移行は、コンピュータビジョン史の中でも特に大きな進歩のひとつです。InsightFace の RetinaFace と SCRFD はその最前線にあり、サーバーからエッジまで実用的な導入性を備えた最先端精度を提供します。