开头先把论文和开源项目地址放一下: 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)到呢?" 巧了,下面就为您讲解.

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

环境需求: Linux

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一下.

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

训练数据集下载和说明:

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

文件列表:

faces_ms1m_112x112/

train.idx

train.rec

property

lfw.bin

cfp_ff.bin

cfp_fp.bin

agedb_30.bin

其中 train.idx和 train.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.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.

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

  1. python画漫画_漫画:我用深度学习框架画下女朋友最美的脸

    原标题:漫画:我用深度学习框架画下女朋友最美的脸 这不,又一个程序员为爱变身灵魂画手,看得我都想学画画了. 阿华是幸运的,因为他找到了对的方法,事半功倍,最终有情人终成眷属.这也得益于 PyTorch ...

  2. @property python知乎_知乎某处XSS+刷粉超详细漏洞技术分析

    我觉得十分经典的一个漏洞,和大家分享一下~ 好久没法前端漏洞分析了,这次来一个. 将输入的信息传入URI参数,解码以后赋值与location.href.明显可以利用JavaScript:伪协议执行js ...

  3. Python 中的可执行对象 eval,exec 和 compile与其在深度学习训练中的应用实例

    Python 中的可执行对象 eval,exec 和 compile 与其在深度学习训练中的应用实例 eval 计算指定表达式的值.也就是说它要执行的python代码只能是单个表达式(注意eval不支 ...

  4. 深度学习狗图片_狗品种分类的深度学习

    深度学习狗图片 深度学习 (Deep Learning) Stuck behind the paywall? Click here to read the full story with my fri ...

  5. Deep Learning with Python 读书笔记6.26 I 什么是深度学习

    我感觉这样记录,对于我来说挺好的.因为我看两端对齐的语句容易走神,这样记录阅读的话,就很少出现之前的情况. 我写的初衷,也是自己来看,所以感觉写的不好的,请保留下意见,谢谢. 里面的每一个字我都看过, ...

  6. python barrier option pricing_Python王牌加速库:深度学习下的障碍期权定价!

    蒙特卡罗模拟需要数以百万计的路径来得到精确的答案,这需要大量的计算.Ryan等人得研究表明,可以训练深度学习模型对衍生品进行估值.深度学习模型是准确和快速的,能够产生比传统模型快一百万倍的估值.在今天 ...

  7. 的训练过程_最全深度学习训练过程可视化工具(附github源码)

    点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 Datawhale干货 作者:Edison_G,来源:计算机视觉研究院编辑丨极市平台. ...

  8. 怎么学python知乎_你们都是怎么学 Python 的?

    自学确实是比较难得,没有一个好的规划,好的学习路线图,你不会知道自己下一步该怎么办. 今天我就帮你来解决,分享2020年黑马程序员Python学习路线图,包含学习路线图,学习视频,学习工具,你都可以找 ...

  9. 风控建模 python 知乎_风控建模基本要求及面试问题小结

    (本文是写给风控入门同学的建议!) 一 准备工作 根据核心职业CD法则,找工作前,你得先清楚自己有什么,自己要什么:面试单位有什么,面试单位要什么.就笔者近一年的学习及工作经验总结而言: 科班同学,最 ...

最新文章

  1. 用python解“混合类型数据格式输入”题
  2. jQuery的UI框架 Liger UI
  3. [转]/boot/grub/grub.conf 内容诠释
  4. java 内存屏障类型_Java内存模型精讲
  5. 比较linux的桌面环境的使用和异同?_深度UI + Ubuntu系统,堪称最强最美Linux发行版!你敢升级吗?...
  6. 那些年学习Linux,你被坑过的故障集合?
  7. jqgrid 固定列宽度_jqGrid 设置列宽
  8. feign调用https接口_SpringBoot 2.0 开发案例之整合HTTP客户端Feign
  9. matlab在化学中的应用举例,MATLAB在化学中的应用
  10. QT installs的使用,编译时拷贝文件
  11. 【保姆级教学】用Java开发俄罗斯方块小游戏_Java练手项目_巩固JavaSE基础_Java小游戏
  12. bootstrap table表头列名转行
  13. 2022年必看的18个HR面面试题是这些【值得收藏】
  14. eclipse配置python开发环境_Eclipse配置Python的环境
  15. 文件下载到本地的几种方法
  16. 分享我的2010年博客阅读列表
  17. PDF文档是什么,如何修改PDF文档
  18. 北海康成上市首日破发,药明生物等基石投资人合计亏损1.26亿港元
  19. Javascript中的8种常见数据结构(建议收藏)
  20. openssl ca(签署和自建CA)

热门文章

  1. 我发过很多脾气,从没落得半点好处
  2. 【HPE】3D HPE调研
  3. H5U PLC本地脉冲轴和本地编码器轴测试
  4. Canvas如何设置一个渐变背景(支持从纯色切换到渐变,从渐变又切换到纯色)
  5. android消息推送标准,标准统一 安卓告别垃圾消息推送
  6. QT 秒/毫秒 转 时分秒
  7. 【第十一课】UAV倾斜摄影测量三维模型修复教程——Meshmixer
  8. Substrate 技术及生态6月大事记 | Polkadot Decoded 圆满落幕,黑客松获胜项目为生态注入新生力量
  9. 利用程序计算2+22+222+2222+22222的和
  10. 偷偷教一招提高网速!bond 0 配置法门!