还记得在《送你一张拍拍贷的活点地图》一文中,我们利用行人追踪和行人重识别算法在拍拍贷大楼里终于找到了众里寻他千百度的某人来提需求吗?我们绝不仅仅满足于找到想找的人,还想知道他什么样子、心情好不好……这其实是一个人脸检测及属性特征分类问题,本质是图像物体检测、图像分类问题。卷积神经网络(CNN)的蓬勃发展迅速地取代了基于特征描述子的传统图像特征提取方法,在上述图像问题中的应用也不断取得优秀的表现。
本文中将要介绍人脸检测及属性特征识别引擎,就是一系列利用卷积神经网络进行特征提取的方法集合。该引擎的主要功能是定位图像中的人脸位置、统计人脸数量以及分析每张人脸的朝向、年龄、性别、情绪等人脸特征。
- 人脸检测模块的任务是定位输入图像中的人脸区域,并将各人脸区域进行分割,主要的作用是:确定识别主体、去除与人脸无关背景信息、检查图像质量。
- 人脸属性分类模块集成头部姿态检测、年龄及性别预测、情绪预测等子模块,任务是将前置模块得到的人脸区域图像作为输入,对人物头部朝向角度、年龄、性别、情绪等属性进行预测。
比如我们关心“老黄”的情况,先把抓取的“老黄”的照片输入引擎,检测得到他的人脸区域图片,发现图中他头部向右侧偏转,同时还判断他是一位中年男性,此刻正面无表情。
人脸检测模块
对于一幅输入图像,首先要定位图像中的人脸区域(图2),目前相对成熟的人脸位置预测架构是MTCNN[1]。
图2 人脸区域定位示意图
MTCNN框架将人脸识别任务分为三个递进的子任务 ,通过这三个递进阶段对人像区域候选框进行精修(图3)
图3 MTCNN多尺度剪裁示意图
对原图进行多尺度的剪裁,构成金字塔状的流程结构。将这些不同尺度的图像作为各阶段的输入进行训练,目的是为了更准确地将不同远近、不同位置产生的多尺度人脸识别出来。
下图是MTCNN网络的详细训练过程(图4)。阶段一为Proposal Network(P-Net),主要通过回归生成一些候选框,并利用非极大抑制的方法合并高度重合的部分; 阶段二为Refine Network(R-Net),输入为P-Net生成候选框,作用为拒绝大量的非人脸的候选框框;阶段三为Output Network(O-Net),和R-Net比较相似,但这一步还增加了人脸关键点位置的回归,输出包含人脸范围的4个坐标信息、人脸置信度和关键点坐标。
图4 MTCNN多阶段网络结构示意图
人脸属性识别模块
该模块由多个子模块构成,本文主要介绍其中三种:头部姿态检测,年龄及性别预测,情绪识别。
1. 头部姿态检测
头部姿态指的是人物头部的朝向,通俗的理解是低抬头、转头等动作。头部姿态检测的应用场景有很多,例如:动态活体检测、人物注意力预测等。
头部姿态检测通常使用欧拉角度(yaw、pitch、roll)来表示各方向的偏转程度(图5)。
图5 欧拉角度示意图
通过卷积神经网络对人脸区域进行提取特征并对角度进行回归,以end-to-end的方式完成头部姿态的预测。
图6 头部姿态网络结构及损失函数示意图
由于该模块任务需要同时预测人脸在三个轴上的角度,故将网络设计为多输出的结构(图6)。特别指出的是网络的输出层没有直接对角度数值进行回归,而是将角度每三个一组进行分箱,从而将回归问题转化为分类问题。将激活函数的输出看成角度的分布函数,计算角度的期望。模型的损失函数由两个部分构成[2]:softmax期望与真实值的均方误差、softmax分组与真实分组的交叉熵。该损失函数兼顾回归和分类问题的设计有效的加快了模型的收敛。
来看一个头部姿态检测效果示意图(图7):
图7 头部姿态检测示意图
2. 年龄及性别预测
该模块任务是对人脸图像进行年龄和性别的预测。模块整合了年龄、性别两个任务,主要有两个目的:提升多任务的推断效率、两个任务同时对卷积部分进行反馈,使其提取更多不同维度的面部特征。故将网络设计为多输出的结构。卷积神经网络部分采用Xception[3]的结构,输出层对年龄和性别同时进行分类。
年龄的损失函数分为三个部分[4]:softmax期望与真实值的均方误差、softmax的方差、softmax分组与真实分组的交叉熵。相比头部姿态检测,年龄预测新加入了由softmax输出计算的方差,旨在加强分类任务的收束,使组内距离更小,组间距离更大。
性别的预测由于是二分类问题,所以损失函数只使用了交叉熵。
目前模型年龄预测的绝对值的平均偏差在3岁左右,性别预测准确率98.12%。
3. 情绪识别
该模块对人脸五官表现出来的“情绪”进行预测。提需求总要看看人家心情好不好嘛,被打一顿就不好了。
图8 情绪检测示意图
为了减少模型的复杂度,该模块利用精简版的Xception作为卷积结构提取特征对人脸图像的情绪标签进行分类[5]。类别有愤怒、厌恶、恐惧、开心、难过、惊喜、面无表情共6个类别(图8)。模型在IMDB的情绪分类数据集[6]上训练得到,迁移到真实场景下的测试中有不错的表现。
目前人脸检测及属性识别引擎已经在拍拍贷内部上线。随着版本的迭代,引擎的功能不断完善,其识别速度和识别精度都在不断提升,部分功能已经达到商用水平。未来会尝试将更多技术应用进来使其更加健壮。
[1] Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Networks,Kaipeng Zhang, Zhanpeng Zhang, Zhifeng Li,Yu Qiao
[2] Fine-Grained Head Pose Estimation Without Keypoints,Nataniel Ruiz,Eunji Chong,James M. Rehg Georgia
[3] http://www.cbsr.ia.ac.cn/users/xiangyuzhu/projects/3DDFA/main.htm
[4] Mean-Variance Loss for Deep Age Estimation from a Face,Hongyu Pan,Hu Han,Shiguang Shan,Xilin Chen
[5] Real-time Convolutional Neural Networks for Emotion and Gender Classification,Octavio Arriaga, Matias Valdenegro-Toro, Paul Plöger
[6] https://www.kaggle.com/c/challenges-in-representation-learning-facial-expression-recognition-challenge/data