论文阅读 - HyperFace深度的多任务学习人脸检测框架,地标定位、姿势估计和性别识别
这是本人选修课的论文读书报告,之前从未接触过图像识别和深度学习相关方面的知识,因此,对于文中的部分概念和定义理解的并不透彻,读书报告中必定存在不少错误和纰漏。
同时感谢下面几位博主,你们的文章对我理解论文内容有了极大的帮助(宛如救命稻草)。
参考博客和网页:
论文笔记《HyperFace: A Deep Multi-task Learning Framework ...》
摘要abstract
提出了一种基于深度卷积神经网络(CNN)的人脸检测、标志点定位、姿态估计和性别识别多任务学习算法 – HyperFace 。期间融合了CNN的中间层,并且基于融合中间层实现了多任务学习算法。
此外还提出了两种基hyperface变体算法:(为减小难度,这里不再讨论)
1.简介introduction
hyperface的含义就是:提取cnn中多个卷积中间层的特征来进行多任务学习(文中将其称作超特征)。
之所以选择多个中间层的原因是:特征中包含的信息在整个网络中分层分布,层数较浅的卷积层包含较多的细节、局部信息,更适合于计算学习关键点定位和姿态估计的任务;层数较深的卷积层则包含较多的整体信息,可以用于人脸检测和性别预测。
新的问题是,多个卷积层包含的信息十分庞大,难以直接拿来做多任务学习,所以需要一种特征融合(feature fusion)技术用以将多层的特征信息线性或非线性的结合到一块子空间上。论文构建了一个单独的fusion-CNN 层用来复用hyperfeatures,利用该fusion-CNN输出的特征做多任务学习。为了完成多个任务的学习,论文使用了多个损失函数同时训练它们。
该论文的主要贡献有下:
(1)我们提出了两种新的CNN框架:通过融合网络的中间层来实现人脸检测、标志点定位、姿态估计和性别识别。第一个称为超人脸hyperface的模型,基于AlexNet模型;第二个称为hyperface ResNet(HFResNet)的模型基于ResNet-101模型。
(2)提出了两种后处理方法:迭代区域选择(IRP)和基于关键值的非最大值抑制(L-NMS),提高整体框架的性能。
(3)对比了基于R-CNN的个体任务学习和未使用中间层融合的多任务学习的性能差别(非主要情节,下文不再讨论)
(4)4种任务在各自的非约束评测集上都取得了突破性结果
本文的结构如下。第二节回顾相关工作。第3节详细描述了所提出的超人脸框架。第四节介绍了R-CNN、多任务人脸和HF-ResNet方法的实现。第5节展示了在具有挑战性的数据集上的hyperface和hf-ResNet以及R-CNN基线的测试结果。最后,第六节对全文进行了总结和讨论。 |
2.相关工作(忽略不写)
3.hyperface
hyperface算法由三个模块构成:
(1)从所给的图片中选择类独立得区域选择框,然后缩放到227*227像素
(2)用CNN判断选择的区域是否为脸部,如果是,则继续执行剩下的三个任务。
(3)后处理阶段:使用迭代区域选择(IRP)和基于关键值的非最大值抑制(L-NMS),提高整体框架的性能。
3.1 hyperface 架构 (architecture)
(注:max1就是pool1)
在构建这个网络架构时,作者提出两点前提:(1)CNN的特征在网络中是分层分布的。浅层特征对关键点定位和姿态估计比较有效,深层特征适合于更复杂的任务,如人脸检测或性别分类。(2)同时学习多个相关任务可以建立协同效应(什么是协同效应?),并提高单个任务的性能。
论文使用基于Alexnet的网络开始进行图像分类(原该网络由五个卷积层和三个完全连接层组成,这里使用了缩减版,去除了三个全连接层,因为这三个全连接层对于头部姿态估计与关键点定位不能起到帮助)。提取的中间网络层分别是max1,conv3,pool5 。由于三个层的特征维度不同(27*27*96, 13*13*384, 6*6*256),所以不能直接将其拼接在一起 。
作者设计了conv1a和conv3a卷积层去卷积Max1和Conv3的特征,获得归一化的统一特征维度(6*6*256),最后和pool5拼接在一起,得到6*6*768维度的feature maps。由于特征庞大,又增加了卷积核为1*1(192个卷积核)的Conv_all卷积层将特征降维到6*6*192 (先卷积,再相加)。在Conv all中添加了一个全连接层(fc_full),它输出一个3072维(由6*6*192*3072的卷积层对conv all层进行卷积出来得到)的特征向量。
我们将fc_full网络分为5各分支,每一个512维,对应5个不同的任务,我们添加这5个全连接层,到fc_full中。
最后,向每个分支添加一个完全连接层,以预测各个任务标签,使用非线性ReLU当做**函数,同时我们不考虑池化层(为了不丢失局部信息,在fusion网络中不使用任何pooling操作)。
注解:**函数ReLu https://www.jianshu.com/p/338afb1389c9 |
然后使用特定于任务的损失函数来学习网络的权重(也就是3.2的内容)
3.2 training
使用AFLW数据集作为训练集。它包含21997张真实世界图片中的25993张人脸,包括完整的姿势、表情、种族、年龄和性别差异。它为每个脸部信息提供21个标记点,以及面边界框、面姿势(偏航、俯仰和侧滚)和性别信息。我们随机抽取1000幅图像进行测试,其余图像用于训练。
使用不同的损失函数训练人脸检测、地标定位、姿态估计和性别分类等任务。
3.2.1 人脸检测
使用R-CNN的选择性搜索(Selective Search)算法来判断原图像中脸部区域,生成候选区。利用IOU系数(Intersection over Union),如果IOU超过0.5,那么就认为是一个正样本(即人脸,L = 1),低于0.35被认为是负样本(不是人脸, L = 0),IOU在其他范围则忽略样本。
使用softmax损失函数来训练人脸检测任务:
p是候选区域是人脸的概率,从hyperface的最后一个完全连接层Fc_detection部署**函数Relu后获得。L是根据上文的正反例获得。
3.2.2 关键点定位
利用AFLW包含21个关键点信息,由于脸部的姿势变化,有些关键点的信息是不可见的,因此,我们只选择可见的关键点参与运算。
同样使用Select Search用以生成候选区,将IOU大于0.35的作为正例采用,并且将脸部所有可见的关键点坐标归一化,用相对坐标描述,归一化函数如下:
其中,xi, yi为可见的关键点坐标,x, y为人脸中心的坐标,w, h为人脸宽高。对于缺失的关键点,(ai, bi)被设置为(0,0)。
使用Euclidean(欧几里得)损失函数训练定位任务,如下所示:
( xi , yi
) 是由hyperface网络中最后一层全连接层Fc_landmarks部署**函数Relu后预测的关键点位置,N是关键点总数(在AFLW中为21),vi
是可见性因子。也就是说,对于那些可见的关键点,vi=1
;对于那些不可见的关键点, vi
= 0 ,即等价于不可见的关键点不参与运算。
3.2.3 关键点可见性预测
作者还训练了一个用于测试关键点(AFLW)是否可见的分类器,同样使用Select Search用以生成候选区,采用IOU大于0.35的候选区作为正例。使用Euclidean损失函数:
其中,vi 是从hyperface的最后一个全连接层Fc_visibility中部署**函数Relu后获取的第i个关键点可见性因子的预测值。vi表示该候选框第i个关键点是否可见的真值,1为可见,反之为0。
3.2.4 姿势估计
使用Euclidean损失函数训练roll(p1), pitch(p2), yaw(p3) (旋转,俯仰,偏航)。同样使用Select Search用以生成候选区,IOU大于0.5的为正例。
其中,p1,p2
,p3
是hyperface中最后一层全连接层Fc_pose部署了Relu**函数之后获取的预测值。
3.2.5 性别预测
使用softmax损失函数来训练性别预测任务,同样使用Select Search用以生成候选区,IOU大于0.5的为正例:
其中,如果性别为男性,则为g=0,否则为g=1。其次, pg 对应(p0, p1), 是由hyperface中最后一层全连接层Fc_gender部署了Relu**函数之后获取的二维概率向量的预测值。
3.2.6 全局损失函数
五项单独损失的加权和计算:
其中,为各项损失的权重,对应的权重如下图:
(由于关键点定位和姿态估计需要较高的空间精度,因此需要赋予较高的权值。)
3.3 测试test
首先,使用Selective Search方法选择候选框,然后将候选框resize后送入网络,只有那些检测分数高于一定阈值的区域才被归类为人脸并进行后续处理。(检测手段?暂不明确)
使用以下式子缩放:(此部分展示时可省略)
接下来是作者的重点问题部分:
作者认为,基于建议(proposal)的人脸检测有两点缺点:
- 这种方法难以检测到那些小而困难的人脸,导致系统整体召回率的降低。
- 这种方法获得的面部框架可能没有很好的和面部的实际大小契合(比如建议框过大,或者过小),增加了后期从检测框到人脸框转换的训练负担。
作者提供了两种解决措施:
Iterative Region Proposals( IRP,迭代区域建议)
Landmarks-based Non-Maximum Suppression( L-NMS,基于标记点的非最大抑制)。
3.3.1 IRP,迭代区域建议
作者原本使用一种快速版本的选择性搜索,从一张图片中抽取出2 000个高重叠的候选区域,作者将此版本称为FAST_SS 。但这种方法对于那些光线差或者是尺寸小的人脸,仍然没有办法被高重叠的候选区域捕获,从而导致该人脸在检测过程中,因为分数过低而被漏检。
作者采用了一种新的方案,叫做FaceRectCalculator ,即根据预测得到的关键点信息去产生新的人脸框候选区域。并且在网络中预测一轮后,再用新产生的关键点信息去构造新的人脸框候选区域,通过层层迭代,实现了对面部检测生成更高重叠度的候选框,从而提高检测分数,增加召回率。
作者在论文中提出,只需迭代一次,就可以达到理想效果。具体效果如下图展示:
(图3 - 使用选择性搜索获得的候选人脸区域(左边的红色框)在人脸检测中得分较低,而标记被正确定位。我们利用标记信息生成一个新的人脸区域(右边的红框),并通过网络进行反馈以提高检测分数。)
有关IRP的伪代码如下:
3.3.2 L-NMS,基于标记点的非最大抑制
传统的NMS(https://blog.csdn.net/m0_37605642/article/details/98358864),是选取得分最高的区域(概率最大的候选框),然后剔除掉与该区域重叠度(IOU)超过一定阈值的其他区域。从而达到去掉重复候选框的目的。
然而作者认为,这种方式有两个问题:
- 如果对于同一张人脸,存在两个候选框均检测可接受,其中一个得分最高的候选框和另外一个候选框重叠度(IOU)较小,达不到被剔除的阈值。那么这两个候选框就会被检测为两张单独的人脸。
- 如果另外一张人脸和当前得分最高的人脸所在的候选框靠的太近,可能导致该人脸被不合理的剔除掉,从而导致漏检。
因此,作者想出了一种新的方法,就是不使用原本的候选框参与NMS运算,而是在一个新的区域上执行NMS运算。新的区域的定位方式如下:
也就是说,选取迭代预测的关键点信息中,对角的两个关键点来定位候选框区域。这样,相同人脸的几个候选框定位区域更近;不同人脸之间对应候选框定位区域更远。从而提高了NMS的定位精度。
算法实现如下,首先利用关键点定位候选区域,然后寻找和该定位区域重叠的候选框集合,作为人脸集。然后对该人脸集合引用NMS,保留分数最大的前K个区域top-k 。然后中和前K个候选框的分数,用该中和值,完成后续的姿态定位,性别识别,可见性识别,以及生成最终的候选框区域。 具体的伪代码如下:
4.hyperface-ResNet架构(此处省略,不再叙述)
5.实验结果
实验部分主要说明了每个任务的性能;使用多任务 和 不用多任务的对比;两种后处理方法的性能等。这里不再叙述。
我们来看一下该网络的实际性能,作者实验得出:在一台8核GTX-TITAN-X GPU的机器上测试了Hyperface方法。执行所有四个任务所需的总时间为每张图像3秒(这个速度的确有点慢了)。
但是作者指出,速度限制不是在CNN上,而是在选择性搜索(selective search)。每张图片的选择性搜索算法需要花费2s去生成候选区域建议。而hyperface的一次200个建议的前向传递(forward pass)只需要花费0.1秒。(什么是前向传递?)
作者还提出了一种快速版本的超人脸,它使用高召回率的快速人脸检测器而不是选择性搜索来生成候选区域建议。
6.讨论
(图14 - 从hyperface结构的conv_all层**选定的特征地图。绿色和黄色表示高**,而蓝色表示低**单元。这些特征描述了人脸检测、标志点定位、姿态估计和性别识别等任务中可识别的人脸特征。)
作者在讨论中展示了一个特别有意思的现象,就是把从hyperface中学习到特征可视化。例如上图,展示了conv_all卷积层的192个特征图中选取的部分**的特征图。
我们可以发现,这些特征图分别可以用来很好的完成对应任务的预测。例如:
- 特征图27和186比较适合用来做人脸检测和性别识别。前者能够很好的区分面部和非面部的区域,后者中,对于女性的面部特征输出高**性。
- 特征图19展示了眼睛和嘴部的高**性,特征图96给出了面部方向的粗略轮廓。这些特征可以应用于标志点定位和姿态估计等任务。
7.结果展示总结
图15展示了hyperface方法的定性结果。蓝色框表示检测到的男性面部,而粉色框表示女性面部。绿点提供了关键点位置。每个人脸的姿态估计按滚动、俯仰和偏航的顺序显示在方框顶部。