はじめに
本記事ではArcFaceを用いた画像分類の大枠について簡潔にまとめます。
理論的な背景やコードなどは適宜参考サイトを示しますので、ぜひご確認ください。
超まとめ
- 画像の分類では距離学習(metric learning)という学習手法がよくつかわれる。
- 距離学習は空間に埋め込んだデータについて、同じクラス同士はまとまって、違うクラス同士は離れて配置されるように学習すること。
- 単純な分類器では、新しいクラスが追加された際にモデルの再学習が必要だが、距離学習では既存のモデルをそのまま使える。
- 新しいクラスは、既存のクラスと遠くに配置される(ことが理想的)ので、新しいクラスは新しいクラス同士で特異な場所に集まる。
- 空間的に集まったデータに対して、未知のデータをプロットして最も近くにあるクラスを予測値として返すのが基本的な考え(後述)。
- ArcFaceはSOTAな距離学習アルゴリズムのひとつ。
- 空間の点同士の距離を離すには各点の原点からの距離を伸ばすか、角度を大きくすればよい。
- ArcFaceは角度に注目したアプローチ。
- 特徴としては、点同士の距離が超平面の距離と同じになるので幾何的解釈が容易らしい。
- その他には伝統的なcentre loss、contrastive loss、triplet lossや、最近登場したSphereFace、CosFaceなどがある
- 詳しくは:モダンな深層距離学習 (deep metric learning) 手法: SphereFace, CosFace, ArcFace
- 角度を用いた深層距離学習(deep metric learning)を徹底解説 -PytorchによるAdaCos実践あり-
- ArcFaceは分類器の後半にレイヤーとして追加することで動作する
- 詳しくは:[Keras]MobileNetV2+ArcFaceを使ってペットボトルを分類してみた!
- KerasによるArcFaceの実装(github)
- predictではArcFaceを取り除いた学習モデルを使用
- 詳しくは:[Keras]MobileNetV2+ArcFaceを使ってペットボトルを分類してみた!
- 出力は各データに対して1つのベクトル(一次元配列)
- testデータの出力ベクトルと、(あらかじめ計算してある)trainデータの出力ベクトルの距離を計算し、最も距離が近いtrainデータのラベルをpredict結果とする