認証速度 0.03 秒の「AI顔認証」 Face01

IoT NEWS の 2020年3月24日の記事に
「認証速度0.3秒、精度99%の、AI顔認証入退室管理ソリューション」というタイトルでソフトバンク子会社の日本コンピュータビジョン株式会社様(以下JCV)の企業紹介がありました。

そこで現在リリースしている Face01 がどの程度の認証速度があるか、またその認証速度を計測することにしました。
目次
認証速度を計測する
Face01_Graphics
一枚のフレームから個人を特定するまでの認証速度は以下のように計測しました。
import time
time1 = time.time()
# 内部処理
time2 = time.time()
elapsed_time = time2 - time1
フレーム上に四角形と名前を表示し、さらに標準出力画面に出力するまでを「内部処理」としました。

経過時間を 100 サンプルとり、これらの平均値と標準偏差を計算しました。
平均値の計算式は
=ROUND(AVERAGE(A1:A100), 2)
標準偏差の計算式は
=ROUND(STDEV.P(A1:A100), 2)
としました。
計算結果
CUDA 環境下で 2500 サンプルを取り測定し直したところ、
平均処理時間 0.19 秒
標準偏差 0.07
となりました。
この時の 1 フレームあたりのビデオ解像度は 984 x 554 です。

Face01_Imager
for img_file in img_files:
# 処理時間を計測して標準出力する
t1=time.time()
...内部顔認証処理...
# 処理時間を計測し標準出力する
t2=time.time()
eTime=t2-t1
print(eTime)
# coding: utf-8
print('Start test_script')
import face01_imager_115 as f
import time
kaoninshoDir, pictures_of_people_i_knowDir, check_images = f.home()
known_face_encodings, known_face_names = f.load_priset_image(
kaoninshoDir,
pictures_of_people_i_knowDir,
jitters=5, # 処理速度優先
upsampling=0, # 200x200 ピクセルの顔画像ファイルであることが前提
mode='hog', # hog で固定
model='large' # large で固定
)
while(1):
xs = f.face_attestation(
check_images,
known_face_encodings,
known_face_names,
tolerance= 1.0, # 最初は tolerance を開放する ( 1.0 )
jitters=0,
upsampling=0,
mode='hog', # hog で固定
model='large', # large で固定
display_face_distance = 'true' # 閾値を求めるために true にする
)
for x in xs:
(name, date, distance) = (x['name'], x['date'], x['face_distance'])
# ~ print(
# ~ 'name', name,
# ~ 'date', date,
# ~ 'face_distance',distance
# ~ )
pass
Start test_script
1 AMEMIYA をエンコードしています
2 ASKA をエンコードしています
3 aiko をエンコードしています
4 あおい輝彦 をエンコードしています
5 あき竹城 をエンコードしています
6 あばれる君 をエンコードしています
7 あびる優 をエンコードしています
8 あべこうじ をエンコードしています
中略
1253 櫻井よしこ をエンコードしています
1254 櫻井淳子 をエンコードしています
1255 櫻井翔 をエンコードしています
1256 澤村拓一 をエンコードしています
1257 澤部佑 をエンコードしています
1258 澤穂希 をエンコードしています
1259 眞鍋かをり をエンコードしています
1260 眞鍋由佳 をエンコードしています
1261 眞野あずさ をエンコードしています
1262 齋藤孝 をエンコードしています
1263 齋藤飛鳥 をエンコードしています
1264 萬田久子 をエンコードしています
1265 蛯原友里 をエンコードしています
1266 蜷川実花 をエンコードしています
1267 槇原敬之 をエンコードしています
0.036974191665649414
0.029394149780273438
0.02966165542602539
0.032399892807006836
0.03319144248962402
0.032070159912109375
0.0329289436340332
0.038231849670410156
0.03295278549194336
0.03299665451049805
0.03158926963806152
0.03318023681640625
0.03505253791809082
0.03290152549743652
0.03168797492980957
0.032446861267089844
0.02933526039123535
0.029347896575927734
0.027882814407348633
0.03146100044250488
0.036337852478027344
0.02914261817932129
0.030547618865966797
0.03008437156677246
0.03711843490600586
0.02898120880126953
0.033921241760253906
0.0285036563873291
0.03446173667907715
0.03247356414794922
0.030800342559814453
0.03085494041442871
0.02971649169921875
0.03235650062561035
0.032964468002319336
0.05706143379211426
0.03087449073791504
0.03394937515258789
0.03672647476196289
0.03546595573425293
0.030713558197021484
0.03013920783996582
0.0298004150390625
0.03440046310424805
0.028110742568969727
0.028941869735717773
0.035513877868652344
0.07585859298706055
0.03087329864501953
0.028026580810546875
0.03501415252685547
0.03505730628967285
0.0337977409362793
0.02855062484741211
0.027634143829345703
0.02849125862121582
0.031778812408447266
0.032134294509887695
0.027828216552734375
0.028812170028686523
0.029687166213989258
0.02914571762084961
0.03316855430603027
0.03337907791137695
0.028588533401489258
0.0318756103515625
0.030826091766357422
0.0290069580078125
0.029929161071777344
0.0291292667388916
0.03332924842834473
0.03592205047607422
0.03478288650512695
0.03919577598571777
0.03593111038208008
0.029367923736572266
344 Error: 石田ゆり子2mirror.jpg に顔を検出できませんでした。 mode を hog から cnn にして再試行...
349 Msg: mode = 'cnn' で顔探索中…
361 Msg: 顔を検出しました mode='hog' に戻します
...OK
0.05465102195739746
0.037984371185302734
0.02834010124206543
0.03017568588256836
0.029082059860229492
0.036133527755737305
0.03426861763000488
0.031426191329956055
0.027883529663085938
0.028827190399169922
0.029218435287475586
0.03432917594909668
344 Error: 高市総務大臣bmirror.jpg に顔を検出できませんでした。 mode を hog から cnn にして再試行...
349 Msg: mode = 'cnn' で顔探索中…
361 Msg: 顔を検出しました mode='hog' に戻します
...OK
0.05914163589477539
0.028044939041137695
0.03337693214416504
0.03411507606506348
0.03322625160217285
0.02869868278503418
0.028665542602539062
0.03297901153564453
0.029643774032592773
中略
0.03332924842834473
0.03592205047607422
0.03478288650512695
0.03919577598571777
0.03593111038208008
0.029367923736572266
344 Error: 石田ゆり子2mirror.jpg に顔を検出できませんでした。 mode を hog から cnn にして再試行...
349 Msg: mode = 'cnn' で顔探索中…
361 Msg: 顔を検出しました mode='hog' に戻します
...OK
0.05465102195739746
0.037984371185302734
0.02834010124206543
0.03017568588256836
0.029082059860229492
0.036133527755737305
0.03426861763000488
0.031426191329956055
0.027883529663085938
0.028827190399169922
0.029218435287475586
0.03432917594909668
344 Error: 高市総務大臣bmirror.jpg に顔を検出できませんでした。 mode を hog から cnn にして再試行...
349 Msg: mode = 'cnn' で顔探索中…
361 Msg: 顔を検出しました mode='hog' に戻します
...OK
0.05914163589477539
0.028044939041137695
0.03337693214416504
0.03411507606506348
0.03322625160217285
0.02869868278503418
0.028665542602539062
0.03297901153564453
0.029643774032592773
以下略

