GitHubじゃ!Pythonじゃ!

GitHubからPython関係の優良リポジトリを探したかったのじゃー、でも英語は出来ないから日本語で読むのじゃー、英語社会世知辛いのじゃー

deepinsight

insightface – MXNetの顔認識プロジェクト

投稿日:

MXNetの顔認識プロジェクト

InsightFace:2D / 3D顔分析プロジェクト

Jia GuoとDian Jiankang

ライセンス

InsightFaceのコードは、MITライセンスの下で公開されています。

最近の更新

2018.04.232018.04.23実装が利用可能になりました。 この軽量で強力なネットワークバックボーンの使用方法の詳細については、 トレーニングセクションを確認してください。

2018.03.26 :組み合わせマージン(損失タイプ= 5)でトレーニングすることができます。併合マージンの検証結果を参照してください。

2018.02.13MegaFace-Challengeで最先端のパフォーマンスを達成しました。 実装の詳細については、当社の論文とコードをご確認ください。

内容

深い顔認識

フェイスアライメント

顔検出

引用

接触

深い顔認識

前書き

このリポジトリでは、深い顔認識のための訓練データ、ネットワーク設定、および損失設計を提供しています。 トレーニングデータには、正規化されたMS1MおよびVGG2データセットが含まれています。このデータセットは、すでにMxNetバイナリ形式でパックされています。 ネットワークバックボーンには、ResNet、InceptionResNet_v2、DenseNet、DPN、MobiletNetがあります。 損失関数には、Softmax、SphereFace、CosineFace、ArcFace、Triplet(Euclidean / Angular)Lossがあります。

  • 損失タイプ= 0:ソフトマックス
  • 損失型= 1:SphereFace
  • 損失型= 2:CosineFace
  • 損失型= 4:ArcFace
  • 損失型= 5:複合マージン
  • 損失型= 12:トリプル損失

我々の方法であるArcFaceは、当初、 arXivのテクニカルレポートで説明されていました。 このリポジトリを使用することで、LFW 99.80%+とMegaface 98%+を単一のモデルで簡単に達成できます。 このリポジトリは、研究者/エンジニアが、バイナリデータセットをダウンロードしてトレーニングスクリプトを実行するという2つのステップによって、迅速な顔認識アルゴリズムを迅速に開発するのに役立ちます。

トレーニングデータ

すべての顔画像がMTCNNによって整列され、 112×112にトリミングされます。

注意:洗練されたMS1Mデータセットと切り取られたVGG2データセットを使用する場合は、元の論文を引用してください。

列車

  1. GPUをサポートしたMXNetをインストールする(Python 2.7)。
pip install mxnet-cu80
  1. InsightFaceリポジトリをクローンします。 ディレクトリINSIGHTFACE_ROOTます。
git clone --recursive https://github.com/deepinsight/insightface.git
  1. トレーニングセット( MS1M )をダウンロードし、 $INSIGHTFACE_ROOT/datasets/ます。 各トレーニングデータセットには、次の7つのファイルが含まれます。
    faces_ms1m_112x112/
       train.idx
       train.rec
       property
       lfw.bin
       cfp_ff.bin
       cfp_fp.bin
       agedb_30.bin

最初の3つのファイルはトレーニングデータセットであり、最後の4つのファイルは検証セットです。

  1. 深い顔認識モデルを訓練する。 この部分では、 $INSIGHTFACE_ROOT/src/ディレクトリにいると仮定しています。
export MXNET_CPU_WORKER_NTHREADS=24
export MXNET_ENGINE_TYPE=ThreadedEnginePerDevice

以下にいくつかの例を示します。 私たちの実験はTesla P40 GPUで行われました。

(1)。 LResNet100E-IRでArcFaceをトレーニングしてください。

CUDA_VISIBLE_DEVICES='0,1,2,3' python -u train_softmax.py --network r100 --loss-type 4 --margin-m 0.5 --data-dir ../datasets/faces_ms1m_112x112  --prefix ../model-r100

