【調査中】ArcFaceなどのメトリックラーニング
距離学習を用いるArcFaceについての調査メモ
ArcFaceって
ArcFaceは顔認証を行えるメトリックラーニングの構造のこと.
ArcFaceは入力されたデータに対して,一人の画像に対するユニークな特徴ベクトルを算出する.
例えばA,B,C,… という人物の画像が一人に対して,複数毎あったとする.
Aの画像が入力されたときArcFaceはY_Aのベクトルを算出するよう学習する.
一方,Bの画像が入力されたときもY_Bを算出する.
これにより,未知の人物の画像が入力されたときも,人物ごとにユニークなベクトルを算出することによって,
ベクトル間のCos類似度を求めることにより,同一人物かを判定することが可能になる.
元論文のarXiv
インストール
論文の著者が実装と学習済みの重みを公開している.
Mxnetというフレームワークだが,ArcFaceを使うだけなら何も気にすることはない.
実行には
$ pip3 install mxnet==1.6.0
が必要である. ただし,GPU環境の場合,cuda==10.2をインストールし,
$ pip3 install mxnet-cu102==1.6.0
を実行する.
あとは,
$ pip3 install -U insightface
でインストールは完了.
試す
基本的には,チュートリアルを参考にライブラリを読み解いていく.
自分でも,少し試したので,jupyter notebookを貼っておく.
不明点
論文や解説記事を読んでArcFaceの学習方法は理解したものの,肝心の顔認証データセットの目的変数がわからない.具体的には,ユニークなIDをどうやって,つけているのか.論文中に各データセットの示された人物の数は一定でないから.
[追記] 論文をよく見ると,参考文献として, [32] Y. Sun, Y. Chen, X. Wang, and X. Tang. Deep learning face representation by joint identification-verification. In NIPS, 2014. が載っていた. これによるとDeepIDを用いて特徴ベクトルを決定するとある. DeepIDについては,解説記事を発見した. 参考記事
これを用いてDeepIDをつけているのか納得.なお,参考記事はDeepID 1について解説されているが,参考文献はDeepID2について説明されている. おおむねは同じだが,違いは,顔のパーツ位置(face landmark)による畳み込み前の整列や特徴ベクトルを200次元まで拡張した,ネットワークを深くしたなどの違いがある.(詳しく論文見てないけど)
結論
参考文献を読もう.