码字不易,转载请注明出处!

代码放于github:https://github.com/vincentwei0919/insightface_for_face_recognition
训练权重:
链接:https://pan.baidu.com/s/1C7aDcE-IDzxPbvNy747Ybw
https://pan.baidu.com/s/1BKYfcB2wsnPBttUKhOwiSA
提取码:2jrh e5tq

说明:代码并非都是使用源码,只是将其中有用的部分提取出来整理而成,并且将数据制作源码face2rec2.py更换为im2rec.py文件(https://github.com/apache/incubator-mxnet/blob/master/tools/im2rec.py ),注意下就好!

初衷
现在的各种应用上面都使用了人脸识别技术,但是人脸识别看似简单的问题,其实所覆盖的知识面还是比较广泛的。正好有机会做了这方面的工作,因此将整个项目流程和自己的思路进行一下梳理。

本文只是一个简单的应用,仅仅是从业务需求上面做一个demo,并没有可能做到一个什么样的soft,不然我就可以发文章了o(╯□╰)o。所以很牛的大神请勿喷,给点正能量鼓励一下,不懂的小白正好可以借机玩一玩这个东西。

因为整个流程会分为几个阶段,所以我也将这几个阶段进行了拆分,一步一步来。
代码回头会放到github上面,有兴趣的可以试一下!

人脸识别介绍
这部分内容其实属于比较旧的内容了,网上各种博客、论文,一搜一大把。在此我就放上一篇人脸识别介绍的博客吧:http://www.elecfans.com/d/709424.html 具体内容我就不再介绍,相信要做这个任务,前面的功夫其实也做的差不多了。如果没有,还是请做点准备工作,毕竟没有背景知识的情况下搞这个,会很快懵逼的。尤其是各大论文,开源的多读几遍,多看看代码。
大致流程是这样的:

准备工作
安装MXNet
到github上面clone作者的代码:https://github.com/deepinsight/insightface
准备数据,指的是自己的数据
制作训练、验证数据集
开始调参,训练测试
制作人脸特征库,实际使用测试。
简单说明
前三步我只是大致说一下,因为这部分内容我只干了第二步,框架和数据都有了。
1. 安装MXNet
这部分内容忘了,上网查看下教程,应该注意的是:一定得知道自己的CUDA版本,根据版本来安装。虽然insightface是有tensorflow、torch、caffe的实现,但是我觉得mxnet版本是最全的,从数据集制作到训练到验证,每个步骤都有相应的代码。当然,我也不会MXNet,既然要用这个框架做,那么是需要遇到问题经常谷歌的,里面的部分函数不理解很正常,多查,多做代码注释。没有个几天的功夫,是很难了解每个步骤具体在干嘛的,所以不要怕。

2. github上clone代码
项目地址:https://github.com/deepinsight/insightface
这个很容易,有github桌面版的就直接在desktop里面克隆下来,没有的就直接download其.zip文件就好了,或者习惯命令行的直接git就好,作者github的readme.md里面有教。
这里就大致扫一下每个文件夹下的内容吧,具体怎么用,还是根据流程,一步步来。

在代码下载好了之后,是一个“insightface”文件夹,里面是这样的:

 

 

我们在实际使用中,主要用到了“src”、“models”、“datasets”、“deploy”几个,别的根据需要自己探索。

3. 准备数据
这里的数据主要是指自己的数据,因为insightface使用的数据集是VGG2(8000+id的300W图像)和MS-Celeb-1M(8.5W id的380W图像),显然是大数据了,并且在LFW、CFP、AgeDB上达到的效果都很好。如果仅仅是想体验一下模型的效果,或者仅仅是用来学习,那么就直接用作者提供的就好了。
然而,其实我们更多的是想用自己的数据实现一个什么样的demo或者实现一个类似监控领导是否过来这样的工作,更重要的是,比赛用的数据集大多是西方人,而西方人与我们东方人在骨骼、皮肤等方面还是有很大的区别的,所以直接拿来用能够实现,但是不一定表现很好,具体还是要根据自己的任务来做。arcface的作者也说了,对于一个模型的好坏影响最大的三个因素之间的排序是:数据>模型>损失,首先还是得有大量的数据的,毕竟深度学习就是数据学习;有了数据之后怎么设计模型,采用什么算法,这是具体策略的问题。但有时候我们受数据量所限,没办法只能去研究算法了。所以我们当然得用自己搜集的数据。并且我建议自己做下数据,熟悉下整套流程,还是能学习到很多的。

说起收集图像数据,脑海里其实就有一个词出现了——“爬虫”。爬虫涉及到的知识其实还是很多的,网上也有很多的教程,但是真要做好这方面的工作,还得花一定的功夫的,不然怎么会出现叫做“爬虫工程师”的岗位?然而,对于我来讲,我是有数据的(不要问我哪里来的!hiahia)。这里,我也是从网上搬了一个简易的爬虫,https://github.com/vincentwei0919/crawler ,大体能够实现一定的爬取数据的工作,因为我对这块没有深入挖,所以很多东西我也改不了,就知道能用(好尴尬)。不过讲真,虽然大公司也用的是一些公开的数据集,那是因为可能做论文来讲,肯定是在基本的benchmark上面做,不然怎么对比。但是从业务角度来讲,还是需要自己的数据的,这样才更贴合实际应用场景。只不过不太会让算法工程师去找,有专门的数据获取团队在干这样的事情,算法这块仅仅关心怎么用就好了。如果因为某种原因,恰好没有这样的团队,那就得自己做了。而爬虫是绕不开的,所以有必要有目的的积累下这方面的东西,往下多学学,对于成长没坏处(比如说我就准备学一下)。

后面我将按照以下顺序进行总结。

数据集制作
模型训练
模型验证
模型使用

————————————————
版权声明:本文为CSDN博主「hanjiangxue_wei」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/hanjiangxue_wei/article/details/86566185