我们很多沈阳人脸识别的研究者主要解决的是两个问题:1:1的匹配和1:N的识别。
1:1的匹配
给定两张人脸,判断这个是不是同一个人。很多人脸都是正脸,如证件照和人主动配合拍到的正脸。这些在安防领域是广泛应用的。包括破案,判断嫌疑犯的脸是不是同一个人。
1:N的识别。
首先,根据已经获取到的证件照,如库里的1000个人的证件照片。或者是银行支付宝这种的,用户使用APP配合的,如把手机凑近人脸,对准人脸,左移一点,右移点。好对焦OK。抓拍一张。这样建立的人脸底库图片质量很高。然后使用一个高容量的卷积神经网络训练10天,迭代10万次收敛一个模型,分类的准确度达到了99.9%。
然后把训练好的模型部署到业务服务器上,等待用户的正脸,用来做比对。这个时候的业务服务器只要做一个前向传播,输入用户的正脸+已训练好的模型,输出属于训练集的哪个人脸的概率,如果概率太低,就认为不认识,不在这个1000个人里面。如果匹配达到90%,OK。get。
沈阳人脸识别的整个流程,包括人脸检测,人脸矫正,人脸关键点对齐,然后就是卷积神经网络分类了。人跟人长得不一样当然是眼睛鼻子嘴巴了。有的人长得很精致,有的人长得还可以。光看额头是看不出来的。主要是一些关键点的不一样。当关键点对齐后,卷积神经网络就是一个非线性系统,相当于一个复杂的方程,来对他做判断。关键点对齐的图片相当于输入的X自变量,通过一个卷积网络得到一个Y就是标签了。通俗的看就是Y=F(X)。F就是那个卷积神经网络了。
大家看看这个流程,里面很多关键的地方。第一个关键的地方是人脸检测,检测不好就没有后面什么事了。第二个关键点是关键点对齐,对不齐自变量不对,F再有爱情七十二变也没有用。然后就是这个卷积神经网络了。一个很多层的卷积神经网络就是一个变幻莫测高深的非线性系统,我们希望他能像孙悟空一样有七十二变,八戒只有16变估计是AlexNet吧?然后还有火眼金睛。能洞若观火的识人—人脸识别。
前面两个关键点由于比较基础,研究了好多年了。基本都解决了。一个faster-rcnn做人脸检测,一点点侧脸都能检测到了。直接刷了一个权威人脸识别数据集的检测的榜首。前些日子很多人都在研究这个卷积网络,但是resnet来做这个人脸识别后,精度也很高了。
前些日子我敬仰的先辈山世光教授也写了一篇文章讲人脸识别的近况。大家可以移步看看。我觉得写的很好的。
通过上面的分析,感觉沈阳人脸识别的问题解决的差不多了。接下来就是落地实施了。
然后,我们现在要做的人脸识别却跟上面的定义的问题不一样。这也是我觉得科学与工程是两片水域的原因。我始终觉得学术问题都是真实世界问题的简化。
我们现在在做新零售的人脸识别。这个第一要义就是保护用户的隐私。这个我们把它放在头版头条来重视。我们不存用户的任何人像。
其次,你们有没有发现,用户主动配合采集高清照片很烦人的。比如说支付宝的人脸识别,就要我们左移一点,靠近一点。有一次我在南京高铁站进站的时候他们尝试人脸识别进站,结果怎么整一个大妈都硬是进不了站,然后又排队通过人工验票,结果误了火车。她如果学会了人脸识别的原理的话,估计会踮起脚尖靠近人脸识别的摄像头吧,让摄像头拍到清晰人脸照。
我们场所的沈阳人脸识别是被动式的。我们定义被动式的意思是,客户不需要主动配合人脸识别摄像头。我们的识别对客户是无感的。客户在自然活动的过程中,我们就对他进行了一定程度上的识别。
这样问题的难点主要有以下两点:1、我们的图片质量很低,是不清晰的人脸照。2、我们没有事先建立底库,全部是现学现卖,我们不没有用户的证件照,也不存用户任何头像。我们是被动式入库。第一次发现客户的脸,就入库,然后再发现客户的脸后,跟已有的库比对一下,发现没有,就给他新建一个库。
想想还是蛮难的。然后我们还是解决了。搞的一般般,还凑合吧。先凑合着用。给大家看看效果图。
这些都是程序运行时候的中间图片,程序运行完后所有图片都删除了的。
抓到一个有遮挡的侧脸,把他入库了。给他face0012 的ID。
等下看到正脸了,也能识别。
那么问题来了。人脸质量不高,太偏的侧脸或者太低头的怎么办。OK。我们有人脸质量检测评估算法,再也不用担心这个问题了。
质量不高,检测出来了不给赋ID。