許容値、ゆらぎ値、upsamplingについて
今日はFACE01における認証率・誤認証率に直接関係する許容値( similar_percentage )、ゆらぎ値 ( jitter ) についてご説明したいと思います。
許容値(similar_percentage)とは
FACE01は Python プログラムから呼び出すモジュールとして提供されておりますが、そのうちの関数を呼び出す際にsimilar_percentageを設定することができます。
[DEFAULT]
# [DEFAULT] section is for simple example.
# This [DEFAULT] setting for only use CUI mode.
# Also, This setting is for user who's PC is not installed Nvidia GPU card.
# [DEFAULT] section is the inheritor of all sections.
headless = True
anti_spoof = False
output_debug_log = False
log_level = info
set_width = 750
similar_percentage = 99.1
jitters = 0
priset_face_images_jitters = 10
upsampling = 0
mode = hog
上記コードではsimilar_percentage = 99.1になっていますが、これが許容値です。
許容値を設定しない場合はデフォルト値が適用されます。
おおまかな指標ですが、
・99.1 以上
になります。実際は現場で動作させてみて決めることが多いです。
このようにFACE01では使用用途に応じて許容値が設定できます。この許容値の設定で認証率・誤認証率が左右されますので、非常に重要な設定項目です。
上の図(FAR と FRR の相関図)でのピンクの丸のポイントが最適な許容値(閾値)となります。
ゆらぎ値とは
次はFACE01シリーズにおける認証率・誤認証率に直接関係する「ゆらぎ値」(jitter)についてご説明したいと思います。
FACE01はPythonプログラムから呼び出すモジュールとして提供されておりますが、そのうちの関数を呼び出す際にゆらぎ値(jitter)を設定することができます。
ゆらぎ値とは、顔画像を読み込む際に一つ一つの画像に対して、「何回ランダムにズーム、回転、変換、反転して、画像の各バージョンのエンコードの平均を返すようにするか」指示する値です。
これによりエンコード時間が遅くなるというトレードオフで、場合によってはよりよく機能するより一般的なフェイスエンコーディングが得られます。精度の向上がエンコード時間増加に見合うかどうかはケースバイケースです。
このようにFACE01シリーズでは使用用途に応じてゆらぎ値が設定出来ますが、最終的な使用用途・範囲が固定されないためです。企業様が最終的にどのような使用用途・範囲を想定するかでゆらぎ値を決定してください。
下の動画は
- jitters = 10
- jitters = 100
の処理の様子を実際に動画で比較したものです。
upsamplingとは
顔を探して画像をアップサンプリングする回数。 数値が大きいほど探索する対象の顔が小さいとみなします。
具体的には upsampling が 0 の時 80×80 ピクセル、1 の時に 40×40 ピクセルの範囲で顔を探索します。FACE01では 0 か 1 から選択します。
処理時間とトレードオフになります。
下の例では 80x80px と 40x40px の四角形を例に出しました。ウィンドウ内の顔の大きさは 80x80px よりも大きいので 80x80px で良好な結果を出します。ですので upsampling=0 にするのが良いでしょう。
まとめ
許容値(閾値)、ゆらぎ値、upsampling 値を自由に設定できるので、様々な環境下に対応できます。
一度エンコードした値は外部データ ( npKnown.npz ) として保存されますので2度目以降はエンコード時間はかかりません。
最後までお読み頂きありがとうございました