2,000バッチごとにLFWCFP-FFCFP-FPAgeDB-30の検証結果を出力します。 train_softmax.pyのすべてのコマンドラインオプションを確認できます。 このモデルはLFW 99.80+メガファース98.0%+を達成することができます。

(2)。 LResNet50E-IRを使用してCosineFaceをトレーニングします。

CUDA_VISIBLE_DEVICES='0,1,2,3' python -u train_softmax.py --network r50 --loss-type 2 --margin-m 0.35 --data-dir ../datasets/faces_ms1m_112x112 --prefix ../model-r50-amsoftmax

(3)。 LMobileNetEでSoftmaxをトレーニングする。

CUDA_VISIBLE_DEVICES='0,1,2,3' python -u train_softmax.py --network m1 --loss-type 0 --data-dir ../datasets/faces_ms1m_112x112 --prefix ../model-m1-softmax

(4)。 上のソフトマックスモデルを三重項ロスで微調整してください。

CUDA_VISIBLE_DEVICES='0,1,2,3' python -u train_softmax.py --network m1 --loss-type 12 --lr 0.005 --mom 0.0 --per-batch-size 150 --data-dir ../datasets/faces_ms1m_112x112 --pretrained ../model-m1-softmax,50 --prefix ../model-m1-triplet

(5)。 VGGFace2データセットでSoftmaxが失われたLDPN107Eネットワークをトレーニングします。

CUDA_VISIBLE_DEVICES='0,1,2,3,4,5,6,7' python -u train_softmax.py --network p107 --loss-type 0 --per-batch-size 64 --data-dir ../datasets/faces_vgg_112x112 --prefix ../model-p107-softmax

(6)。 MS1Mデータセット上のArcFaceでMobileFaceNetネットワークをトレーニングします。

CUDA_VISIBLE_DEVICES='0,1,2,3' python -u train_softmax.py --network y1 --loss-type 4 --margin-s 128 --margin-m 0.5 --per-batch-size 128 --emb-size 128 --data-dir ../datasets/faces_ms1m_112x112 --wd 0.00004 --fc7-wd-mult 10.0 --prefix ../model-mobilefacenet-128
  1. 検証結果。

ArcFaceの損失を伴うMS1MデータセットでトレーニングされたLResNet100E-IRネットワーク:

方法 LFW(%) CFP-FF(%) CFP-FP(%) AgeDB-30(%)
私たちのもの 99.80+ 99.85+ 94.0+ 97.90+

ArcFaceの損失を伴うVGGFace2データセットでトレーニングされたLResNet50E-IRネットワーク:

方法 LFW(%) CFP-FF(%) CFP-FP(%) AgeDB-30(%)
私たちのもの 99.7+ 99.6+ 97.1+ 95.7+

訓練集合重複を除去した後の検証精度を、評価基準に厳密に従うように報告する。 (C) means after cleaning

データセット アイデンティティ イメージ 同意者(C) 画像(C) Acc Acc(C)
LFW 85742 3850179 80995 3586128 99.83 99.81
CFP-FP 85742 3850179 83706 3736338 94.04 94.03
AgeDB-30 85742 3850179 83775 3761329 98.08 97.87

事前トレーニングされたモデル

$INSIGHTFACE/src/eval/verification.pyを使用して、事前に訓練されたすべてのモデルをテストすることができます。

  1. LResNet50E-IR @ BaiduDrive@ GoogleDriveパフォーマンス:
方法 LFW(%) CFP-FF(%) CFP-FP(%) AgeDB-30(%) メガファース(%)
私たちのもの 99.80 99.83 92.74 97.76 97.64
  1. LResNet34E-IR @ BaiduDriveパフォーマンス:
方法 LFW(%) CFP-FF(%) CFP-FP(%) AgeDB-30(%) メガファース(%)
私たちのもの 99.65 99.77 92.12 97.70 96.70

