AIで顔認証スマートロック! – 検証編 –

6月 13, 2020

複数記事に分けて解説しています.

AIで顔認証スマートロック! – 機能とセットアップ編 –
AIで顔認証スマートロック! – 作成編 –
AIで顔認証スマートロック! – 検証編 – 

顔認証コンセプト

Deep Merics Learning

今回, 顔認証を行っているface_recognitionというライブラリはDeep Metrics LearningというDeep learningの一種の手法を用いています. Deep Metrics Learningでは入力(画像)をベクトルに変換します. その際, 下図のように画像類似度の高いもの同士(チワワ同士)は近い距離に, 画像類似度の低いもの同士(チワワと柴犬)は遠くにベクトル化します. もちろんこれは人間についても同様のことができ, 顔認証に応用することができます.

下記のサイトより引用させていただいています.

顔認識性能

データ概要

顔認証性能を測定するため, 日本人男性の顔画像100枚と自分の顔の画像100枚を用意しました. これらの画像はGoogleで検索して収集しました. ここにはアップロードしません.

顔ベクトルの距離比較

以下のグラフは自分の顔の画像100枚と日本人男性の顔画像100枚に対して, 自分の顔1枚との類似度を測定したものです. 画像の中に現れる顔はDeep Metric Learning手法によってベクトルに変換され, そのベクトル間の距離で顔の類似度を測定します.

縦軸は自分の顔1枚とそれぞれ100枚ある比較画像とのベクトル間の距離で, 顔の類似度を表しています. 横軸のpicture_of_meが自分の顔100枚, unknown_pictureが日本人男性の顔画像100枚を表しています. 自分の顔同士の方が他人と比べて顔の類似性が高いことを示す結果になっています. 自分の顔と他人の顔のベクトル間距離は最低でも0.4以上となっており, 閾値を0.4にすれば自分と他人の顔を識別できそうです.

unknown_pictureフォルダに日本人男性の顔画像100枚, picture_of_meフォルダに自分の顔の画像100枚を入れ, 以下のプログラムを実行すれば, これと同様のことができます.

#plotに必要なライブラリ
sudo pip install matplotlib
sudo pip install seaborn
sudo pip install pandas

#検証プログラムの実行
python3 plot_face_distance.py

顔認識速度

最後に顔認識速度を計測します. 顔画像をベクトル化するまでの時間を測定しています. 以下は5つの画像に対する実行結果です. 13FPSほど出ており, 顔認証には十分だと言えます.

#検証プログラムの実行
python3 benchmark.py
Sample0:
 - Face recognition time: 0.0753s (13.27 fps)

Sample1:
 - Face recognition time: 0.0734s (13.63 fps)

Sample2:
 - Face recognition time: 0.0733s (13.64 fps)

Sample3:
 - Face recognition time: 0.0730s (13.70 fps)

Sample4:
 - Face recognition time: 0.0732s (13.67 fps)

おわり

いかがだったでしょうか、皆さんの実装の一助になれば幸いです.