人脸识别简介

最近在公司做demo的时候,接触了人脸识别的相关知识。考虑到人脸识别有相当广泛的应用场景,比如各种监控摄像,人脸门禁,新闻稿打马赛克等。人脸识别也是各类美颜滤镜,表情动画的基础。

于是就额外把相关的知识学习了一下,并整理了整理。

首先介绍传统的人脸识别技术——提取特征+分类。通常使用算法提取人脸特征并使用机器学习进行分类,比如HOG+SVM,DPM+LatentSVM。简单可以分为两步:

1. 对图片区域提取人脸特征

2. 对提取到的特征进行是人脸/不是人脸的分类。

这里,重点介绍一下OpenCV中使用的人脸检测。OpenCV中人脸检测为Haar分类器 = 类Haar特征 + 积分图方法 + AdaBoost + 级联。

类Haar特征:Haar-like矩形特征放到人脸区域上,将白色区域的像素和减去黑色区域的像素和的值称为人脸特征值。目的就是把人脸特征量化,以区分人脸和非人脸。

积分图方法:积分图是只遍历一次图像就可以求出图像中所有区域像素和的快速算法,大大的提高了图像特征值计算的效率,从而满足实时检测的需求。

AdaBoost:训练弱分类器成为最优弱分类器。然后,让所有弱分类器投票,再对投票结果按照弱分类器的错误率加权求和,得出最终的强分类器。从宏观的局外的角度看,整个算法就是一个弱分类器从孵化到得出强分类器的过程。

级联:一般情况下,高检测率会导致高误识率,较小的误识率意味着低检测率。级联强分类器的策略是,将若干个强分类器由简单到复杂排列,从而在提高强分类器检测率的同时降低误识率。

随着这些年来深度学习的发展,人们开始意识到可以把特征提取这一关键步骤将由神经网络替代。Ross B. Girshick在论文《Rich feature hierarchies for accurate object detection and semantic segmentation》中提出的RCNN系列,成功的将CNN带入了目标检测领域,人脸识别当然也成为了其中一个重要的应用场景。

RCNN算法的核心思想就是对每个区域通过CNN提取特征,然后接上一个分类器预测这个区域包含一个感兴趣对象的置信度。算法有如下四个步骤:

1.候选区域生成: 一张图像生成1K~2K个候选区域 (采用Selective Search 方法)

2.特征提取: 对每个候选区域,使用深度卷积网络提取特征 (CNN)

3.类别判断: 特征送入每一类的SVM 分类器,判别是否属于该类

4.位置精修: 使用回归器精细修正候选框位置

随后,改进型算法Fast R-CNN提出了ROI层,取消了crop/wrap的操作。将图片整张送入网络,完成初步的特征提取后才考虑候选区域,极大提高了效率。并将图片分类(SVM)和位置调整(regression)都改为用CNN实现。

再随后,改进型算法Faster R-CNN是一个完全端到端的模型,将所有的运算都交由CNN完成,充分利用GPU,不再需要去使用CPU去做一些预处理。

最后,介绍一下我们目前已经在使用,无论是facenet数据集测试还是线上实际体验效果最好的级联CNN网络。

其基本思想如下:

1.最初阶段的网络可以比较简单,判别阈值设得较为宽松。这样就可以在保持较高召回率的同时排除掉大量的非人脸窗口;

2.最后阶段网络为了保证足够的性能,因此一般设计的比较复杂。但由于只需要处理前面剩下的窗口,因此可以保证足够的效率;

3.级联的思想可以帮助我们去组合利用性能较差的分类器,同时又可以获得一定的效率保证。

具体实现上,我们选用MTCNN的实现。MTCNN的核心想法也是使用级联架构来整合多任务卷积神经网络学习的问题。

第一阶段目标是使用浅层的CNN快速产生候选窗体。这层最大的特点是快速。

第二阶段通过更复杂的CNN精炼候选窗体,丢弃大量的重叠窗体。第二阶段加入了全连接层。

第三阶段,使用更加强大的CNN,实现候选窗体去留,同时显示五个面部关键点定位。

人们最早一直在探索人脸特征的表达方式,从强特征定义+分类到弱特征定义+级联分类。随着深度学习的崛起,特征提取这一重大问题交给了神经网络处理,人脸识别的准确度一下子上了一个新的台阶。这些年,综合神经网络提取特征和级联分类的思想,达到了速率与准确率的新高度。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180621B0E2EY00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

同媒体快讯

扫码关注云+社区

领取腾讯云代金券