使用Mxnet进行图像深度学习训练工具 InsightFace - 使用篇, 如何一键刷分LFW 99.80%, MegaFace 98%. - 知乎

标签: | 发表时间:2019-03-16 10:39 | 作者:
出处:https://zhuanlan.zhihu.com

开头先把论文和开源项目地址放一下:

Additive Angular Margin Loss for Deep Face Recognition​arxiv.org
deepinsight/insightface​github.com 图标


InsightFace库是对我们上述论文中提出算法的开源实现. 其中不仅仅包括我们自己的算法, 也包括其他常见的人脸loss, 比如Softmax, SphereFace, AMSoftmax, CosFace, Triplet Loss等等. 除了代码实现以外, 我们还提供了打包对齐好的人脸训练数据供下载, 免除了一大堆数据准备的工作. 研究人员可以专注于人脸识别的算法实验, 工业界也可以方便的根据自己需求训练或者拿我们提供的高精度预训练模型产品化.

目前暂列MegaFace榜单第一名:

之后会单独开一篇谈谈我对MegaFace这个评测集的看法, 不是今天的主题.

总之, 用了我们InsightFace的人, 一日之内会武功突飞猛进,打通任督二脉,吃饭香,睡得好,最后浑身血管。。。可能有朋友要问了:"那么。。在哪里才能买(yong)到呢?" 巧了,下面就为您讲解.

此外今天我们也暂时不提具体算法细节, 先教大家如何使用我们这个开源项目来做人脸方面的研究和落地项目.


环境需求:

  1. Linux
  2. Python 2.7


环境搭建:

1.安装MXNet:

1.1 从pip安装:

        pip install -U six scipy scikit-learn opencv-python scikit-image easydict mxnet-cu80

1.2 编译安装(以干净的Centos 7为例):

        yum install epel-release
yum install git python-devel.x86_64 openblas-devel.x86_64 libSM opencv-devel python-pip
pip install -U six scipy scikit-learn opencv-python scikit-image easydict
git clone --recursive https://github.com/apache/incubator-mxnet.git mxnet; cd mxnet
make -j4 USE_OPENCV=1 USE_BLAS=openblas USE_CUDA=1 USE_CUDA_PATH=/usr/local/cuda USE_CUDNN=1 ADD_CFLAGS=-I/usr/include/openblas ADD_LDFLAGS=-L/usr/lib64
cd python; pip install -e .

2. 安装/下载InsightFace

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

3. 给insightface项目Star一下.

至此, 代码环境搭建完毕.


训练数据集下载和说明:

Refine-MS1M: https://pan.baidu.com/s/1nxmSCch(推荐)

VGG2: https://pan.baidu.com/s/1c3KeLzy

所有数据集均用MXNet IndexedRecord存储, 加速读取性能.

文件列表:

        faces_ms1m_112x112/
         train.idx
         train.rec
         property
         lfw.bin
         cfp_ff.bin
         cfp_fp.bin
         agedb_30.bin

其中 train.idxtrain.rec分别是数据偏移索引和数据本身的文件. property代表数据集属性. 其余4个 bin文件是验证集,

MXNet IndexedRecord是一种类kv结构. key是一个整数, 每个value代表数据并可包含一个header记录数据的标签.

InsightFace Record格式:

        key:0,  value_header => [identities_key_start, identities_key_end]
key∈[1, identities_key_start), value_header => [identity_label], 
                               value_content => [face_image]
key∈[identities_key_start, identities_key_end), 
         value_header => [identity_key_start, identity_key_end]

这样的格式既可以支持Softmax这种类型的训练(不需要按人物分组), 又能支持类Triplet Loss的训练(通过id->images映射)

具体生成rec文件的命令可参考 src/data/face2rec2.py

所有人脸图片均用MTCNN检测5点并相似变换到112x112大小.

训练过程:

预备工作,设定一些MXNet相关环境变量保证性能:

        export MXNET_CPU_WORKER_NTHREADS=24
export MXNET_ENGINE_TYPE=ThreadedEnginePerDevice


