APP下载

一种多尺度轻量化的人脸识别算法

2018-11-20张文涛陈婵娟王泽荔

现代计算机 2018年30期
关键词:人脸轻量化人脸识别

张文涛,陈婵娟,王泽荔

(陕西科技大学机电工程学院,西安710000)

0 引言

随着人工智能技术的发展,基于深度学习的人脸识别算法愈加成熟。该类算法在现有人脸标准数据集上的正确识别率已经接近人类水平。然而,在实际视频监控场景下,由于人体位置的移动和人脸角度的变化,导致监控摄像机采集到的人脸数据呈现多角度、多尺度的特点。当人脸与摄像机间的距离不确定时,人脸在单帧画面中的尺寸也不确定。距摄像机越近,人脸尺寸越大。距摄像机越远,人脸尺寸越小。

现有基于深度学习的人脸识别算法,其网络模型的输入尺寸往往是固定的。例如,在人脸识别算法FaceNet[1]中,其 NN1 模型的输入尺寸为 220×220(单位:像素);其NN2模型的输入尺寸为224×224;其NN3模型的输入尺寸为160×160。在人脸识别算法LCNN[2]中,其Light CNN-29模型的输入尺寸为144×144。

为了适应于已有基于深度学习的人脸识别算法模型的输入尺寸,只能对视频监控场景下采集到的人脸数据进行尺寸放缩(如图1所表示)。图像尺寸的放缩对图像质量产生一定的损失。特别是在人脸识别任务中,放缩后的人脸图像,其人脸特征信息会大量丢失,其不利于人脸识别算法在视频监控场景下的应用。

图1 不同距离下的人脸尺寸

针对这一实际问题,本文提出了一种基于深度学习的多尺度轻量化的人脸识别算法。首先,构建基于深度学习的人脸识别算法模型,实现端对端的人脸特征提取、分类。其次,借鉴空间金字塔池化思想,设计空间金字塔池化层,实现模型的多尺度输入。再次,选用激活函数Maxout[3]优化模型,实现模型的轻量化。同时,鉴于现有人脸数据集的同一样本单一尺度的局限性,本文提出一种多尺度的人脸数据集。首先,建立距摄像机不同距离下的三个采集点。然后在每个采集点上采集不同角度的人脸图像,最后对采集到的人脸图像进行数据预处理和分类整理。

本文提出的多尺度轻量化人脸识别算法模型不需要将人脸尺寸放缩到同一尺寸,因而可以解决由图像尺寸缩放所导致的人脸特征信息丢失问题。此外,整个模型的参数量只有1906K,较少的参数量使得该算法对硬件要求更低,可迁移性更高,运行速度更快。本文提出多尺度的人脸数据集填补了现有人脸数据集单个样本多个尺度的空缺,对现有基于深度学习的人脸识别算法的实现提供了更优的测试平台。

1 相关工作

1.1 卷积神经网络

卷积神经网络(Convolutional Neural Network,CNN)[4]是一种专门用来处理具有相似网络结构数据的神经网络。该网络一般由输入层、卷积层、池化层、全连接层组成。输入层是整个神经网络的输入,在处理图像的卷积神经网络中,它一般代表一张图片的像素矩阵。卷积层的作用是对整个神经网络的特征进行提取。卷积层可以看作是由若干个节点(神经元)组成的特征矩阵。每个节点可看作是一个滤波器。每个滤波器对上一层图像进行卷积操作,从而实现对上一层图像的特征提取。池化层通过池化函数使用某一位置的相邻输出的总体统计特征来代替网络在该位置的输出。池化层以卷积层为操作对象,其作用是有效提取卷积层特征,实现模型参数量的压缩,进而防止网络模型的过拟合。全连接层的每一个结点都与上一层的所有结点相连,用来把前边提取到的特征综合起来。由于其全相连的特性,一般全连接层的参数也是最多的。卷积神经网络已被证明可用于各种高级视觉任务[5-7]以及各种图形处理问题[8-10]中,并都取得了不错的成绩。

1.2 空间金字塔池化

空间金字塔池化(Spatial Pyramid Pooling,SPP)[11]是作用于卷积层与全连接层之间的一种并行池化结构。该结构由三种不同大小的池化滑动窗口以不同大小的步长并行组成,并输出一个固定的数据维度。固定大小的输出维度使得网络模型不再受限于输入图像的尺寸或比例。此外,空间金字塔池化通过对上层特征图从不同的尺寸大小进行特征提取,再对提取到的特征进行聚合,从而可以有效的提取不同尺度的图像特征信息。

1.3 激活函数Maxout

卷积神经网络在处理分类问题时,若为线性可分问题,则采用线性模型即可对目标类别做出很好的区分;若为线性不可分问题,就需要使用激活函数实现模型的去线性化。常用的激活函数有:Sigmoid函数、tanh函数、ReLU函数以及Maxout函数。其中,激活函数Maxout可以凭借更少的参数获得一些统计和计算上的优势。例如,如果由n个不同的线性过滤器描述的特征可以在不损失信息的情况下,用每一组K个特征的最大值来概括的话,那么下一层就可获得K倍更少的参数量。