1268 個の顔画像ファイルに対して「1 枚の顔画像を認証処理した後ディスクに保存する」事にかかる時間は平均 0.03 秒となりました。
おそらく処理時間の殆どの時間を io に費やしていると思われますので、仮に io 処理を省き標準出力のみにするともっと処理時間は短くなるものと思われます。
処理時間についてのまとめ
両者の計算機リソースを同一化していない時点で、計測時間の「比較」は無意味です。
Face01 は一般家庭用 PC しか使っておりませんので Face01 のスピードは専用環境によって今よりずっと早くなります。
実際の顔認証スピード検証動画
数字だけでは分かりにくいので Face01_Graphics 1.1.7 の認証スピードを実感できるデモ動画を用意しました。ここでは 40 人の芸能人を 0.5 秒間隔で表示、画面が切り替わるたびに顔認証をしています。体感では全く処理にかかった時間を感じることが出来ず、画面が変わるたびに瞬時に「名前」と「パーセンテージ」が表示されることが確認できます。

認証精度を比較する
そもそも「精度」とは?
「精度99%」という言葉は広告として使うぶんには良いですが、現実的には意味が通りません。なぜなら弊社ブログの「本人拒否率と他人受入率の改善」でご紹介したように認証には下のような相関関係があるからです。

「精度」が仮に「顔の類似度」の事であれば、上の図に明らかなように限りなく「FAR (他人受入率)」が上がってしまいます。
「精度 99% 」のまとめ
「精度 99%」には「なんかすごそう」というイメージがあります。
ただ実際には「交差ポイント ( EER )」をどれだけ下げられるか、がポイントになります。本人拒否率が低くかつ他人受入率が低い状態が好ましいのです。
強い顔認証(大規模顔認証システム)も弱い顔認証(中小規模顔認証システム)もこれを非常に低いレベルまで落とし込みます。
どちらも人間の認知率より精度の良いところでコストとのバランスを取りながら設定します。
こちらの解説記事「顔認証システムの選び方」で詳しく説明しております。
この解説記事を読んでいただければ、改めて顔認証システムの選び方、求めている性能は何なのかがおのずと見えてくると思います。
弊社の「Face01 シリーズ」は弱い顔認証(中小規模顔認証システム)を採用しています。
非常にコストパフォマンスがよく、正確性も非常に高く、マスク着用でも顔認証ができます。
御社の顔認証システムの SDK として、是非ご活用ください。
