【調査中】ArcFaceなどのメトリックラーニング

最終更新日: 2022-11-10
#
ディープラーニング
#
メモ
#
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次元まで拡張した,ネットワークを深くしたなどの違いがある.(詳しく論文見てないけど)

結論

参考文献を読もう.


author

WEBエンジニアをやっています.
技術スタックとしては,AI/機械学習,モダンWEB開発,電子工作など多岐に渡ります.
このサイトでは、WEBサービスの開発や、プログラミングに関することを書いています.

Learn More

関連記事

thumbnail

あほくさ3

Markdown記法 サンプル集 見出し 1個から6個シャープで見出しを記述する。 ※シャープと見出し文字の間には半角スペースを1つ入れること 記述例 # 見出し1 ## 見出し2 ### 見出し3 #### 見出し4 ##### 見出し5 ###### 見出し6 表示例 見出し1 見出し2 見出し3 見出し4 見出し5 見出し6 箇条書きリスト ハイフン、プラス、アスタリスクのいずれかで箇条書きリストを記述可能。 ※ハイフン、プラス、アスタリスクと箇条書きの項目の間には半角スペースを1つ入れること 記述例 - リスト1 - ネスト リスト1_1 - ネスト リスト1_1_1 - ネスト リスト1_1_2 - ネスト リスト1_2 - リスト2 - リスト3 表示例 リスト1 ネスト リスト1_1 ネスト リスト1_1_1 ネスト リスト1_1_2 ネスト リスト1_2 リスト2 リスト3 番号付きリスト 数値+半角ドットで番号付きリストを記述可能。 番号の内容は何でもいい。実際に表示される際に適切な番号で表示される。 そのため、一般的にはすべて 1. 内容 で記載すると変更に強く楽です。 ※数値+半角ドットと箇条書きの項目の間には半角スペースを1つ入れること 記述例 1. 番号付きリスト1 1.

thumbnail

あほくさ

hugoでサイトを作る go知らなくても作れるよ。 ビルド早いよ 数十記事なら、たいして変らない 数千記事書いたら、ありがたみがを感じると思う optionなし print('ahoxsa') print('oppi') try: print('baka') except: print('failure') optionあり 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 // GetTitleFunc returns a func that can be used to transform a string to // title case. // // The supported styles are // // - "Go" (strings.Title) // - "AP" (see https://www.apstylebook.com/) // - "Chicago" (see https://www.

thumbnail

あほくさ2

hugoでサイトを作る go知らなくても作れるよ。 ビルド早いよ 数十記事なら、たいして変らないあ. 数千記事書いたら、ありがたみがを感じると思う koi kok ksaka