【模板匹配】
- 早期 的人脸检测算法使用了 模板匹配技术,即用一个 人脸模板图像 与 被检测图像 中的 各个位置 进行匹配,确定这个位置是否有人脸,即针对图像中某个区域进行 人脸-非人脸 二分类的判别
- 早期有代表性的成果是 Rowley 等人提出的方法。他们用 神经网络 进行人脸检测,用20x20 的 人脸和非人脸图像 训练了一个 多层感知器模型。原理如下:
- Rowley 等人接着提出的方法解决了多角度 人脸检测问题,整个系统由 两个神经网络 构成,第一个网络用于估计人脸的 角度,第二个用于 判别 是否为人脸。角度估计器输出一个 旋转角度,然后用整个角度对检测窗进行旋转,然后用第二个网络对 旋转后 的图像进行判别,确定是否为人脸。系统结构如下图所示:
【基于AdaBoost框架】
-
Boost 算法是基于 PAC (Probably Approximately Correct) 学习理论而建立的一套 集成学习 (Ensemble Learning) 算法。Boost 的核心思想便是利用多个简单的 弱分类器,构建出高准确率的 强分类器
-
2001年,Viola 和 Jones 设计了一种 人脸检测框架 (VJ框架) 使用简单的 Harr-like 特征 和 级联的 AdaBoost分类器 构造检测器,检测 速度 较之前的方法有2个数量级的提高,并且保持了很好的 精度。但有如下几个问题:
-
稳定性低:Harr-like 特征是一种相对简单的特征
-
容易过拟合:弱分类器采用简单的决策树,该算法对于解决正面的人脸效果好,对于人脸的遮挡,姿态,表情等特殊且复杂的情况效果一般
-
鲁棒性差:基于 VJ-cascade 的分类器设计,进入下一个stage后,之前的信息都丢弃了。换句话来说,分类器评价一个样本不会基于它在之前stage的表现
【深度学习 - Cascade CNN】
-
传统技术 和 深度网络 结合的代表,和 VJ 人脸检测器一样,其包含了 多个分类器,这些分类器采用 级联结构 进行组织。不同的地方在于,Cascade CNN 采用 卷积网络 作为每一级的分类器,而不是决策树
-
检测流程:
(1)构建多尺度的人脸图像金字塔,12-net 密集的扫描整幅图像 (不同的尺寸),快速的 剔除掉超过90% 的检测窗口
(2)剩下的窗口送入 12-calibration-net 调整尺寸和位置,使其更靠近潜在的人脸图像附近,接着采用 非极大值抑制 (NMS) 合并 高度重叠 的检测窗口,保留下来的候选检测窗口将会被归一化 到 24x24 作为 24-net 的输入
(3)24-net 进一步 剔除掉剩下的近90% 的检测窗口
(4)通过 24-calibration-net 矫正检测窗口,并应用 NMS 进一步合并减少检测窗口的数量,将通过之前所有层级的检测窗口对应的图像区域 归一化 到 48x48 送入 48-net 进行分类得到进一步过滤的人脸候选窗口
(5)利用 NMS 进行窗口合并,并送入 48-calibration-net 矫正检测窗口作为最后的输出
【深度学习 - MTCNN】
-
将 人脸检测 和 人脸对齐 集成到了一个框架中实现,分为三个流程: P-Net,R-Net,O-Net
-
检测流程
(0)首先按不同比例 缩放照片,形成图片的特征金字塔作为 P-Net 输入
(1)P-Net 主要获得了人脸区域的 候选窗口 和 边界框的回归向量。并用该边界框作为 回归,对候选窗口进行 校准,然后通过 NMS 来 合并 高度重叠的候选框
(2)然后将候选框输入 R-Net 网络训练,利用边界框的 回归值 微调 候选窗体,再利用 NMS 去除重叠窗体
(3)O-Net 功能与 R-Net 作用类似,只是在去除重叠候选窗口的同时,显示 五个 人脸 关键点 定位
-
MTCNN 和 Cascade CNN 一样也是基于 cascade 的框架,但是 降低了 模型的整体 复杂度,使其更好的落地到工业界应用
感谢:极客时间
感谢:《深入理解TensorFlow》作者:彭靖田