- 人工智能:人脸识别与搜索
- 张重生
- 2171字
- 2021-03-31 21:20:24
2.1 Cascade CNN 人脸检测算法
Cascade CNN 人脸检测算法[6]是经典的Viola & Jones 人脸检测算法的深度卷积网络翻版,使用了多尺度特征组合。Cascade CNN 人脸检测算法利用传统的滑窗方法,并利用卷积神经网络CNN 进行特征提取,对每个窗口中的切片图像进行分类并判定是否为人脸。以下将该算法分为训练阶段和测试阶段分别进行介绍。图2-1所示为Cascade CNN 的级联神经网络结构。
图2-1 Cascade CNN 的级联神经网络[6]
1. Cascade CNN 人脸检测算法的训练阶段步骤
(1)利用CNN,使用图2-1中的12-Net 神经网络结构,训练针对12像素×12像素切片图像的人脸检测算法,旨在判定12像素×12像素的窗口中的切片图像是否为人脸。具体做法包括以下两个步骤。
① 根据标注文件导入的正样本图像,随机生成负样本图像。
例如,AFLW 数据集的标注文件已经给出了图像中每个人脸区域的外接矩形框。根据标注文件找到图像中每个人脸区域的外接矩形框,将该区域剪切(crop)出来并调整大小(resize)到12像素×12像素,作为正样本人脸图像切片(crop)。
对于负样本图像,在保证高于最小人脸图像尺寸阈值的前提下,从负样本图像集中(不包括人脸的图像数据集),随机确定切片图像的尺寸大小(令其长/宽为w),然后在图像区域中随机确定一对坐标点(x0, y0)并以之作为切片图像区域的左上角坐标,以长/宽为w,确定一个正方形图像区域,进行图像切片,并将该切片图像调整大小到12像素×12像素,作为负样本人脸图像切片。重复该步骤,直到生成一定数量的负样本图像(如与正样本图像数量相同或是其2倍等)。
② 使用图2-1所示的12-Net 神经网络结构,利用CNN 对每个正样本和负样本提取卷积特征,以一定的迭代次数训练神经网络,得到CNN分类模型,适用于12像素×12像素的切片图像。
注意:在上述训练过程中,并没有使用滑动窗口在图像上依次滑动。
(2)利用CNN,使用24-Net 神经网络结构,训练针对24像素×24像素切片图像的人脸检测算法,旨在判定24像素×24像素的窗口中的切片图像是否为人脸。具体做法包括以下两个步骤。
① 根据标注文件导入的正样本图像,随机生成负样本图像。正样本图像生成方法与(1)①中的方法类似,只是要求切片图像的尺寸为24像素×24像素,其他相同,不再赘述。
负样本图像是使用类似(1)①中的方法生成的每个负样本调整大小到24像素×24像素,作为新的负样本。
② 使用图2-1所示的24-Net 神经网络结构,利用CNN 对每个正样本和负样本提取卷积特征,以一定的迭代次数训练神经网络,得到CNN分类模型,适用于24像素×24像素的切片图像。
其中,在对每个24像素×24像素的切片图像提取卷积特征时,首先利用CNN 对该切片图像提取特征1;然后将该切片缩放至12像素×12像素,提取卷积特征2;最后,将图像提取特征1和图像提取特征2在全连接层上拼接(concatenate)起来,有助于检测较小的人脸。
(3)利用CNN,使用48-Net 神经网络结构,训练针对48像素×48像素切片图像的人脸检测算法,旨在判定48像素×48像素的窗口中的切片图像是否为人脸。
具体处理方法与上述的24像素×24像素的切片图像的处理方法类似。其中,在对每个48像素×48像素的切片图像提取卷积特征时,同时将该图像缩放至24像素×24像素,输入到(2)中训练得到的24-Net,提取对应的卷积特征,最后3种卷积特征在全连接层上进行拼接(因此,48-Net 最终提取得到的特征本质上是12像素×12像素、24像素×24像素、48像素×48像素3种尺度下的卷积特征的拼接)。
(4)校正网络(Calibration Network)的训练,包括12-Net 校正网络(12-Calibration-Net)、24-Net 校正网络和48-Net 校正网络。以12-Net校正网络为例,它紧跟在12-Net 神经网络之后,用于调整12-Net 预测的检测框的大小和位置,以接近真实目标[7]。这一过程,本质上是利用神经网络进行回归学习的过程。
2. Cascade CNN 人脸检测算法的训练阶段步骤
Cascade CNN 人脸检测算法的训练阶段步骤如下,其处理流程如图2-2所示。
图2-2 Cascade CNN 的处理流程[6]
(1)对每张测试图像,利用滑动窗口的方法,使用12像素×12像素的检测窗口,以步长为4,在每张原始的测试图像上滑动,得到检测窗口。
(2)利用训练得到的12-Net 神经网络模型,提取卷积特征,利用Softmax 分类对(1)中的每个窗口中的切片图像进行预测,此时90%以上的滑动窗口中的切片图像将被拒绝(判定为非人脸区域)。将剩余的窗口中的切片图像输入到12-Net 校正网络中调整大小和位置,以接近真实目标。接着输入到NMS 中,消除高度重叠窗口[7]。
(3)将上一阶段剩余的窗口中的切片图像调整大小为24像素×24像素,然后送入训练好的24-Net 校正网络,得到两种尺度的全连接层特征的拼接(12像素×12像素、24像素×24像素),进行Softmax 分类预测,部分窗口将被排除。将剩余的窗口中的切片图像输入24-Net 校正网络中调整大小和位置,以接近真实目标;接着输入到NMS 中,消除高度重叠窗口。
(4)将步骤(3)中剩余窗口中的切片图像送入训练好的48-Net 神经网络模型中,进行Softmax 分类预测;然后将剩余窗口中的切片图像输入48-Net 校正网络中调整大小和位置,以接近真实目标。接着输入到NMS 中,消除高度重叠窗口,其输出即为最终的人脸检测结果。
由此可见,在预测时,Cascade CNN 利用滑窗的方法在每张测试图像上滑动,对每个窗口中的图像利用CNN 卷积网络进行分类预测。本质上,Cascade CNN 与Voila & Jones 人脸检测器的级联流程相同,它具体包含6个级联的分类器(12-Net、12-Net 校正网络、24-Net、24-Net校正网络、48-Net、48-Net 校正网络),这些分类器通过串联的方式顺序执行。两者的主要不同之处在于Cascade CNN 使用卷积特征训练每级的分类器[7]。
在GitHub 上,有若干开源实现的Cascade CNN 源代码,有兴趣的读者可以通过文献[8]中的源代码深入了解。