接下来举几个例子说明,

1. 性价比最高的模型:

        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

--network r100代表使用 LResNet100-IR( L-IR是默认选项, 也可修改).

--loss-type 4--margin-m 0.5代表使用我们的additive angular loss.

--data-dir指定训练数据目录.

--prefix指定模型输出目录.

默认的每张卡batch-size为128, 可通过 --per-batch-size修改.

默认每2000个iterators输出一次验证集结果, 包括 lfw, cfp, agedb-30. 可通过 --verbose修改.

硬件需求: 4*P40. 如果只有12G卡的话, 参考issue 32.

这个模型可以完美复现我们提交的MegaFace结果, 并且 lfw能达到99.81或99.83.

(提供的训练数据集已经剔除了和FaceScrub重复的人物, 如果不剔除的话, MegaFace达到98.5左右都是可能的. 同时在另一个剔除LFW重复人物的实验上, LFW精度并没有降低)


2.训练MobileNetV1,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

除了 --network m1--loss-type 0以外和上面的例子基本没有差别. --loss-type 0代表Softmax Loss. m1代表MobileNetV1. 我们另外还支持InceptionResNetV2, DPN, DenseNet, 等等.


3.Fine-tuning Triplet Loss, 在上述模型的基础上.

        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

注意一下后面的参数(lr, weight decay, momentum等). --loss-type 12代表Triplet Loss. 另外我们已经把semi-hard mining放入GPU计算, 极大加快了训练速度.

模型测试和部署:


0. 预训练模型下载:

0.1 LResNet50-IR: https://pan.baidu.com/s/1mj6X7MKLFW: 99.80

0.2 LResNet34-IR: https://pan.baidu.com/s/1jKahEXwLFW: 99.65. 单张图模型推理时间(包括对齐): 17ms


1. Verification Test.

lfw, cfp, agedb-30这几项已经在训练时不断被测试了. 如果想用训好的模型测试这几项得分的话, 可参考 src/eval/verification.py.


2.MegaFace Test.

参考 src/megaface/目录, 分三步走: 一、对齐FaceScrub和MegaFace distractors. 二、生成对应feature( src/megaface/gen_megaface.py), 三、运行megaface development kit.


3.模型部署.

我们提供了一些脚本, 可参考做模型部署. 值得注意的是输入的图片不需要被对齐, 只需要检测人脸后裁剪就可以.

3.1 进入 deploy/文件夹.

3.2 训练或下载训好的模型.

3.3 参考 deploy/test.py输入一张检测并切割好的面部照片, 返回512维的embedding. 利用上述的 LResNet34-IR模型, 单次推理仅需17毫秒(Intel E5-2660 @ 2.00GHz, Tesla M40).


结语:

希望有更多人的人来用我们这个库, 也欢迎大家来贡献代码. 有问题随时留言或者在github上提issue.

相关 [mxnet 图像 深度学习] 推荐:

使用Mxnet进行图像深度学习训练工具 InsightFace - 使用篇, 如何一键刷分LFW 99.80%, MegaFace 98%. - 知乎

- -
开头先把论文和开源项目地址放一下:. InsightFace库是对我们上述论文中提出算法的开源实现. 其中不仅仅包括我们自己的算法, 也包括其他常见的人脸loss, 比如Softmax, SphereFace, AMSoftmax, CosFace, Triplet Loss等等. 除了代码实现以外, 我们还提供了打包对齐好的人脸训练数据供下载, 免除了一大堆数据准备的工作.

雅虎开源分类色情图像的深度学习模型

- - Solidot
雅虎在BSD 2条款许可证下开源了它用于分类NSFW图像的深度学习模型Open nsfw model,源代码发布在GitHub上. 雅虎的模型只针对一类NSFW图像:色情图像,不涉及NSFW的卡通和素描等. 雅虎称,目前还没有识别NSFW图像的开源模型或算法,他们本着合作的精神以及致力于推动NSFW图像识别技术的进步而决定开源它开发的模型.

mxnet一键式训练自己的数据 - imistyrain/mxnet-oneclick: use mxnet to train your own data with just oneclick

