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

IoT NEWS ロゴ

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

IoT NEWS より引用
IoT NEWS より引用

そこで現在リリースしている 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

以下略
平均処理時間計算結果 0.03 秒
平均処理時間計算結果 0.03 秒

1268 個の顔画像ファイルに対して「1 枚の顔画像を認証処理した後ディスクに保存する」事にかかる時間は平均 0.03 秒となりました。

おそらく処理時間の殆どの時間を io に費やしていると思われますので、仮に io 処理を省き標準出力のみにするともっと処理時間は短くなるものと思われます。

処理時間についてのまとめ

両者の計算機リソースを同一化していない時点で、計測時間の「比較」は無意味です。
Face01 は一般家庭用 PC しか使っておりませんので Face01 のスピードは専用環境によって今よりずっと早くなります。

実際の顔認証スピード検証動画

数字だけでは分かりにくいので Face01_Graphics 1.1.7 の認証スピードを実感できるデモ動画を用意しました。ここでは 40 人の芸能人を 0.5 秒間隔で表示、画面が切り替わるたびに顔認証をしています。体感では全く処理にかかった時間を感じることが出来ず、画面が変わるたびに瞬時に「名前」と「パーセンテージ」が表示されることが確認できます。

芸能人 40 人を Face01_Graphics 1.1.7 で顔認証処理させた例
芸能人 40 人を Face01_Graphics 1.1.7 で顔認証処理させた例
芸能人 40 人を Face01_Graphics 1.1.7 で顔認証処理させた例

認証精度を比較する

そもそも「精度」とは?

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

FAR と FRR の相関図
FAR と FRR の相関図

「精度」が仮に「顔の類似度」の事であれば、上の図に明らかなように限りなく「FAR (他人受入率)」が上がってしまいます。

「精度 99% 」のまとめ

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

弊社の「Face01 シリーズ」は弱い顔認証(中小規模顔認証システム)を採用しています。
非常にコストパフォマンスがよく、正確性も非常に高く、マスク着用でも顔認証ができます
御社の顔認証システムの SDK として、是非ご活用ください。

マスクをはめている人物も適切に顔認証処理を行います
マスクをはめている人物も適切に顔認証処理を行います

Follow me!