学习
实践
活动
专区
工具
TVP
写文章

白话机器学习之人脸识别原理简介篇

判断两张人脸图片的相似度,学术上叫做人脸对比,实际上是一对一的关系。而人脸识别一般就是一对多的关系,即在多张图片中找到哪两个图片中的是相同的人。

总的来说,人脸识别主要分为三个部分:人脸检测,人脸校正和人脸识别。

常用的方法现在已经比较成熟了,主要分为基于统计的和基于深度学习的两种方法。

基于深度学习的:

基于深度学习的主要就是卷积神经网络了,卷积神经网络的基本原理就是用卷积核作为一个滑动“窗口”在图像矩阵上去滑动,将与卷积核相类似的特征放大,然后再进行池化,池化的作用主要就是降低卷积层输出特征向量的规模,防止过拟合,然后再经过若干个卷积和池化层,最终利用SoftMax等整理后输出结果。

大规模神经网络可以实现检测,校正和识别三个部分,可以最终直接输出人脸的特征,好处就是识别率很高很高,缺点就是在CPU条件下运算速度会较慢。

基于统计的方法:

(1)人脸检测:haar,HOG特征,一般结合adaboost算法以取得较好的运算效果

(2)人脸校正:由于人脸识别主要有用的是人脸的轮廓,其肤色,光照等等相比之下并不重要,而人脸校正主要是将不同姿态的人脸进行所谓的“摆正”,也称之为人脸对齐,这样使得输出的人脸特征具有可比性,这个基本原理是计算机图形学中仿射变换。这部分现在一般用卷积神经网络处理得就比较好了。

(3)人脸识别:Haar,Hog,LBP算法本身就是用来提取特征的,一般对于人脸用LBP特征比较合适,将特征提取出来后可能还需要降维,一般结合PCA主成分分析的方法。也有用LDA算法来处理的。

基于统计的方法好处是在CPU下运算较快,缺点是识别率相对较低,因为特征都是人工首先指定好的,并不像深度学习那样“自主”。

当特征都提取出来之后,就可以计算特征之间的差距了,这是最简单的,距离计算的方法有:

余弦距离,欧氏距离,马氏距离,皮尔逊相关系数,对于某些特定的场景还可能是汉明距离~~~

所以,对于google开源的一款人脸识别引擎,就事采用了统计和深度学习结合的方法,使用基于统计的方法来定位人脸,使用深度学习来提取人脸特征,这样兼顾了速度和准确率。

值得一提的是,在人脸识别过程之前,有些方法往往还有一些预处理,一般是高斯低通滤波器,主要是用于滤出高斯噪声,还有一些使图像更为平滑的预处理。

开源库:

开源的人脸识别库也不少,国内比较著名的有中科院山世光教授组的SeetaFace引擎,但是该代码在部署的时候会有些小坑,一般认为是人脸识别开源出来的一股清流。

除此之外,比较著名的还有FaceBook的DeepFace、Google的FaceNet、汤晓鸥教授的DeepID,以及github上的一系列开源产品(包括算法)。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180311A0MXVZ00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

关注

腾讯云开发者公众号
10元无门槛代金券
洞察腾讯核心技术
剖析业界实践案例
腾讯云开发者公众号二维码

扫码关注腾讯云开发者

领取腾讯云代金券