顔認証入門 #7 顔認証のしくみ(後編)

f:id:takahashi51:20190323211007p:plain:w280

 #6から、顔認証がどのような処理の流れについて解説してきました。前回はその前編として、顔検出・顔特徴点検出・正規化についてでしたね。後編の今回は、どのようにして照合スコアを計算するのかを説明しましょう。

 簡単に言えば、『特徴量抽出』『照合スコア計算』の2ステップを経て計算されます。本記事では、それぞれについて解説していきます。


f:id:takahashi51:20190413022802p:plain


 引き続き、『真珠の耳飾りの少女』と『モナ・リザ』が同じ人物か否かを顔認証システムが判定するケースを考えます。前回までの解説の通り、上記のように大きさや向きが一定となるように顔が切り出されているとします。

特徴量抽出

f:id:takahashi51:20190715221155p:plain

 四番目の処理は、特徴量抽出(feature extraction)です。特徴量については、#2の特徴量とテンプレートの説明のときにも簡単に解説しましたね。コンピュータは顔画像をそのままの形で顔認証処理することができません。特徴量抽出は、顔画像が誰なのかを判定しやすいように特徴量と呼ばれる数値データに変換する役割があります。

 今回はごく簡単な例で説明していきます。通常の特徴量は約1,000個程度の数値データなのですが、計算を簡単にするために5個の数値データとしましょう。上の例では、
  特徴量(真珠の耳飾りの少女) = [0.7 0.5 -0.4 -0.3 -0.1]
  特徴量(モナ・リザ) = [-0.3 0.4 -0.5 0.5 -0.5]
に変換されました。これらの特徴量はノルム(ベクトルの長さ)が1になっています。

 特徴量抽出では、現在の顔認証システムのほとんどで深層学習が利用されています。深層学習は、脳の神経細胞を模擬した複雑な計算だとイメージしてください。ニュース記事などで、目や鼻、口を結んだメッシュの長さで顔認証しているような説明がされることがありますが、数十年前の技術の話ですので注意しましょう。

照合スコア計算

 五番目の処理は、照合スコア計算です。照合スコアは大きければ大きいほど同一人物であることを意味する数値です。照合スコア計算は、あらかじめ決めておいた閾値を超えるか否かで、同一人物か否かを判定する役割があります。

 今回は、内積を利用した照合スコアの例としましょう。2つのベクトルが与えられたとき、内積はベクトルの積和を計算する処理になります。この場合、照合スコアは-1~1の値が返ってきます。同じベクトル同士の内積は1で、真逆方向のベクトル同士の内積は-1です。上記の例では、
  0.7*(-0.3) + 0.5*0.4 + (-0.4)*(-0.5) + (-0.3)*0.5 + (-0.1)*(-0.5) = 0.09
となります。閾値を0.5とすると、真珠の耳飾りの少女モナ・リザの照合スコアは0.09なので、顔認証システムは他人だ判定されます。

 ここで、真珠の耳飾りの少女の別の絵が見つかったとしましょう。これから特徴量抽出を行ったところ、[0.5 0.7 -0.3 -0.4 0.1]となりました。オリジナルの真珠の耳飾りの少女ととても良く似た特徴量となっていますね。照合スコアを計算すると、
  0.7*0.5 + 0.5*0.7 + (-0.4)*(-0.3) + (-0.3)*(-0.4) + (-0.1)*0.1 = 0.93
となります。閾値を0.5とすると、今回の照合スコアは0.93なので、本人同士だと判定されるわけです。

まとめ

 本記事のまとめは以下の通りです。今回もおつかれさまでした。

・特徴量抽出で、顔画像を数値データに変換する
・照合スコア計算で、2つの特徴量から1つの照合スコアを出す