同じ顔なのにスコアが違う:顔スキャンツールの差
同じ写真を2つのアプリに入れると20点差も珍しくない。原因はランドマークの数、正規化の分母、学習データ、そしてカメラ側の加工にある。
先に結論から
同じ写真を2つの顔スキャンアプリに入れて、20点差が出るのはよくあることです。どちらも壊れてはいません。スコアはあなたの顔の属性ではなく、パイプラインの出力です。そしてパイプラインの各段階には、必ず選択が含まれています。選択が変われば数字も変わります。
差の大半を決めているのは3つ。顔のどの点を測るか、その測定値を何で割るか、そして出てきた比率をアプリ独自の目盛りのどこに置くかです。さらに4つ目があり、これはアプリが画面を受け取る前に起きています。
1. 測っている点がそもそも違う
顔のパイプラインはランドマークの方式に乗っていて、方式どうしは互換ではありません。
- 68点——dlib や初期の OpenCV で使われた古典的な配置。顎の輪郭、眉、鼻梁と鼻底、目の輪郭、上下の唇の線。
- 98点——WFLW のアノテーション方式。考え方は同じだが、目元と口元がより密。
- 468点——MediaPipe Face Mesh。頬や額まで含む、顔全体を覆う密なメッシュ。
- 478点——同じメッシュに虹彩の10点(片目5点ずつ)を加えたもの。
これが効いてくる場所を一つ挙げます。鼻の幅です。68点なら鼻孔の2点と、その間の1本の距離しかありません。468点のメッシュなら鼻の周りに候補のペアがいくつもあり、式がどのペアを選ぶかで数パーセント変わります。顎の幅も同じで、密なメッシュの最も外側の頬の点は、68点方式の顎の角とは解剖学的に別の場所です。2つのアプリがどちらも正直に「顎幅」と書いていながら、顔の違う区間を測っている、ということが起きます。
点が多いほど正確、とは限りません。メッシュが密なら式の選択肢が増え、隣のツールと食い違う余地も増えます。
2. 比率には分母が必要で、その分母が違う
ピクセル単位の距離には意味がありません。解像度、カメラからの距離、トリミングで変わるからです。だからどのツールも、生の距離を何かで割って比率にします。よく使われる分母はこの4つです。
| 分母 | 挙動 |
|---|---|
| 瞳孔間距離 | トリミングに強いが、目頭・目尻の検出に敏感 |
| バウンディングボックス幅 | 髪、耳、背景のマスクに左右される |
| 頬骨幅 | 「顔幅」に最も近いが、点自体が曖昧で揺れる |
| 眉から顎までの高さ | 表情と顎の向きで変わる |
2つのアプリがまったく同じ鼻の幅を測っていても、片方が頬骨幅で割り、もう片方がバウンディングボックスで割れば、報告される「鼻幅比」は違ってきます。バウンディングボックスに髪が入れば分母が大きくなり、すべての比率が一様に小さくなります。顔に何の変化もないのにスコア全体が下がるのは、こういう仕組みです。
見分け方は簡単です。髪型を変えると数字が動き、表情を変えても動かないツールは、たぶんバウンディングボックスを分母にしています。
3. 学習データは中立ではない
ランドマークのモデルはアノテーション付きの写真から学びます。どんな写真で学んだかが、どんな顔で正確になるかを決めます。Google が公開している Face Mesh の説明では、学習セットはおよそ3万枚とされています。正確な構成はともかく、あらゆる集団を均等に代表するデータセットは存在しません。この分野で知られている弱点も一貫しています。極端な頭の向き、暗い照明、眼鏡・髭・髪による遮蔽、そしてアノテーションに少ない肌の色です。
実害としては、目に見えない誤差になります。顎の角が2〜3ピクセルずれてもプレビューでは分かりませんが、比率にすれば確かな変化です。その比率は後で0〜100に写像され、しかも傾きが急です。入力の小さな誤差が、出力の大きな差になります。
同じアプリ、同じ人で、照明を変えるだけでスコアが動くのも同じ理由です。機嫌ではなく、検出器の確信度が動いているのです。
4. モデルが動く前に、映像は一度加工されている
多くのスマートフォンのカメラは、アプリがフレームを受け取る前に処理を済ませています。肌の平滑化、トーンマッピング、機種によっては顔の輪郭の補正まで。結果は2つです。
第一に、平滑化はランドマークが輪郭を探すためのテクスチャの勾配を消します。唇の線、二重まぶたの溝、小鼻の脇。ランドマークがずれ始めます。
第二に、輪郭の補正は幾何そのものを変えます。モデルは補正後の顔を測り、しかも正確に測ります。仕事は間違っていません。入力があなたではなくなっているだけです。
生のカメラバッファを読むアプリと、処理済みのプレビューを読むアプリは、アルゴリズムが同一でも結果が食い違います。
5. 最後の一段は測定ではなく設計
ランドマークも分母も同じでも、数字はまだ違います。比率をスコアに変える工程が設計判断だからです。よくある形は、比率 r を最小値と最大値の間に収め、0〜100へ線形に写像する。端点を動かせば、すべてのスコアが動きます。
A ツールの70点は「範囲の中ほど、平均より少し上」かもしれません。B ツールの70点は、自社サンプルの上位10%かもしれません。端点は外部の基準に合わせておらず、開発者の手元の数百枚で分布がそれらしく見えるように選ばれています。
だから絶対値はアプリ間で比較できません。順位ならまだ少しは比較できますが、それも似た顔どうしの範囲内での話です。
自宅でできる比較の手順
コツは、自分という変数を消すことです。印刷した写真は物理的な定数です。幾何も照明も、毎回同じになります。
- 正面の鮮明な肖像を1枚、マット紙に高さ15センチほどで印刷する。
- 壁に目の高さで貼る。ランプ1灯を正面から当て、カーテンを閉める。
- 各ツールでその印刷物をスキャンする。10分あけて2回、両方の数字を記録する。
- 同じことを生の自撮りでも行う。距離60センチ、レンズは目の高さ、フィルターはオフ。
- 表にする。ツール、印刷物のスコア、自撮りのスコア、その差。
表の読み方。
- 印刷物は安定、自撮りは暴れる——そのツールは入力に敏感で、顔に敏感なわけではない。分散は照明と姿勢から来ている。
- 同じツールで印刷物と自撮りが大きく違う——前処理が重い。印刷物には平滑化する肌のテクスチャがないので、2つの入力は等価ではない。
- 5枚の印刷顔で2つのツールの順位が一致する——違う目盛りで似たものを測っている。
- 順位が入れ替わる——測っているものが別で、ラベルが辻褄を合わせている。
5枚の顔で順位を比べるのが、目盛りの違いを越えられる唯一の比較方法です。絶対値は通用しませんが、順位はときどき通用します。
ばらつきが自分の側から来ているなら、まず入力を固定しましょう。自撮り角度ガイド では距離・レンズの高さ・光を扱っています。顔型アナライザー は、同じ写真を2回続けて通して、同じパイプラインが自分と矛盾しないかを見るのに向いています。
で、出たスコアをどう読むか
以上の話はテストを面白くなくするものではなく、読めるようにするものです。2つのアプリがあなたの顔について意見を違えたとき、その不一致はアプリについての事実——ランドマーク、分母、学習セット、目盛り——であって、あなたについての事実ではありません。スクリーンショットを真に受ける前に、知っておく価値はあります。
よくある質問
同じ写真なのに、なぜアプリによって点数が違うのですか?
ランドマーク方式が違い、同じ比率に別の分母を使い、学習データが違い、最終的な目盛りの端点も違う。どれか一つでも10点は動きます。
点数の高いほうが正確なのですか?
いいえ。合わせるべき「正解」が存在しません。高い点数はたいてい、目盛りの基準が低いか、式がたまたまあなたの特徴を評価しているだけです。
ランドマークは何点のものが一番正確ですか?
一概には言えず、課題によります。68点は枯れていて安価、468点や478点は密な被覆で形状分析に向きます。精度は点の数よりも、学習セットと撮影条件の一致から来ます。
無料の顔診断テストを試す
娯楽専用のテストが15種類。自撮りを1枚アップロードしてスコアを受け取り、それが値する分だけ真面目に受け止めてください。
テストを開く