参考文献:
Zhang J, Kan M, Shan S, et al. Leveraging Datasets With Varying Annotations for Face Alignment via Deep Regression Network[C]//Proceedings of the IEEE International Conference on Computer Vision. 2015: 3801-3809.
目前网上公布的人脸关键点的数据集很多,但标注标准却往往不统一、标定点数也不尽相同。将这些数据合并起来非常重要,但是训练一个统一的模型却比较困难。ICCV 2015的这篇文章提出了一种基于深度回归网络(deep regression network)和稀疏形状回归方法,能够在不同点数的数据集上训练一个统一的关键点检测模型,同时能够取得比单个训练集更好的结果。
算法流程如图所示:
假设有若干不同点数、不同图片的人脸关键点数据集,(1) H 表示稀疏形状回归模型,它能将估计每个数据集中相对于所有数据集关键点类型总和的未标注的关键点; (2)将每个数据集的关键点个数通过 H 补齐后, F 表示深度回归网络,训练和检测图片中所有的关键点的检测模型。(1)(2)过程是一个反复迭代更新的过程。通过这样的一个训练过程,就能训练一个能够合并所有不同数据集的人脸关键点检测模型。
假设有 n 个人脸关键点数据集 {D1,D2,...,Dn} ,每个数据集包含了不同点数 pi 的关键点 Si∈Rpi×2 。作者目标是建立一个深度回归网络 F ,可以检测所有关键点类型的合集 S=S1∪S2∪...∪Sn 。这样就需要根据ground truth和初始化形状 S¯ ,求解满足以下公式的 F :
F∗=argmin F∑I∈D||S−(F(ϕ(I,S¯))+S¯)||22
其中 I 为数据集D D 中的人脸图片, ϕ 为特征提取函数。
数据集 Di 只有第 i 类型的关键点,其它类型的关键点并不存在。但是可以根据不同类型关键点之间的相关性,使用其它数据集的关键点来估计当前数据集的关键点。作者使用了稀疏表达模型 H 来估计这些并不存在的关键点,因此以上公式就演变为:
{F∗,H∗}=argminF∑I∈D||SH(I)−(F(ϕ(I,S¯))+S¯)||22
当 I∈Di 时, H 第 i 种类型的关键点是已经标注好的,而其它 n−1 种类型的关键点则使用 H 估计生成。
与 SDM/LBF类似,作者也使用了回归方法训练和测试图像特征到关键点位置的映射,区别是使用深度回归网络从初始形状开始回归 (深度学习已经占领各领域,不能被落下呀):
ΔS=F(I)=(fl(fl−1(...f1(ϕ(I,S¯)))))
其中 fl 为深度回归网络的第 l 层隐层。
虽然各个数据集 Di 的关键点定义并不相同,但是之间有着很强的关联,作者使用了稀疏矩阵根据其它数据集的关键点类型来估计当前数据集上未标记的关键点, H=[Sˆ1;Sˆ2;⋅⋅⋅;Sˆi−1;Si;Sˆi+1;⋅⋅⋅;Sˆn]∈Rp×2 :
Sjˆ=Hij∗Si
其中 Hij∈Rpj×pi 是 一个 估计 Di 数据集中未标记的关键点 Sj^∈Rpj×2 的稀疏矩阵。
这样总流程的公式,可以写为另一种形式:
{F∗,H∗}=argminF,H∑ni=1∑I∈Di||Hi∗Si(I)−(F(ϕ(I,S¯))+S¯)||22
上述公式有两个模型参数需要训练,作者采用了固定一个参数,训练另一个的迭代循环直到收敛的方法来求最优解。
每次迭代过程,作者采用了 L-BFGS 方法 (On optimization methods for deep learning,这个以后细看)解决。
与以往算法的不同
(1)“Collaborative facial landmark localization for transferring annotations across datasets”论文中提到的算法,需要根据训练集和测试集所有图片的关系估计映射关系,再对测试集所有图片进行关键点检测,而且训练过程中,也是针对各个数据集分别训练不同的模型。而本论文算法是将所有的数据集整合进行统一关键点数模型的训练,最终得到一个检测模型,能够方便地对一张图片进行单独检测。
(2)“Transferring landmark annotations for cross-dataset face alignment”论文中的算法 transductive alignment method (TCR)需要不同数据集的关键点的交集作为相互关联,而且在估计未标记的关键点之后,不会再有更新。而本文则不需要关键点的交集作为关联,而且在模型参数训练的过程中,估计的关键点在每次迭代过程中都会随着模型的变化而更新,因而也更加准确。
实验结果
1、作者将不同的数据集相整合进行模型训练,比基于不同的训练集单独训练的模型的精度有所提高,但比真实的数据略差些(这也在情理之中):
2、作者将DRN和SSR方法相结合,进一步提高了DRN的准确率:
3、作者又将DRN-SSR与之前的SDM、RCPR进行了比较,实验结果均优于这些算法:
作者通过 DRN和SSR将多类人脸关键点数据融合,取得了比单个数据集训练模型更好的结果,最终的模型也较为实用(可为我所用,毕竟手头数据多,怎样整合一直比较头疼)。
前一段时间由于操作失误,将这篇博客不小心删除(同时小吐槽下csdn的博客设置)。我这里没有备份,准备重写时无意发现网络上有人转载了我这篇文章(当然没有写明出处,公式也是乱码),我就拿过来回笼了一篇。这也算是盗版给原作者的贡献了,哈哈。