- -
mxnet一键式训练自己的数据. mxnet应用到工业项目大概包括收集数据、转换数据、定义模型、训练模型和评估模型等几个步骤,这里以常见的车牌字符识别为例讲解怎么用mxnet一键式训练自己的数据. 现在已经非常简单,装好python和pip后一句代码就能搞定:. 如果需要从源码编译安装,可以参照. 官网和[mxnet VS2015编译.pdf](mxnet VS2015编译.pdf).

TensorFlow、MXNet、PaddlePaddle 三个开源库对比

- - IT瘾-dev
【转载请注明出处】 chenrudan.github.io. 从深度学习开始流行,到深度学习框架的迭代,到各类实际应用的出现,不过短短几年时间. 其实发展到现在,各个框架对自己的定位都不相同,硬要说哪个框架最好没什么必要,结合自身需求找到合适的用就够了(实验室的服务器不太方便拿来折腾,本文就不比较运算速度了,可以参考[4][5]).

图像识别VPU——易用的嵌入式AI支持深度学习平台介绍-桐烨科技-踏上文明的征程-51CTO博客

- -
公司玩了大半年的嵌入式AI平台,现在产品进入量产模式,也接触了很多嵌入式方案,有了一些心得体会,本人不才,在这里介绍一下一款简单易用的嵌入式AI方案——Movidius Myriad 2 VPU(MA2450) 和 Myriad X VPU(MA2485). 这里本人重点提示:简单易用的嵌入式AI.

图像识别——ubuntu16.04 movidius VPU NCSDK深度学习环境搭建-桐烨科技-踏上文明的征程-51CTO博客

- -
这篇文章本人不打算长篇累牍去写,结合以前写的文章,从软件角度去写一些点滴,伴随人工智能AI的火爆,现在图像识别算法也异常火爆,上一篇文章提到Intel movidius Myriad 2 VPU(MA2450)是一种简单易用的深度学习平台,说到简单易用,但很多网友和客户还是一头雾水,本人还是觉得在这里班门弄釜一下,简单写一些,在ubuntu环境下搭建深度学习开发环境.

深度学习二三事

- - FreeBuf.COM | 关注黑客与极客
我知道博客标题中使用否定词很奇怪,但是前几天有一波讨论正好相应于我正在思考的一些问题. 这一切开始于 Jeff Leek 发表的 一篇有关说明在小样本范围内使用深度学习的文章. 要言之,他认为当样本较小时(生物领域中属于常见现象),带有少许参数的线性模型甚至比带有少量层和隐藏单元的深度网络性能更优.

关于深度学习——Deep Learning

- - 互联网旁观者
转载自: http://blog.csdn.net/abcjennifer/article/details/7826917. Deep Learning是机器学习中一个非常接近AI的领域,其动机在于建立、模拟人脑进行分析学习的神经网络,最近研究了机器学习中一些深度学习的相关知识,本文给出一些很有用的资料和心得.

深度学习的本质探究??

- - ITeye博客
原创 2016-10-07 朱洁 . 标志型事件,阿尔法围棋(AlphaGo)战胜李世石. alphago是一款围棋人工智能程序,由谷歌(Google)旗下DeepMind公司的戴维·西尔弗、艾佳·黄和戴密斯·哈萨比斯与他们的团队开发,这个程序利用“价值网络”去计算局面,用“策略网络”去选择下子. 2015年10月阿尔法围棋以5:0完胜欧洲围棋冠军、职业二段选手樊麾;2016年3月对战世界围棋冠军、职业九段选手李世石,并以4:1的总比分获胜.

深度学习利器:TensorFlow实战

- - 孟飞阳的博客
深度学习及TensorFlow简介. 深度学习目前已经被应用到图像识别,语音识别,自然语言处理,机器翻译等场景并取得了很好的行业应用效果. 至今已有数种深度学习框架,如TensorFlow、Caffe、Theano、Torch、MXNet,这些框架都能够支持深度神经网络、卷积神经网络、深度信念网络和递归神经网络等模型.