johshisha / paper_reading

0 stars 0 forks source link

2018_ArcFace: Additive Angular Margin Loss for Deep Face Recognition #1

Open johshisha opened 5 years ago

johshisha commented 5 years ago

論文

ArcFace: Additive Angular Margin Loss for Deep Face Recognition https://arxiv.org/pdf/1801.07698.pdf 2018/01/23

動機

レシピの画像検索について発表したときに,Face Recognitionで似たような手法(Triplet Loss)を利用しており,別の手法も提案されていることを教えてもらった Face Recognitionではペアの作り方の組み合わせ数が膨大になる問題に対処するために,Softmax Lossでできるような手法が提案されているとのこと.その例として上がっていた,ArcFaceを読んでみた.

概要

大規模顔認識のタスクで,超球面上の幾何学的な距離とマージンを考慮することで,分類タスクの枠組みで学習可能でより分類性の高い特徴量を得ることができる手法(ArcFace)を提案した.

10以上の顔認識ベンチマークでSOTA 実装も簡単で,コードも公開されている. https://github.com/deepinsight/insightface

提案内容としては, 図を見るとわかりやすい. モデルからの特徴量とFCの重みをそれぞれ正規化し,掛け合わせて cosθ_i を得る.(次元数は予測クラス数と同じ) 次に.正解ラベルに対応する次元に対してのみ, cos(θ+m)としてマージンを与える. その後,s倍して,softmaxにかける.

正解の次元に対してのみマージンを与えることで,不正解のクラスを m 以上遠く(?)に配置せねばならず,クラス間の分離度が上がる.

2018_ArcFace-_Additive_Angular_Margin_Loss_for_Deep_Face_Recognition_pdf(3___11ページ)

johshisha commented 5 years ago

2つの研究方針

ArcFaceの特徴

ArcFaceの式

2018_ArcFace-_Additive_Angular_Margin_Loss_for_Deep_Face_Recognition_pdf(3___11ページ)

正解クラスに対応する要素にだけマージンmを与えることで,不正解のクラスを m 以上の差をつけて予測しないと正しく分類されなくなるので,クラス間の分離度があがる

ArcFaceの効果を視覚的に見るために,Toy Exampleを解いて可視化する 8クラス,各1500サンプルの顔認識用データセットで学習し,特徴量を2次元にしてプロットする.

Softmaxの方はクラス間の境界が曖昧だが,ArcFaceのほうははっきりと分離されていることがわかる 2018_ArcFace-_Additive_Angular_Margin_Loss_for_Deep_Face_Recognition_pdf(3___11ページ)

SphereFace, CosFaceとの比較

2018_ArcFace-_Additive_Angular_Margin_Loss_for_Deep_Face_Recognition_pdf(4___11ページ)

この式で3つの手法を表せる m1がSphereFace,m2がArcFace,m3がCosFaceに関するパラメータ.

マージンのとり方は以下のようになっている. 微妙な違いだが,バタフライ効果的に影響するらしい. 特に,SphereFaceは学習が不安定らしく,学習序盤はペナルティを弱めにするなどの工夫が必要らしい. 2018_ArcFace-_Additive_Angular_Margin_Loss_for_Deep_Face_Recognition_pdf(4___11ページ)

その他のロス

実験でいくつかのロスと比較する

ややこしいが,概念図

2018_ArcFace-_Additive_Angular_Margin_Loss_for_Deep_Face_Recognition_pdf(1___11ページ)

johshisha commented 5 years ago

実験

顔認識の実験の詳細はあまり興味ないので詳しくは見ない

Experimental Settings

前処理は,関連研究に沿って,five facial pointsを利用して112x112にクロッピングし正規化する? ResNet-50, -100を利用 最後の畳み込み層のあとに,BN->Dropout->FC->BNをして512-Dの特徴を得る

parameter

スケーリング用の s = 64 マージン m = 0.5 (思ってたより小さい,θが角度なはず) ラジアンだったら25度くらいだからそれっぽい MXNetで実装 batch size = 512 P40 x 4 learning rate: start = 0.1, divided by 10 at N iterations (Nはデータセットによって違う) momentum = 0.9 weight decay = 5e^{-4}

Dataset

2018_ArcFace-_Additive_Angular_Margin_Loss_for_Deep_Face_Recognition_pdf(5___11ページ)

結果

(読んだけど背景知識がなさすぎてタスク設計がよくわからなかったのであってるか不安) 学習したモデルを使って予測するときは,512-Dの特徴量を取得し,それを利用する. 予測する対象のデータセットが,学習サンプルとテストサンプルを持っていて,学習サンプルを利用して各クラスの中心点を計算する. その中心点を利用して,テストサンプルに対して分類を行う(?)

CASIAデータセットを使って学習して,他のデータセットに対して予測した結果 (CM1, CM2は上述の式4のm1, m2, m3を表に書いてあるパラメータで設定したもの)

ArcFaceが一番良い. 他の手法もそこそこよいので,めちゃくちゃ違うわけではなさそうだが, 3つのデータセットで一貫してよいのはすごい

2018_ArcFace-_Additive_Angular_Margin_Loss_for_Deep_Face_Recognition_pdf(6___11ページ)

他の実験でもSOTAを出している

johshisha commented 5 years ago

(雑)

Appendix

Parallel Acceleration

Even for one million identities trained on 81080ti (11GB), our implementation (ResNet 50, batch size 864, feature dimension 512 and float point 32) can still run at 800 samples per second.

Feature Space Analysis

The high-dimensional space is so large that E[θ(Wj)] decreases slowly when the class number increases exponentially.

2018_ArcFace-_Additive_Angular_Margin_Loss_for_Deep_Face_Recognition_pdf(10___11ページ)