前言
判断两张人脸图片的相似度,学术上叫做人脸对比,实际上是一对一的关系。而常说的人脸识别其实可以算是一个广义的概念,也可以是一对多的关系,即在多张图片中找到哪两个图片中的是相同的人,当然,这种场景也叫做人脸检索。
总地来说,人脸识别大体可以分为三个部分:人脸检测,人脸校正和人脸识别。
常用的方法现在已经比较成熟了,主要分为基于统计的和基于深度学习的方法。
基于深度学习的方法
基于深度学习的方法主要就是使用卷积神经网络了,卷积神经网络的基本原理就是用卷积核作为一个滑动“窗口”在图像矩阵上滑动,将与卷积核相类似的特征放大,然后再进行池化,池化的作用主要就是降低卷积层输出特征向量的规模。经过若干个卷积和池化层,最终可以输出类别,进行向量化表示等。
一些神经网络可以在同一个网络中完成人脸识别过程,可以最终通过全连接层输出人脸的特征,当然也可以在网络中实现人脸对比。深度学习人脸识别的好处就是识别率会很高,缺点就是在CPU条件下运算速度会较慢,需要依靠GPU来加速计算。
基于统计的方法
准确来说,人脸识别方法还有基于先验概率,基于经验等的分类方式,这里将其粗略地归纳在此处,即非深度学习方法的人脸识别传统方法。
此处,将人脸识别过程分为几块讨论。
(1)人脸检测:一般采用haar,HOG特征,结合adaboost和SVM算法以取得较好的效果。
(2)人脸校正:由于人脸识别主要有用的是人脸的轮廓,其肤色等相比之下并不重要,甚至某些因素(如光照)反而会成为干扰因素。人脸校正主要是将不同姿态的人脸进行所谓的“摆正”,也称之为人脸对齐,这样使得输出的人脸特征更具有可比性,这个基本原理是计算机图形学中仿射变换。除此之外,我们前面说过的光照等干扰因素也应该排除掉,故在此处也可以进行光照的归一化。
(3)人脸识别:Haar,Hog,LBP算法本身就是用来提取图像特征的。例如提取人脸的LBP特征,将特征提取出来后可能还需要降维,一般结合PCA主成分分析的方法,也有用LDA算法来处理的。
基于统计的方法好处是在CPU下运算较快,缺点是识别率相对较低,因为特征都是人工首先指定好的,并不像深度学习那样“自主”。
特征对比
当特征都提取出来之后,就可以计算特征之间的差距,度量的方法有:
余弦距离,欧氏距离,马氏距离,皮尔逊相关系数等,对于某些特定的场景还可能是汉明距离~~~
例如google开源的某款人脸识别引擎,就采用了统计和深度学习结合的方法,使用基于统计的方法来定位人脸,使用深度学习来提取人脸特征,这样兼顾了速度和准确率。
值得一提的是,在人脸识别过程之前,有些方法往往还有一些预处理,一般是高斯低通滤波器,主要是用于滤出高斯噪声,还有一些使图像更为平滑的预处理。
总结
开源的人脸识别库也不少,国内比较著名的有中科院山世光教授组的SeetaFace引擎,但是该代码在部署的时候会有些坑,训练方法也是闭源的。
除此之外,比较著名的还有FaceBook的DeepFace、Google的FaceNet、汤晓鸥教授的DeepID等。
人脸识别是机器学习CV方向的一个重要应用,机器学习算法是学习人脸识别的必修课程。
对大数据,机器学习,系统架构等领域感兴趣的,可以学习一下这个课程:《spark机器学习实战》
共同学习,写下你的评论
评论加载中...
作者其他优质文章