Sleep like a pillow

Deep Learning関係の話。

論文読み&Keras実装 ArcFace: Additive Angular Margin Loss for Deep Face Recognition

metric learningやfeature learningと呼ばれる学習手法は、クラス内のサンプル間の距離を近く、クラス間のサンプル間の距離を遠くするような特徴量を学習によって獲得するものです。 代表的なmetric learning手法のSiamese NetworkやTriplet lossはもう古くて、ArcFaceの方が色々と優れているらしいので読んでみました。

arxiv.org

Pytorch実装 github.com

Keras実装 github.com

Abstract

  • feature learningで主に重要なのは、特徴量の持つ弁別性を向上させるのに適したloss関数を設計すること。
  • Centre lossは、各サンプルの特徴量とクラスを代表する特徴量との距離に制約を設けることで、クラス内分散を小さくする。
  • SphereFaceでは、全結合層の重み行列を用いて角度空間における各クラスを代表する特徴量を表現し、その重み行列の列ベクトルと各サンプルの特徴ベクトルのなす角に制約を設ける。
  • 最近人気なのは一般的なloss関数にマージンを組み込む方法。
  • この論文では Additive Angular Margin Loss (ArcFace)を提案。
  • ArcFaceは超球面における測地線距離(直線の概念を曲がった空間において一般化したもの。2つの離れた点を結ぶ(局所的に)最短な線)と対応しているため、幾何学的に解釈できるらしい。
  • 比較実験めちゃくちゃやった(最近のSOTAな手法すべて+10種類のデータセット)。
  • ArcFaceはSOTAな手法であるとともに、実装が簡単で計算コストの増加も無視できるほど少ない。

2. Proposed Approach

2.1. ArcFace

  • 普通のsoftmax loss  L_1は以下の通り。

 \displaystyle L_1 = -\frac{1}{N} \sum_{i=1}^N \log \frac{e^{W_{y_i}^T x_i + b_{y_i}}}{\sum_{j=1}^n e^{W_{j}^T x_i + b_j}}

  • バイアスを0に固定して、Wの列ベクトルとxをそれぞれL2ノルムで正規化すると、二つのベクトルのなす角のコサイン(コサイン類似度)を表すことができる( L_2)。sはリスケールのパラメータで、マージンによって値が小さくなりすぎるのを防ぐ。

 \displaystyle L_2 = -\frac{1}{N} \sum_{i=1}^N \log \frac{e^{s \cos\theta_{y_i
}}}{e^{s \cos\theta_{y_i}}\sum_{j=1, j \neq y_i}^n e^{s \cos\theta_{j}}}

  • 最後にマージンmを、正解ラベルについてのlogitから求められる角度 \theta_{y_i
}に加える( L_3)。実装上はarccosineか三角関数の公式を用いた計算が必要。

 \displaystyle L_3 = -\frac{1}{N} \sum_{i=1}^N \log \frac{e^{s \cos(\theta_{y_i
} + m)}}{e^{s \cos(\theta_{y_i} + m)}\sum_{j=1, j \neq y_i}^n e^{s \cos\theta_{j}}}

  • 全体の流れは以下の図の通り。

f:id:uiiurz1:20190415215411p:plain

  • 以下の図は8クラスの顔画像データ(それぞれ約1500枚ずつ)について、二次元の特徴表現をSoftmaxとArcFaceで学習し、結果を比較をしたもの。中心から伸びてる線分は、クラスを代表する特徴ベクトルを表しており、円周上に分布する点は各サンプルの特徴ベクトルを表している。
  • ArcFaceの方がクラス内分散が小さく、ばらつきが少ないのがわかる。 f:id:uiiurz1:20190415214747p:plain

2.2. Comparison with SphereFace and CosFace

Numerical Similarity

  • SphereFaceとCosFaceはArcFaceと同様にコサイン類似度を用いたlossであるが、マージンの導入の仕方が異なる。
  • 以下の式がわかりやすくて、マージンとしてm1を用いる場合はSphereFace、m2を用いる場合はArcFace、m3を用いる場合はCosFaceになる。

 \displaystyle L_4 = -\frac{1}{N} \sum_{i=1}^N \log \frac{e^{s \cos(m_1 \theta_{y_i
} + m_2) - m_3}}{e^{s \cos(m_1 \theta_{y_i} + m_2) - m_3}\sum_{j=1, j \neq y_i}^n e^{s \cos\theta_{j}}}

  • 数値解析の観点から見れば、マージンを角度空間で加えようがコサイン空間で加えようがどっちでも問題ない。

Geometric Defference

  • 数値解析的にはSphereFace, CosFace, ArcFaceはあまり違いが無いけど、幾何学的な観点から見ると、ArcFaceのマージンは測地線距離と正確に対応している。
  • 以下の図はニクラス分類における決定境界とマージンを示したもの。点線が決定境界で、灰色の領域はマージン。

f:id:uiiurz1:20190415215149p:plain

  • おそらく、クラスを代表する特徴ベクトル\thta_1と\theta_2の線形結合でサンプルの特徴ベクトルを表した際に、どちらのクラスに属するか示してる。
  • ArcFaceのマージンはSoftmaxの決定境界に対して一定かつ線形になっているのに対して、SphereFaceとCosFaceはそうではない。
  • ちょっとした違いかもしれないが学習には大きく影響するらしくて、SphereFaceでは勾配の発散を防ぐために、学習開始時にマージンのペナルティを弱めている。

2.3 Compatison with Other Losses

  • その他のLossとの比較は以下の図がとても分かりやすい。

f:id:uiiurz1:20190415215330p:plain

  • Margin-LossとTriplet-Lossの違いは、 Margin-Lossではpositive sampleとnegative sampleにそれぞれクラスを代表する特徴ベクトルを用いる点。