顔+手のひらで認証精度を高めよう! 掌紋認証導入の検討
はじめに
AIZE開発部 AI開発の市山です。
今回は掌紋認証の研究開発を紹介します。
掌紋認証というタスクは私たちの部内でも初めての挑戦となり、まったくの手探り(手のデータセット収集から始まったので、文字通り「手探り」ですね!)の状態からスタートとなりました。ドメインに関するノウハウがないので、とりあえず試してみて、そこから課題を明らかにしていきました。今回のブログでは「やってみた」そして「やってみて、課題は何か?」について話していきます。
1. 動機
チームの課題感として、顔認証の場合、髪で隠れたり化粧で顔が変化したりすることで認証が難しくなる場合があり、顔以外の補助的な認証方法の導入が考えられていました。
その方法には指紋や虹彩認証などが知られてますが、私たちは掌紋認証(Palmprint recognition)に注目しました。掌紋認証は顔認証と同じように画像ベースの手法が主流となっており、認証手法の中では比較的顔認証に近いと考えられます。
画像ベースのため、特別なデバイス(スパイ映画で謎の研究施設が導入しているアレを思い浮かべてください)は必要なく、一般的なカメラやスマホで撮影した画像を使います。そのため導入はしやすいです。
更に、単純に考えれば顔認証も掌紋認証も画像ベースの認証タスクのため、AIZEの顔認証モデルを使ったり知見を活かしたりすることがが出来るのではないか? というのも着目した理由の一つです。
参考として、掌紋データに含まれうる特徴をFig 1.に示します。非接触型で取得した生のデータは、Fig.1の最右のような写真になり、特徴には手相や手のシワが考えられます。
2. データ
集めるのが大変でした。
というのもWeb検索や論文調査で見つかるデータセットのほとんどが非商用利用に限定されているためです。
またライセンス問わず絶対数が顔認証と比較して少ないです。これに関しては研究の潮流としてもデータセット不足の課題が挙げられています。
以下の表に今回使用するデータセットを挙げます。ここから前処理によって枚数・クラス数は増減します。
$$
\begin{array}{| r | r | r | r | } \hline
\bm{データセット名} & \bm{枚数} & \bm{クラス数} & \bm{画像サイズ} \\ \hline
11k ~ hands & 5396 & 189 & 1600 \times 1200 \\ \hline
REST & 1946 & 179 & 2048 \times 1536 \\ \hline
TJI & 6000 & 600 & 800 \times 600 \\ \hline
CASIA & 7200 & 100 & 180 \times 180 \\ \hline
mspalm & 24000 & 500 & 352 \times 288 \\ \hline
polyU & 24000 & 500 & 128 \times 128 \\ \hline
\end{array}
$$
3. 実験
いくつか実験を試しましたが、今回はその中の一つの実験に絞って紹介します。
モデルはAIZEで作った顔認証を想定したモデルを流用します。詳細は省きますがArcFace, ResNet 50を使ったモデルです。
実験設定
+----------------------+------------+
| パラメータ | 値 |
+----------------------+------------+
| loss関数 | ArcFace |
+----------------------+------------+
| バックボーン | ResNet 50 |
+----------------------+------------+
| クラス数(掌ID数) | 2654 |
+----------------------+------------+
| 画像枚数 | 61607 |
+----------------------+------------+
| 画像サイズ | 112 x 112 |
+----------------------+------------+
| epoch | 100 |
+----------------------+------------+
※掌は同一人物のものでも左右別のものとして分けています。
また前処理は他にもcroppingや色空間のデータ拡張などを行っています。
4. 評価
1. 精度(Acc.)
+-------------+------------------------------+-------+
| パラメータ | 概要 | Acc. |
+-------------+------------------------------+-------+
| test | train:test = 9:1 で分けたもの | 0.975 |
+-------------+------------------------------+-------+
| eval | 独自収集の実際的な掌データ | 0.869 |
+-------------+------------------------------+-------+
testデータは、学習に使用したデータセットと同じデータセットからの出題です。「モデルがどれだけ上手く学習しているか」と言って良いでしょう。
evalデータはモデルの汎化性能を評価するために、実際に撮影されるような環境が想定されたデータセットを作成しました。evalデータは「モデルがどれだけ実用的か」になります。
testは「まあこんなもん」といった感じです。
evalから実際にこのモデルのみで認証を行う場合成功率は8割程度にとどまるという結果になります。補助的な使用を想定していますが、もう少し精度が欲しいところです。
2. 類似度の分布
数値だけではなく、分布を確認してみます。
ポジティブペアとネガティブペアを選び、それぞれの類似度の値の分布を見ます。画像上がeval、下がtestでの結果です。
これによりポジティブペアは高い値がどれくらいの割合あるのか、またネガティブペアの値と分布は異なるのかを確認します。
dummyは、類似度の最低ラインが知りたかったためです。
$$
\begin{array}{| c | c | c | } \hline
\bm{ペア} & \bm{説明} & \bm{数} \\ \hline
Pos pairs & 同一掌の画像ペア & ランダム100組 \\ \hline
Neg pairs & 異なる掌から画像ペア & ランダム100組 \\ \hline
dummy & ランダム生成の画像と実データのペア & 100組 \\ \hline
\end{array}
$$
あまり望ましい結果ではありません。
ポジティブペア(Pos)とネガティブペア(Neg)の分布の重なりがひどく、また類似度の高いPosペアが少ないです。
また、Negペアはdummyに近いほうが理想だと考えられますが、よりPos側に近いです。
結果から多くのペアがPosかNegのどちらに属しているか判別できません。
5. 結論
「やってみた」結果から、やはり既存のモデルでは掌紋認証は難しいと言わざるを得ません。これは経験上分かっていたことであまりガッカリすることでもないですが、やはり掌紋用モデルやデータ拡張といった手法を考える必要があると分かりました。
また課題として「使用するデータセットが限られる」「ペア間の区別可能性がない」が出てきました。
解決策としてデータ拡張や事前学習済みモデル(ViT)を使う、よりペア間の距離を最適化する距離学習の導入が挙げられます。
最後に
いかがでしたでしょうか。掌紋認証についての実験を簡単ながら紹介しました。
細かな補足(前処理にて掌領域に指の付け根付近を含めないほうがいいとか、同一掌で左右を分けるべきかの議論とか……)もあるのですが割愛しました。最終的に些末な問題になるかもしれませんし。
また課題感の通り、まだやれることは多いので引き続き掌紋認証を触っています。現在はViTのFine-Tuningを試している所で試行錯誤しながら楽しく取り組んでいます。
拙いながらもこの技術ブログを通じて、掌紋認証タスクや弊社およびAI開発の活動に興味を持っていただけたら幸いです。
最後までお読みいただき、ありがとうございました。
2024年10月某日
「動かせど動かせど猶わがモデル実用にならざり ぢつと手を見る」