見出し画像

Deep Face Recognition: A Survey まとめ

この記事は?

Deep Face Recognition: A Survey の論文を整理し,顔認識技術の研究および開発に関する調査とまとめをしたものです. 

Deep Face Recognition: A Surveyのまとめ ~DeepLearning.jpでの発表~

以下重要なスライドと追加コメント

言葉の定義

Face Recognition(FR)には,1. Face Detection, 2. Face Alignment, 3. Face Recognitionの 3つの段階があり,以下のような言語定義がされている.

普通の画像認識タスクとの違い

一般的な画像認識タスクに比べて,顔認識は微細でかつ大規模な分類タスクである.

損失関数

微細でかつ大規模な分類タスクにおける学習を進めるために,一般的な画像認識とは異なる損失関数の定義と研究が行われてきた.現在では,正規化およびangular/cosine距離の導入をしたsoftmax損失関数を用いることが一般的なようだ.

各種フレームワークによる実装

1. Arcface(99.83%)
ArcFace: Additive Angular Margin Loss for Deep Face Recognition (v1 2018/01/23, v2 2018/11/20) 学会には出していない模様.
- Github
- 学習データと学習方法が書いてあり,再現可能
- MXNet
- 学習済みモデルも存在し,論文と同程度の精度が出る
- 必要があればONNXでpytorchにexport可能か
- MITライセンス

2. Cosface(99.33%)
CosFace: Large Margin Cosine Loss for Deep Face Recognition (CVPR2018)
- Github
- 前処理済み学習データあり
- 学習済みモデルあり (LFW 99.2%)
- Tensorflow実装

前処理

学習および推論時において,特に複数の画角の画像(顔の向き)に対応することが難しく,重要な研究課題であった.

- one-to-many augmentation: 単一の画像からポーズ変動の多くのパッチまたは画像を生成する(学習時).最近では,Dual-Agent GAN を用いて複数の画像を生成する手法がNIST IJB-A 2017 FR competitionsで優勝しており,その有用性が示されている.

- many-to-one normalization: 複数の正面を向いていない画像から,正規化された1つの画像を再現する(推論時).TP-GANを用いて正規化(正面を向いている画像を獲得)する手法が提案されており,その有用性が示されている.

データセット

VGGface2, MS-celeb-1M, Megafaceなどの学習用データセットがある.LFWはよく検証用(テスト)データセットとして用いられる.

学習と評価のプロトコル

特定の個人と,特定の個人の画像が一致していることを確認するface verificationのタスクと,特定の個人と,データベース内のどの画像と一致するか(誰か)を推定するface identificationのタスクに大分される.

顔認識技術における課題

顔認識技術における課題として,正面を向いていない画像を取り扱う必要性や,経年変化してしま可能性,メガネなどのオクルージョン,騙し画像などの課題が挙げられている.


ライブラリの調査

現在利用可能なライブラリとして,以下がある.

1. openCV
2. OpenFace
3. face_recognition(dlib)

1. OpenCV

openCVにもFace Recognitionの機能は存在するが,かなり古典的な手法を用いている.
- Eigenfaces
- Fisherfaces
- Local Binary Patterns Histograms
[参考]
OpenCVを使って誰の顔なのかを推定する(Eigenface, Fisherface, LBPH)

2. OpenFace

FaceNet: A Unified Embedding for Face Recognition and Clustering というCVPR2015のモデルを利用できる.このモデルはLFWデータセットで99.63%の精度を出すことができるものであるが,学習データセットを利用することができないため(論文ではGoogleの著者が独自で用意したデータセットを用いている),別のデータセットを用いている.そのデータセットでは,以下の精度(高くても92.92%程度)である.

3. face_recognition(dlib)

dlibというライブラリをフォークしたライブラリで,pip installで使える.
High Quality Face Recognition with Deep Metric Learning という手法を用いており,2017年2月頃に登場(論文にはしていないようだ)。
独自でデータを集めたようで、LFWで99.38%の精度を出しているのでかなり精度が高い。

(僕には上記見分けられません。。)

face_recognition(dlib)を使ってみた

1. face_recognition libraryをpip install

pip install face_recognition

2. libraryをimportして,locationを特定

3. 顔のパーツの位置チェック

4. face identification

ちゃんとできている.日本人の特性をどれだけ精緻に反映できているかは不明だが,閾値の0.6はあまりよくなさそう.(cos距離はちゃんとはかれている).また,encodingsの配列の順序には注意.

上述した最高精度のArcFaceをビジネス利用したい方はいかにお問い合わせください。

【詳細・お問い合わせはこちら↓】

◆画像認識アルゴリズム「SHARON」について
ヒトの行動や感情の認識、モノの検知などを実現する画像認識アルゴリズムを開発しています。スポーツにおけるパフォーマンス分析やマーケティングにおけるヒトの心の動きの可視化、ストレスなどの可視化による健康状態の管理を始めとするAIアルゴリズムを提供しています。

この記事が気に入ったらサポートをしてみませんか?