人脸识别学习笔记
最近一段时间在学习人脸识别的内容,自己整理了相关的学习笔记构成这篇博客,大致分为以下四个部分来总结:
人脸问题概述
人脸数据集
人脸检测算法
人脸识别算法
一.人脸问题概述 :
1. 人脸识别,指利用分析比较人脸特征信息,包括人脸图像采集、人脸定位、人脸识别以及身份确认查找。人脸识别的困难主要是以下两点:
a. 所有人脸的结构都相似,大家都是一个脸蛋两个眼睛一个鼻子一张嘴。使用计算机来区分人脸个体存在一定难度。
b. 人脸的外形很不稳定,人的脸部可以产生各种表情,不同角度观察人脸图像不同,举个例子我们经常说某人的侧脸很像某个明星(虽然正脸不像)
2. 人脸识别应用:这个不用多说,稍微想想我们平时使用的智能手机现在应该都有个人相册管理功能、购物消费时移动人脸支付、坐高铁时通过人脸识别进站..这些都是生活中普遍的具体应用场景。
3. 人脸识别典型流程
三个步骤:
人脸检测
人脸对齐
人脸特征表示
二. 人脸数据集
构建模型最重要的第一步便是数据集,这里列出人脸识别与检测的两大方向常用到的数据集供参考。
1. 人脸识别数据集:
2. 人脸检测数据集:
三.人脸检测算法
经典人脸检测算法流程分为3个阶段:
基于模板匹配的算法
基于AdaBoost的框架
基于深度学习
1.基于模板匹配的算法:
用一个人脸模板图像与被检测图像中的各个位置进行匹配,确定这个位置处是否有人脸,我们可以将此当作一个二分类问题,即检测图像中是否有人脸。
多角度人脸检测:整个系统由两个神经网络构成,第一个网络用于估计人脸的角度,第二个用于判断是否为人脸。角度估计器输出一个旋转角度,然后用整个角度对检测窗进行旋转,然后用第二个网络对旋转后的图像进行判断,确定是否为人脸。
2.基于AdaBoost的框架:
基于PAC学习理论建立的集成学习,Boost的核心思想是利用多个简单的弱分类器构建出高准确率的强分类器。
3.基于深度学习的人脸检测算法
CNN在精度上超越AdaBoost框架,在此之前,滑动窗口图像分类的计算量巨大,无法做到实时检测,重点介绍Cascade CNN与MTCNN。
a. Cascade CNN
检测流程:
1. 构建多尺度的人脸图像金字塔,12-net密集的扫描整幅图像(不同尺寸)。快速的剔除超过90%的检测窗口。
2. 剩下窗口送入12-calibration-net调整尺寸和位置,使得更靠近潜在的人像图像附近。接着采用非极大值抑制(NMS)合并检测窗口,保留下来的候选检测窗口将会被归一化到24*24作为24-net的输入,进一步剔除近90%的检测窗口。
3. 通过24-calibration-net矫正检测窗口,使用NMS进一步合并减少检测窗口的数量。
4. 通过上述所有层级的检测窗口对应的图像区域归一化到48*48送入48-net得到进一步过滤的人脸候选窗口再NMS。
5. 送入48-calibration-net矫正检测窗口作为最后的输出
论文链接:https://arxiv.org/abs/1508.01292
github链接:https://github.com/Bkmz21/FD-Evaluation
b. MTCNN
检测流程:
P-Net:
按照不同比例缩放照片,形成图片的特征金字塔作为P-Net输入。P-Net主要获得了人脸区域的候选窗口和边界框的回归向量。并用该边界框做回归,对候选窗口进行校准,然后通过NMS来合并高度重叠的候选框。
R-Net
将候选框输入R-Net网络训练,利用边界框的回归值微调候选窗体,再利用NMS去除重叠窗体。
O-Net
类似R-Net,在去除重叠窗口的同时显示五个人脸关键点定位。
代码链接:
https://github.com/kpzhang93/MTCNN_face_detection_alignment
MTCNN同Cascade CNN一样基于cascade的框架,但是降低了模型难度使其更好落地工业界应用。
四.人脸识别算法介绍:
1.人脸识别算法主要分为三个流程:
人脸检测
人脸对齐
人脸特征表示
2.人脸识别研究进展
人脸识别研究进展分为以下三个发展阶段:
1.早期算法:基于几何特征、模板匹配、子空间
2.人工特征+分类器
3.基于深度学习的算法
1.早期算法
线性降维:
a.子空间算法:将人脸图像当作一个高维向量,将其投影到低维空间后,期望得到的低维向量对不同的人具有区分度。
b.PCA与LDA都是线性降维技术。
非线性降维:
人脸在高维空间中的分布是非线性的,我们需要用到非线性降维方法,如:流形和核方法。
流形方法它假设向量点在高维空间中的分布具有某些几何形状,然后在保持这些几何形状约束的前提下将向量投影到低维空间中。
线性降维的缺陷:直接降维普遍存在严重依赖训练集与测试场景问题,泛化能力不足,不具备太多实用价值。
2.人工特征+分类器
这个时期,算法的关键是特征工程,设计出有效区分不同人的特征。后续会有一篇计算机视觉基础知识详细讲解手工特征工程。
3.基于深度学习的人脸识别
CNN+海量人脸图片提取特征替代人工特征设计,介绍三个典型的:
a.Facebook DeepFace:
DeepFace是深度卷积神经网络在人脸识别领域的经典,使用3D模型来解决人脸对齐问题,同时又使用了9层深度神经网络来做人脸特征表示。损失函数为softmax loss,最后通过特征嵌入得到固定长度的人脸特征向量。在LFW数据集上取得97.35%的准确率。
b.Google FaceNet
Google FaceNet提出使用三元组损失函数代替softmax loss。在一个超球空间上进行优化使类内距离更紧凑,类间距离更远,最后得到了一个紧凑的128维人脸特征,使用了Inception模型,参数量较小的同时精度更高,在在LFW数据集上取得99.63%的准确率。这里稍微讲解下三元组损失,根据三张图片组成的三元组计算而来的损失。三元组由Anchor(A)、Negative(N)、Positive(P)组成,三元组损失的学习目标简单理解为靠近P,远离N。即给定一张图片,属于同一个人的图片就是它的P,不属于同一个人的为N。
c.DeepID
DeepID应用于人脸验证两个人脸是否为同一个人,一次会输入两张人脸图片,输出层是sigmoid函数用于输出结果。如下图:
DeepID具备特征可视化效果,可以看出不同人脸提取的特征不一样。
到此就是本篇博客的全部分享内容,感谢您的阅读!
- 点赞
- 收藏
- 关注作者
评论(0)