mxnet+insightface搭建

mxnet+insightface框架搭建

1. 安装 python2

insightface使用python2.7(2010年1月就退役了emmm),安装anaconda2:

$ wget https://repo.anaconda.com/archive/Anaconda2-2019.03-Linux-x86_64.sh
$ sh Anaconda2-2019.03-Linux-x86_64.sh

之后一路回车安装成功,原来有anaconda3还想直接用的就改一下bashrc

接下来开始按官方教程走,准备mxnet和insightface

2. 安装 mxnet

使用阿里云境像安装mxnet,速度很快

$ pip install mxnet-cu90 -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com

期间说少个什么依赖,“tables 3.5.1 requires mock>=2.0, which is not installed.”,理论上没什么影响,还是装了吧

$ pip install mock==2.0.0 -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com

3. 克隆insightface仓库到本地

$ git clone --recursive https://github.com/deepinsight/insightface.git

然后去datasetzoo准备一个训练集

MS1M-ArcFace (85K ids/5.8M images) [5,7] (Recommend)

解压后放到insight/datasets目录下,目录结构如下

datasets/faces_emore/
       train.idx
       train.rec
       property
       lfw.bin
       cfp_fp.bin
       agedb_30.bin

4. 基本配置

进入insightface/recognition/目录

$ cd recognition

加两个CPU硬件相关的宏定义:

$ export MXNET_CPU_WORKER_NTHREADS=24
$ export MXNET_ENGINE_TYPE=ThreadedEnginePerDevice

这个目录下,我们会看到一个内容十分"caffe-like"的config文件:

sample_config.py

拷一份重命名为config.py,按照自己的需求修改内容(比如数据集路径之类的):

cp sample_config.py config.py
vim config.py # edit dataset path etc..

5. 试运行

以下实例原作者是运行在 Tesla P40 GPU上的:

5.1 训练

(1) Train ArcFace with LResNet100E-IR.

四张卡跑,如果实际卡不够就改CUDA_VISIBLE_DEVICES,一张卡就CUDA_VISIBLE_DEVICES=‘0’:

$ CUDA_VISIBLE_DEVICES='0,1,2,3' python -u train.py --network r100 --loss arcface --dataset emore

每2000个batch输出一次LFW、CFP-FP、AgeDB-30的验证结果(config.py中默认设置的),该模型在LFW上结果99.80%+,MegaFace上98.3%+

其它同理

注意,这里一开始运行,说还缺easydict和cv2包,所以要先装这两个包再开始训练:

$ pip install easydict -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
$ pip install opencv-python -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
$ CUDA_VISIBLE_DEVICES='0,1,2,3' python -u train.py --network r100 --loss arcface --dataset emore

开始训练,每2000个batch做一次验证输出结果:
在这里插入图片描述

实测原封不动运行这个实验(batch size = per_batch_size(128) * gpu_nums(4) = 512)要75G左右的显存(如下图),卡不够的话还是得根据实际情况调整batch size,1080 ti 一张卡最多只能设置per_batch_size = 64
在这里插入图片描述
(2) Train CosineFace with LResNet50E-IR.

$ CUDA_VISIBLE_DEVICES='0,1,2,3' python -u train.py --network r50 --loss cosface --dataset emore

(3) Train Softmax with LMobileNet-GAP.

$ CUDA_VISIBLE_DEVICES='0,1,2,3' python -u train.py --network m1 --loss softmax --dataset emore

(4) Fine-turn the above Softmax model with Triplet loss.

$ CUDA_VISIBLE_DEVICES='0,1,2,3' python -u train.py --network m1 --loss triplet --lr 0.005 --pretrained ./models/m1-softmax-emore,1

5.2 验证

原作者基于MS1M-Arcface数据集的带ArcFace loss的LResNet100E-IR网络验证结果如下:

MethodLFW(%)CFP-FP(%)AgeDB-30(%)
原文99.80+98.0+98.20+
实际验证(迭代307K次384batch_size,忘记停了,相当于230K次512batch_size,原文是160k次512batch_szie)0.99817±0.002730.98529±0.005150.98067±0.00831

测试预训练模型

可以用 insightface/src/eval/verification.py 来验证、测试预训练模型

Model-Zoo里也提供了一些预训练模型

在MegaFace上测试

在insightface/Evaluation/megaface/测试,该目录下README提供了所需要的数据

IJBC测试

insightface/Evaluation/IJB/

5.3 特征提取

进入deploy目录:

$ cd deploy
  1. 准备一个训练好的模型
  2. 把模型放到insightface/models目录下,比如insightface/models/model-r100-ii
  3. 运行测试脚本insightface/deploy/test.py(这个脚本内容演示了一下怎么提取特征和计算相似度,批量生成特征的自己改一个就行)

对于单裁剪人脸图(112x112),原作者的测试服务器上总推断时间只有17ms (Intel E5-2660 @ 2.00GHz, Tesla M40, LResNet34E-IR)

5.4 人脸对齐

详见Menpo Benchmark 和 Dense U-Net

5.5 人脸检测

详见RetinaFace


insightface github仓库地址


版权声明:本文为weixin_44005915原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。