2 多尺度轻量化人脸识别算法模型

2.1 多尺度

在模型设计过程中,由于卷积层、池化层对输入图像尺寸没有限制,只有在最后的全连接层对输入特征图尺寸大小有要求。因此,借鉴空间金字塔池化思想,在网络模型(图2所示)第四个Maxout层之后加入一个SPP层,从而可以实现模型的多尺度输入。在本文实验部分中,三种不同尺度(80×80、120×120、240×240(单位:像素))的人脸图像在输入模型后,其Maxout 4层的特征图大小分别为:8×8×192、13×13×192、28×28×192。对于特征图 8×8×192,其SPP层的计算步骤如下:

(1)计算池化滑动窗口的大小和步长,具体计算公式如下:

其中Kernel_size表示池化滑动窗口的大小,Stride表示池化滑动窗口的步长;W、h分别为Maxout 4层特征图的宽度和高度;n表示输出池化层滑动窗口的大小;表示求取大于的最小整数表示求取小于的最大整数。

图2 轻量化多尺度人脸识别算法模型

(2)按照步骤(1),依次计算出当n取1时,n取2时,n取4时,Kernel_size和Stride的值。

(3)按照步骤(2)中计算出的结果依次对Maxout 4层进行三次池化操作,池化后的特征图分别为四维矩阵[N,1,1,192]、[N,2,2,192]、[N,4,4,192]。其中 N 表示单次输入模型的样本数。

(4)分别对步骤(3)中的特征图进行维度变换,即将一个四维矩阵转为一个二维矩阵。转换后的特征矩阵分别为:[N,1×1×192]、[N,2×2×192]、[N,4×4×192]。

(5)对步骤(4)中的特征矩阵进行特征合并,即可得到一个固定维度的二维矩阵[N,(1×1+2×2×4×4)×192]。

特征图 13×13×192、28×28×192 的计算方法与之类似。通过以上步骤即可完成多尺度轻量化人脸识别模型的SPP层结构运算,从而解决模型的多尺度输入问题。多尺度池化层运算流程如图3所示。

2.2 轻量化

在模型设计过程中,考虑到现有基于CNN人脸识别算法模型,具有层数多、参数量大、所需训练数据量多等特点,由此导致算法在实际应用中受限于计算机的处理能力。针对该问题,本文在模型设计过程中,选用Maxout作为激活函数,从而可以在网络模型性能不变的基础上实现模型的轻量化。具体设计方法如下:

(1)对于卷积层之后的激活函数,这里将其设定为Maxout层(O=conv,K=2)。其中参数 O=conv,表示激活函数Maxout所作用对象为卷积层,参数K=2表示激活函数Maxout作用后的卷积层通道数为原来的1/2。具体计算步骤如下:

①设当前卷积层为一个四维张量A=[N,w,h,c],其中N表示每一次输入网络模型的样本个数,w表示当前卷积核的宽度,h表示当前卷积核的高度,c表示当前卷积核的通道数。

②按照四维张量A第四维度上卷积层的特征加权和的大小,取其前c/K个最大值所对应的通道数作为输出。即输出四维张量B=[N,w,h,c/K]。

图3 多尺度池化层运算流程图

(2)对于全连接层之后的激活函数,这里将其设定为 Maxout层(O=FC,K=2)。其中参数 O=FC,表示激活函数Maxout所作用对象为全连接层,参数K表示激活函数Maxout作用后的全连接层的维度为原来的1/2。具体计算步骤如下:

①设当前全连接层为一个二维张量C=[N,c],其中N表示每一次输入网络模型的样本个数,c表示当前全连接层的维度。

②按照二维张量C第二维度上全连接层上的节点(神经元)值的大小,取其前c/K个最大值所对应的通道数作为输出。即输出二维张量D=[N,c/K]。

3 实验

3.1 多尺度人脸数据集

目前国内外现有人脸数据库按照其数据来源可分为实际环境下的人脸数据和模拟实际环境下的人脸数据。西安交通大学人工智能与机器人研究所的东方人脸数据库(XJTU人脸库)[12]就是一种在室内环境下模拟部分实际场景(不同光照条件、不同拍摄角度)进行人脸图像采集的数据库。Labeled Faces in the Wild(LFW)[13]人脸数据库中的人脸图像主要来自实际复杂环境下采集的人脸数据(主要来源于新闻图片)。然而,现有人脸数据库均没有针对实际视频监控下人脸距摄像机不同距离下所产生不同尺度人脸图像的问题建立数据集。

针对上述问题,本文提出了一种多尺度人脸数据集。该数据集共采集并整理了50位志愿者的45000幅人脸图像,每位志愿者拍摄900张不同距离不同角度的人脸图像。该数据集设定的拍摄距离分别为3米、6米、9米。具体的采集方式如图4所示。每个采集点距摄像机的距离固定且采集角度不同。摄像机采集到的数据为视频信息,需要对其进行数据预处理。具体流程如下:(1)通过视频分帧代码对采集到的视频按照每秒30帧的帧率进行分帧处理。(2)采用人脸检测算法MTCNN[14]对每帧图像进行人脸检测、人脸对齐(具体过程如图5所示)。(3)对采集到的人脸图像进行归一化处理。本文采用分而治之的思想,对3米的人脸图像尺寸归一化到240×240(单位:像素),6米的人脸图像尺寸归一化到120×120,9米的人脸图像尺寸归一化到80×80。人脸数据集的示例样本如图6所示。根据本文实验要求将多尺度人脸数据集按照一定比例分为训练集和测试集,如表1所示。

