顔埋め込み技術の完全解説 — 512次元ベクトルの背後にある数学
18XXXJapanでポルノ検索用に写真をアップロードすると、あなたの顔はミリ秒単位で512個の浮動小数点数のベクトルに変換されます。この記事ではこのプロセスの背後にある数学とエンジニアリングを深く掘り下げます。
ピクセルからベクトルへ
元の画像はまずRetinaFace検出器で処理されます。検出器は画像内のすべての顔を特定し、各顔について5つの重要なランドマークポイント(左目、右目、鼻先、左口角、右口角)を出力します。
アフィン変換
これら5つのランドマークを使用して、アフィン変換行列を計算し、顔を標準的な112×112ピクセルのキャンバスにクロップして位置合わせします。これにより、すべての顔が同じポーズとスケールに統一されます。
ArcFace損失関数
ResNet-100バックボーンネットワークはArcFace(Additive Angular Margin Loss)で訓練されています。従来のsoftmax損失とは異なり、ArcFaceは角度空間にマージンペナルティを追加し、同一アイデンティティの埋め込みをより密にすることを強制します。
コサイン類似度の直感的理解
- 二つのベクトルのコサイン類似度は高次元空間における方向の一致度を測定
- 値が1.0は完全に同じ方向(100%マッチ)
- 値が0.0は直交――完全に無関係
- 私たちは0.45(45%)を「目に見える類似性」の閾値として使用
FAISSインデックス構造
Facebook AI Similarity Search(FAISS)ライブラリにより、数百万のベクトルの中からサブミリ秒検索が可能です。私たちはIVF-PQ(倒排ファイル量子化)インデックスを使用し、検索空間をボロノイセルに分割して、各クエリで最も近いセルのみをスキャンします。