Caffe LResNet50E-IR @ BaiduDrive 、上記MXNetモデルで変換。 パフォーマンス:

方法 LFW(%) CFP-FF(%) CFP-FP(%) AgeDB-30(%) メガファース1M(%)
私たちのもの 99.74 -TBD- -TBD- -TBD- -TBD-

複合マージンの検証結果

目標ロジット値とオリジナルθ関数として合成マージン法を提案した。

COM(θ) = cos(m_1*θ+m_2) - m_3

m1=0.9, m2=0.4, m3=0.15トレーニングの場合は、次のコマンドを実行します。

CUDA_VISIBLE_DEVICES='0,1,2,3' python -u train_softmax.py --network r100 --loss-type 5 --margin-a 0.9 --margin-m 0.4 --margin-b 0.15 --data-dir ../datasets/faces_ms1m_112x112  --prefix ../model-r100
方法 m1 m2 m3 LFW CFP-FP AgeDB-30
W&Fノルムソフトマックス 1 0 0 99.28 88.50 95.13
球面 1.5 0 0 99.76 94.17 97.30
CosineFace 1 0 0.35 99.80 94.4 97.91
ArcFace 1 0.5 0 99.83 94.04 98.08
複合マージン 1.2 0.4 0 99.80 94.08 98.05
複合マージン 1.1 0 0.35 99.81 94.50 98.08
複合マージン 1 0.3 0.2 99.83 94.51 98.13
複合マージン 0.9 0.4 0.15 99.83 94.20 98.16

メガファースのテスト

この部分では、あなたがディレクトリ$INSIGHTFACE_ROOT/src/megaface/いると仮定します。

注:私たちは、facescrubデータセットとMegafaceディストラクターの間に重複するIDがあることを発見しました。これは識別性能に大きな影響を与えます。 このリストは、 $INSIGHTFACE_ROOT/src/megaface/下にリリースされています。

  1. facecrubデータセットとメガグラウンドディストラクターのすべての顔画像を整列させます。 $INSIGHTFACE_ROOT/src/align/ある整列スクリプトを確認してください。
  2. facecrubとmegafaceの両方の画像ファイルを生成する。
python -u gen_megaface.py
  1. 新しい機能ファイルを生成するMegafaceノイズを除去する。
python -u remove_noises.py
  1. メガフェイス開発キットを実行して最終結果を作成します。

512-Dフィーチャー埋め込み

この部分では、 $INSIGHTFACE_ROOT/deploy/ディレクトリにいると仮定しています。 入力された顔画像は、一般に中央が切り取られるべきである。 画像埋め込みネットワークに送信する前に、画像をさらに整列させるために、 MTCNNRNet + ONetを使用します。

  1. 事前に訓練されたモデルを準備する。
  2. モデルを$INSIGHTFACE_ROOT/models/下に置きます。 たとえば、 $INSIGHTFACE_ROOT/models/model-r34-amfます。
  3. テストスクリプト$INSIGHTFACE_ROOT/deploy/test.pyます。

シングルクロップド顔画像(112×112)の場合、テストサーバー(Intel E5-2660 @ 2.00GHz、Tesla M40、 LResNet34E-IR )の合計推論時間はわずか17msです。

サードパーティの再実装

フェイスアライメント

Todo

顔検出

Todo

引用

InsightFaceが研究に役立つことがわかった場合は、以下の関連論文を引用することを検討してください。

@article{deng2018arcface,
title={ArcFace: Additive Angular Margin Loss for Deep Face Recognition},
author={Deng, Jiankang and Guo, Jia and Zafeiriou, Stefanos},
journal={arXiv:1801.07698},
year={2018}
}

接触

[Jia Guo](guojia[at]gmail.com)
[Jiankang Deng](jiankangdeng[at]gmail.com)







-deepinsight
-,

執筆者: