顔認証が顔を識別する仕組み

how to recognize face recognition system
https://towardsdatascience.com/how-to-build-a-face-detection-and-recognition-system-f5c2cdfbeb8cから引用

※こちらにも解説がありますので合わせてご覧ください

本日は顔認証がどのようにして個別の顔を判別しているのかについて解説したいと思います。
認証にたどり着くまでには3つのステップを踏む必要が有ります。

顔検出および認識プロセス

HOG で顔上のパターンを認識している様子
HOG で顔上のパターンを認識している様子

カメラから入力された動画はフレームごとに分解されます。
各フレーム中の画像の中に顔が存在するか検出します。これには HOGSVM 顔検出器というアルゴリズムが使用されます。
Face01_CNN の場合は、CNN ベースの顔検出を行います。
‘HOG’ 方式より動作スピードは遅くなりますが、集団の顔を検出する場合やマスクをはめたままの顔を検出する場合は ‘CNN’ 方式を用いるべきです。この場合ハードウェアは「高速な CPU 」と「高速な NVIDIA 製グラフィックカード」が必要になります。

バックエンドでは、アルゴリズムが「classified = false」のレコードを識別し、関数を使用してこの顔の属性を詳述する128 次元のベクトルを生成します。アルゴリズムは、この新しい顔が記録上の顔と一致するかどうかを発見するために、ユークリッド距離を使用してデータベース内のすべての顔エントリとこのベクトルを相互参照します。

顔同士の比較

ユークリッド距離の計算後、アルゴリズムは未知のタイプの人物の新しい personID を生成するか(距離が閾値より大きい場合)、顔を分類済みとしてマークし、personID と一致させます(距離が閾値より小さい場合)。通常閾値は 0.4 を基本とします。

様々な顔画像に対して ResNet と呼ばれるアルゴリズムの深層学習(ディープラーニング)を介し 128 次元の特徴ベクトルの距離が同一人物で最小になるように学習してあります。ですので、同じ人物かどうかは各顔画像のベクトル感の距離を測り、閾値より小さくなるかどうかを計算することで実現します。

もの凄い勢いで活発に研究されている Deep Learning機械学習であるが、昨年 ILSVRC’2015 という学会のコンペで、一般物体認識で最高性能を叩き出した ResNet (Deep Residual Net)という学習・識別器がある。当時 Microsoft Research にいた Kaiming He 氏が開発した、152層!のニューラルネットである。

ディープラーニング ResNet のヒミツ, http://terada-h.hatenablog.com/entry/2016/12/13/192940

あわせて読みたい記事

下の図は triplet training の代表的なよく使われる画像です。3枚の画像を1セットにし、その中の一つの画像(Query)と似ている方を Positive、似ていない方を Negative という風に3枚ごとにラベル付けを行うトレーニングです。ちなみに Chad Smith はバンドのドラマー、Will Ferrell はコメディアンで、この二人はとても似ていると評判なのでトレーニング例としては最適です。下の図の学習では2つの Will Ferrell の画像の測定値がより近く、Chad Smith の測定値がより遠くなるように、ニューラルネットをわずかに微調整しています。

A single 'triplet' training step.
ディープメトリックラーニングによる顔認識には、「トリプレットトレーニングステップ」が含まれます。トリプレットは3つのユニークな顔画像で構成され、3人のうち2人は同じ人物です。 NNは、3つの顔画像のそれぞれに対して128-dベクトルを生成します。 同じ人物の2つの顔画像について、ニューラルネットワークの重みを微調整して、距離メトリックによってベクトルを近づけます。

ネットワーク自体は、約 300 万枚の画像のデータセットにてトレーニングされました。 Labeled Faces in the Wild(LFW)データセットでは、ネットワークは他の最先端の方法と比較して、 99.38%の精度に達します

このような深層学習(ディープラーニング)は俗に AI (人工知能)と呼ばれており、 Face01 は人工知能データを使った AI 顔認識ソフトウェアです。

各顔画像の 128 次元ベクトルの配列
各顔画像の 128 次元ベクトルの配列

顔全体の特徴を利用しますので、メガネの有無・髪型の変化など「局所的な変化」に強いのが特長です。

斜め顔の認証も可能

ゆらぎ値( jitters )を明示的に設定することで自動的にプリセット顔画像のリサンプリングを行うので、任意の角度の顔画像入力に対応します。またリサンプリングの回数を指定することも可能です。
これにより様々な環境下でのカメラ入力に対応でき、運用性の向上や利用シーンの拡大に寄与します。
ただし横顔の場合両目が見えていること(約40度)が目安です。

実際のサンプル動画

Face01 から出力された実際のサンプル動画をご覧ください。

複数人数の顔認証

複数人物の顔認証

マスクをしたまま顔認証

マスクをしたまま顔認証

多人数の写真による積極認証と認証スピード

写真による積極認証の検証

以上です。

最後までお読み頂きありがとうございました。

Follow me!