許容値、ゆらぎ値、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 の相関図
FAR と FRR の相関図

上の図(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度目以降はエンコード時間はかかりません

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