2025年9月14日日曜日

軽量の顔認識を用意してみる

gradface.netではGPUを使っているが、CPUだけで動作するものを用意したい。 


2025年9月時点でのメモ。


推奨構成(CPU向け)

1. 検出(Face Detection)

  • SCRFD-500M / 2.5G

    • InsightFace に同梱。ONNX Runtime で CPU 推論しても数 ms〜数十 ms 程度(解像度にもよる)。

    • 検出精度と速度のバランスが良い。

  • 代替案:YOLO-Face(YOLOv5ベース)。ただしやや重め。

2. 埋め込み(Feature Embedding)

  • ArcFace r50 / r100 (glint360k 事前学習)

    • 112×112入力、CPUでも数十ms程度で動く。

    • 精度は IJB-C TAR@FAR=1e-4 で 97-98% 程度。

  • 軽量重視なら MobileFaceNetPartialFCで学習された軽量モデル も選択肢。

3. 全体パイプライン

  • ONNX Runtime (Rust or Python)

    • CPUでもマルチスレッド利用可能 (intra_op_num_threads 設定推奨)。

  • 前処理:BGR→RGB、112×112にリサイズ、mean/std正規化。

  • 後処理:出力ベクトルをL2正規化、コサイン類似で判定。


「そこそこの精度」での目安

モデル精度 (IJB-C)CPU速度 (i7-12700程度)備考
ArcFace-R50高 (97%+)40〜50ms/顔バランス型
ArcFace-R100さらに高70〜90ms/顔高精度重視
MobileFaceNet中〜高 (95%前後)10〜15ms/顔軽量・高速
FaceLiVT-tiny20〜30ms/顔Transformer混合だが軽い









LVFace はかなり大きいモデルです。


LVFace の特徴

  • Vision Transformer ベースの顔認証モデル
    → パラメータ数は ResNet 系の ArcFace よりもずっと多い(100M~数百M パラメータ級)。

  • 学習データ:WebFace42M など巨大データセット

  • 精度重視:IJB-C, IJB-B, CFP-FP など主要ベンチマークで SOTA 近い性能

  • トレーニング手法:Progressive Cluster Optimization (PCO) を導入して ViT の収束と識別能力を最適化

  • 用途:サーバーや GPU 前提のバッチ推論、クラウド向け認証システム


モデルサイズとリソース

  • モデルサイズ:数百 MB 級(ViT-Large クラスだと 400〜500MB 近くになることも)

  • 入力解像度:224×224 以上(ArcFaceの112×112より重い)

  • 計算コスト:CPU 単体でリアルタイムはほぼ不可能(数秒かかる場合も)

  • GPU前提:A100 や RTX 4090 などのGPUでバッチ推論すると真価を発揮


まとめると

  • はい、かなりデカいです。

  • 「そこそこの精度+CPUでリアルタイム」用途なら、LVFace は明らかにオーバースペック。

  • ArcFace r50/r100MobileFaceNet, FaceLiVT-tiny の方が圧倒的に扱いやすいです。










**Transformer混合モデル(CNN + Transformer ハイブリッド)**が注目されているのは、
「CNNの速さ+Transformerの表現力」を同時に狙えるからです。


Transformer混合モデルのメリット

1. グローバルな情報を取り込める

  • CNNは局所的な特徴抽出が得意ですが、広い範囲の関係を一度に見るのは苦手。

  • TransformerのSelf-Attentionを混ぜると、
    遠いピクセル同士の関係顔全体の整合性を捉えやすくなります。

  • 結果、ポーズ変化・表情変化・部分隠れ(マスク等)に強くなる傾向があります。

2. 少ない層で高表現力

  • CNNだけで同じ表現力を得ようとすると層を深くする必要があり、
    パラメータ数と計算量が急増。

  • Transformerブロックを数層入れるだけで情報集約が効率的になるため、
    CNNより浅いモデルでも精度が出やすい。

3. モデルサイズと速度のトレードオフが良好

  • 純Transformer(ViT-Large等)は巨大&重い。

  • CNNベースにTransformerブロックを挿入するハイブリッドなら
    モデルサイズを抑えつつ精度を底上げできる。

  • FaceLiVT-tiny のような軽量モデルは、MobileFaceNet並みの速度でArcFace-R100に近い精度を達成。

4. 最新研究のベースラインになりやすい

  • 2024〜2025年の顔認証ベンチマーク(IJB-C、MegaFaceなど)で
    CNN単体より 0.2〜0.5% 程度上の精度を達成する報告が増えている。

  • 将来の学習済みモデル配布も、CNN+Transformer系が主流になりつつある。


デメリット(注意点)

  • 計算グラフが複雑になりがち → 実装が少し難しい

  • CNN-only よりわずかに推論が重くなる(ただし ViT 単体よりは軽い)

  • 学習には大規模データとGPUがほぼ必須(転移学習なら回避可能)


まとめ

Transformer混合のメリット = 「グローバル情報を取り入れて精度底上げしつつ、速度とサイズはCNN寄り」

  • CPUでもギリギリ実用 → FaceLiVT-tiny, MobileViT 系

  • 精度重視+GPUあり → LVFace や ViT-Large 系


「ArcFace-R100に近い推論速度で、ちょっと精度を上げたい」なら
FaceLiVT-tiny や MobileViT + ArcFace Loss がベストバランスです。





ArcFace-R100 vs FaceLiVT-tiny 比較表

項目ArcFace-R100FaceLiVT-tiny
登場時期2018–2020頃(ArcFace 論文+ResNet-100バックボーン)2025年(CNN+Transformer ハイブリッド、軽量設計)
バックボーンResNet-100 (CNNのみ)軽量CNN + MHLA(Multi-Head Linear Attention)ブロック
モデルサイズ約 250MB (fp32)約 80〜100MB (fp32)
入力サイズ112×112112×112(同等)
推論速度 (CPU, 1スレッド)~70〜90ms/顔~30〜40ms/顔(約1.8〜2倍高速)
推論速度 (GPU, FP16)~2〜4ms/顔~1〜2ms/顔
精度 (IJB-C TAR@FAR=1e-4)97〜98%97.5〜98.3%(約+0.3〜0.5%改善)
長所安定実績、豊富な実装、閾値調整情報が多い高速&軽量、ポーズ変化やマスク耐性が強化、同等かやや高精度
短所モデルサイズ大きめ、やや遅い実装・学習コードはまだ新しい、事例が少なめ

まとめ

  • 速度重視 & 新しい技術試したいFaceLiVT-tiny

    • CPUでも2倍近く速い

    • 精度も少し良い(特にマスク顔・難例で差が出る)

    • モデルサイズ小さめでメモリ負荷も少ない

  • 枯れた安定感・実績重視ArcFace-R100

    • 大量の既存実装・事例・閾値設定ノウハウあり

    • v2/v3問わずどの環境でも動作実績豊富


もし SurrealDB v3 と組み合わせるなら、どちらでも 512次元埋め込みを保存してANN検索できます。
FaceLiVT-tiny のほうがモデル読み込みが軽いので、サーバー起動が速い・メモリも少なくて済みます。


0 件のコメント:

コメントを投稿

あいうえお