图4 采集方式

图5 数据预处理

图6 数据集示例样本

表1 多尺度人脸数据集的组成

3.2 实验设计

(1)前期准备

针对算法验证要求,本文针对所提算法模型、所提多尺度人脸数据集设计了两种人脸识别模型。分别为多尺度轻量化模型(Pyramid Lightweight-CNN model,PLC)和单一尺度轻量化模型(Single Lightweight-CNN model,SLC)。其模型的具体结构参数分别如表2、3所示。

(2)模型训练方法设计

本文分别采用三种不同尺度的人脸数据集对设计好的模型进行交叉训练。在第一个batch(单次输入模型的样本个数)中,选用80×80的人脸数据进行模型训练,在第二个batch中,选用120×120的人脸数据进行模型训练,在第三个batch中,选用240×240的人脸数据进行模型训练,依次交叉往复训练。

表2 多尺度轻量化CNN模型结构

表3 单一尺度轻量化CNN模型结构

3.3 实验及结果分析

本文实验平台的配置包括Intel i7-6700(8×3.40GHz处理器)、16GB 内存、GTX1080Ti显卡以及Windows 10操作系统,并使用基于Python编程语言的TensorFlow[15]深度学习开源框架。

(1)训练样本

本文使用的训练样本是上文提到的多尺度人脸数据集,它包含50个人,约43500张不同角度、不同距离的人脸照片,本文使用此数据集用于模型训练。

(2)测试样本

本文使用的训练样本是上文提到的多尺度人脸数据集,它包含50个人,约1500张不同角度、不同距离的人脸照片,本文使用此数据集用于模型测试。

(3)实验细节

针对本实验数据集的特殊性,本文设计了6组实验来对设计的多尺度轻量化CNN模型进行测试。这里需要提出的是,单一尺度轻量化CNN模型,在输入不同尺度的图片时,需要将其输入尺寸统一缩放到80×80的尺寸大小。

建立好两组模型之后,分别用3m、6m、9m的训练样本训练两组模型,实验发现,在模型训练过程中,多尺度轻量化模型收敛的速度更快(如图7所示)。

以3m人脸数据集分别训练单一尺度轻量化模型(Model-SLC)、多尺度轻量化模型(Model-PLC),对训练完的模型进行保存,并分别用3m、6m、9m的人脸测试集对其测试,测试结果如表4所示。

图7 两组模型在同一数据集下的训练效果图

表4 不同测试集下的识别率

以6m人脸数据集分别训练单一尺度轻量化模型(Model-SLC)、多尺度轻量化模型(Model-PLC),对训练完的模型进行保存,并分别用3m、6m、9m的人脸测试集对其测试,测试结果如表5所示。

表5 不同测试集下的识别率

以9m人脸数据集分别训练单一尺度轻量化模型(Model-SLC)、多尺度轻量化模型(Model-PLC),对训练完的模型进行保存,并分别用3m、6m、9m的人脸测试集对其测试,测试结果如表6所示。

表6 不同测试集下的识别率

以3m、6m、9m人脸数据集分别训练单一尺度轻量化模型(Model-SLC)、多尺度轻量化模型(Model-PLC),对训练完的模型进行保存,并分别用3m、6m、9m的人脸测试集对其测试,测试结果如表7所示。

表7 不同测试集下的识别率

综上,通过多组比对实验,我们可以发现:在不同尺度下的人脸图像测试集下,多尺度轻量化模型(Mod⁃el-PLC)要比单一尺度轻量化模型(Model-SLC)的识别率高。值得一提的是,轻量化多尺度网络模型的参数量和轻量化单一尺度网络模型的参数量一样多。

4 结语

本文提出的多尺度轻量化人脸识别算法模型不需要将人脸尺寸放缩到同一尺寸,因而可以解决由图像尺寸缩放所导致的人脸特征信息丢失问题。此外,整个模型的参数量只有1906K,较少的参数量使得该算法对硬件要求更低,可迁移性更高,运行速度更快。本文提出多尺度的人脸数据集填补了现有人脸数据集单个样本多个尺度的空缺,对现有基于深度学习的人脸识别算法的实现提供了更优的测试平台。实验结果表明,本文所提算法在距离条件变化的情况下取得较好的性能。

猜你喜欢

人脸轻量化人脸识别
基于ABAQUS的某轻卡车蓄电池支架轻量化
人脸识别 等
有特点的人脸
一起学画人脸
玻璃窗上的人脸
揭开人脸识别的神秘面纱
人脸识别技术的基本原理与应用
人脸识别技术研究与应用进展概述
一种轻量化自卸半挂车结构设计
一种轻量化自卸半挂车结构设计