人脸特征点检测(四)——Tasks-Constrained DCN(TCDCN)
2017-09-28 22:01
831 查看
《Facial Landmark Detection by Deep Multi-task Learning》原文地址及实现代码在文章链接中。
文章提出TCDCN(Tasks-Constrained Deep Convolutional Network),使用与人脸相关的属性共同来学习人脸的特征点位置,通过这种多任务的学习,来提高人脸特征点检测的鲁棒性。具体而言,就是在人脸特征点检测时候,同时进行多个任务(包括性别、是否戴眼镜、是否微笑以及脸部姿势)的学习。使用这些辅助属性可以帮助更好的定位特征点。
这种多任务学习的困难在于:不同的任务有不同的特点,有不同的收敛速度。针对这两个问题,作者给出的解决方法分别是tasks-constrained deep model和task-wise early stopping。文章所提出的方法优于当时已存在的方法,特别是能处理有严重遮挡和姿势变化的情况,而且减少了模型的复杂度。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202005/06/c9ae785be7ea732a92300d11d7560e94)
上图展示了其他辅助属性的检测结果,人脸特征点检测这一任务可以与多个辅助任务同时进行,对比以前的CNN和Cascaded CNN,文章具有更好的表现性
要点:
(1)对于不同的任务,具有不同的特点,文章给出的解决方法是tasks-constrained deep model。
传统的多任务学习给每个任务都赋予相同的权重:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202005/06/6f2dbd2d70fa854bde4385aed9e24251)
一般的多任务学习则把主任务(特征点)和其他任务(辅助属性)分开处理,如下:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202005/06/74e7eaf856c0318d78b0d42a5f41eaa5)
而文章采用对主任务(regression)采用最小二乘法作为损失函数,对辅助任务(classification)使用交叉熵损失函数,如下:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202005/06/304dfeffd281f56d191f213fcef208e5)
从这个式子上可以看到,损失函数的前半部分(f为线性函数)就是特征点检测,后边部分(p为softmax函数)是不同分类任务的loss相加,最后一项是正则化项。
在训练的时候,各个任务使用相同的特征,只有在最后一级的时候才根据任务的不同做不同的处理(线性回归/分类)。
(2)不对于多任务而言,不同的任务有着不同的损失函数,学习难度也不同,因此它们的收敛速度也可能相异。现有的解决这个问题的方法是通过探索这些任务的关系来解决,比如说通过所有任务的权重协方差矩阵,但是这篇文章提出了一个更有依据的方法:task-wise early stopping。
当辅助任务达到最好的表现之后,这个任务对主任务就没有什么帮助了,这个时候就可以停止这个任务。那我们如何判断这个辅助任务是否起到了它应起的作用呢,我们应该什么时候终止这个任务呢?如下式所示,前一部分表示训练误差的趋势,后一部分表示跟训练误差相比的泛化误差。如果两式乘积超过了某个阈值,则终止该任务。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202005/06/a516294149c0a73d0dafb998341623c7)
文章所述,使用的是SGD(stochastic gradient descent)来更新任务的权重以及网络的过滤器,后向传播计算梯度使用的策略如下:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202005/06/0276f2bd650073db74c029bd86a861d3)
TCDCN所用的框架如下,输入是一个40x40的灰色图像,特征提取阶段包括4个卷积层、3个池化层和1个全连接层,过滤器的权重在空间上不是共享的,这意味着在输入map中使用的是不同的过滤器集合。选择绝对值整流的双曲正切作为激活函数;最大池化在没有重叠的区域进行,跟在四个卷积层后的全连接层生成一个特征向量,这个特征向量在估计阶段的时候被多个任务共享,其中线性回归(Linear regression)用来得出标记点位置,多个逻辑回归(logistic regression)用来处理其他多个人任务。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202005/06/65c05bdbc900fef2659b7f27e1ccb916)
评估准则使用的额是均值误差和失败率来衡量,mean error通过计算landmark和the ground truths的距离,然后相对于双目距离进行标准化得出,Mean error大于10%则认为失败。
下图是Facial Landmark Detection(FLD)和用其他辅助属性进行比较的结果,很明显可以看出使用辅助属性进行特征点检测的误差和失败率比没有使用辅助属性的要低得多,而且使用的辅助属性越多,性能及越好。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202005/06/251ed669e7fc2ef26153c9de59fecb72)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202005/06/6f973d487a77d5931ec84b9e5367d8cb)
还推荐一篇作者同类型的文章:《Learning Deep Representation for Face Alignment with Auxiliary Arribute》提出用辅助属性的脸部对齐的深度表示
文章提出TCDCN(Tasks-Constrained Deep Convolutional Network),使用与人脸相关的属性共同来学习人脸的特征点位置,通过这种多任务的学习,来提高人脸特征点检测的鲁棒性。具体而言,就是在人脸特征点检测时候,同时进行多个任务(包括性别、是否戴眼镜、是否微笑以及脸部姿势)的学习。使用这些辅助属性可以帮助更好的定位特征点。
这种多任务学习的困难在于:不同的任务有不同的特点,有不同的收敛速度。针对这两个问题,作者给出的解决方法分别是tasks-constrained deep model和task-wise early stopping。文章所提出的方法优于当时已存在的方法,特别是能处理有严重遮挡和姿势变化的情况,而且减少了模型的复杂度。
上图展示了其他辅助属性的检测结果,人脸特征点检测这一任务可以与多个辅助任务同时进行,对比以前的CNN和Cascaded CNN,文章具有更好的表现性
要点:
(1)对于不同的任务,具有不同的特点,文章给出的解决方法是tasks-constrained deep model。
传统的多任务学习给每个任务都赋予相同的权重:
一般的多任务学习则把主任务(特征点)和其他任务(辅助属性)分开处理,如下:
而文章采用对主任务(regression)采用最小二乘法作为损失函数,对辅助任务(classification)使用交叉熵损失函数,如下:
从这个式子上可以看到,损失函数的前半部分(f为线性函数)就是特征点检测,后边部分(p为softmax函数)是不同分类任务的loss相加,最后一项是正则化项。
在训练的时候,各个任务使用相同的特征,只有在最后一级的时候才根据任务的不同做不同的处理(线性回归/分类)。
(2)不对于多任务而言,不同的任务有着不同的损失函数,学习难度也不同,因此它们的收敛速度也可能相异。现有的解决这个问题的方法是通过探索这些任务的关系来解决,比如说通过所有任务的权重协方差矩阵,但是这篇文章提出了一个更有依据的方法:task-wise early stopping。
当辅助任务达到最好的表现之后,这个任务对主任务就没有什么帮助了,这个时候就可以停止这个任务。那我们如何判断这个辅助任务是否起到了它应起的作用呢,我们应该什么时候终止这个任务呢?如下式所示,前一部分表示训练误差的趋势,后一部分表示跟训练误差相比的泛化误差。如果两式乘积超过了某个阈值,则终止该任务。
文章所述,使用的是SGD(stochastic gradient descent)来更新任务的权重以及网络的过滤器,后向传播计算梯度使用的策略如下:
TCDCN所用的框架如下,输入是一个40x40的灰色图像,特征提取阶段包括4个卷积层、3个池化层和1个全连接层,过滤器的权重在空间上不是共享的,这意味着在输入map中使用的是不同的过滤器集合。选择绝对值整流的双曲正切作为激活函数;最大池化在没有重叠的区域进行,跟在四个卷积层后的全连接层生成一个特征向量,这个特征向量在估计阶段的时候被多个任务共享,其中线性回归(Linear regression)用来得出标记点位置,多个逻辑回归(logistic regression)用来处理其他多个人任务。
评估准则使用的额是均值误差和失败率来衡量,mean error通过计算landmark和the ground truths的距离,然后相对于双目距离进行标准化得出,Mean error大于10%则认为失败。
下图是Facial Landmark Detection(FLD)和用其他辅助属性进行比较的结果,很明显可以看出使用辅助属性进行特征点检测的误差和失败率比没有使用辅助属性的要低得多,而且使用的辅助属性越多,性能及越好。
还推荐一篇作者同类型的文章:《Learning Deep Representation for Face Alignment with Auxiliary Arribute》提出用辅助属性的脸部对齐的深度表示
相关文章推荐
- 人脸特征点检测:TCDCN
- 基于Gabor特征提取和人工智能神经网络的人脸检测matlab代码
- 浅析人脸检测之Haar分类器方法:Haar特征、积分图、 AdaBoost 、级联
- 浅析人脸检测之Haar分类器方法:Haar特征、积分图、 AdaBoost 、级联
- 基于Boost方法的人脸检测(3):特征生成、特征值计算(积分图)
- Python-OpenCV人脸检测---直接调用训练好的Harr特征
- 关于人脸检测中的Haar特征提取
- Haar、pico、npd、dlib等多种人脸检测特征及算法结果比较
- Haar-like特征人脸检测
- 二维图像人脸(包括人脸特征点)检测(附链接代码)
- 人脸识别之人脸检测(十五)--改进版VJ人脸检测(LBP特征,VISAPP2017)
- 浅析人脸检测之Haar分类器方法:Haar特征、积分图、 AdaBoost 、级联
- opencv人脸检测(haar特征+AdaBoos分类器)(一)
- Facial Landmark Detection(人脸特征点检测)
- 浅析人脸检测之Haar分类器方法:Haar特征、积分图、 AdaBoost 、级联
- OpenCV+Dlib实现人脸68个特征点检测
- OpenCV中基于Haar特征和级联分类器的人脸检测
- 人脸识别之人脸检测(八)--HOG特征原理及实现
- 利用OpenCV的Haar特征目标检测方法进行人脸识别的尝试(一)
- 【人脸检测】Haar分类器原理1——矩形特征与积分图