參考文献:
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. 算法总流程
算法流程如图所看到的:
如果有若干不同点数、不同图片的人脸关键点数据集。(1)H<script type="math/tex" id="MathJax-Element-540">\mathbf H</script> 表示稀疏形状回归模型,它能将预计每一个数据集中相对于全部数据集关键点类型总和的未标注的关键点; (2)将每一个数据集的关键点个数通过 H<script type="math/tex" id="MathJax-Element-541">\mathbf H</script> 补齐后, F<script type="math/tex" id="MathJax-Element-542">\mathbf F </script> 表示深度回归网络,训练和检測图片中全部的关键点的检測模型。(1)(2)过程是一个重复迭代更新的过程。
通过这种一个训练过程,就能训练一个可以合并全部不同数据集的人脸关键点检測模型。
如果有 n<script type="math/tex" id="MathJax-Element-543">n</script> 个人脸关键点数据集{D1,D2,...,Dn}<script type="math/tex" id="MathJax-Element-544"> \{ D_1, D_2, ..., D_n\} </script>,每一个数据集包括了不同点数pi<script type="math/tex" id="MathJax-Element-545">p_i</script>的关键点 Si∈Rpi×2<script type="math/tex" id="MathJax-Element-546">S_i \in \mathbf R^{p_i\times2}</script>。作者目标是建立一个深度回归网络 F<script type="math/tex" id="MathJax-Element-547">\mathbf F</script>,可以检測全部关键点类型的合集 S=S1∪S2∪...∪Sn<script type="math/tex" id="MathJax-Element-548">S = S_1 \cup S_2 \cup... \cup S_n </script>。这样就须要依据ground truth和初始化形状 Sˉ<script type="math/tex" id="MathJax-Element-549">\bar S </script>,求解满足下面公式的 F<script type="math/tex" id="MathJax-Element-550">\mathbf F</script>:
F?=argmin F∑I∈D||S?(F(?(I,Sˉ))+Sˉ)||22<script type="math/tex" id="MathJax-Element-551">\mathbf F^?=\arg \min \limits_{ \mathbf\ F} {\sum_{I \in D}||S- (\mathbf F(\phi(I, \bar S)) + \bar S)||^2_2} </script>
当中 I<script type="math/tex" id="MathJax-Element-552"> I </script> 为数据集D D 中的人脸图片,?<script type="math/tex" id="MathJax-Element-553">\phi</script> 为特征提取函数。
数据集 Di<script type="math/tex" id="MathJax-Element-554">D_i</script> 仅仅有第 i<script type="math/tex" id="MathJax-Element-555"> i </script>类型的关键点,其他类型的关键点并不存在。可是可以依据不同类型关键点之间的相关性。使用其他数据集的关键点来预计当前数据集的关键点。
作者使用了稀疏表达模型 H<script type="math/tex" id="MathJax-Element-556">\mathbf H </script> 来预计这些并不存在的关键点,因此以上公式就演变为:
{F?,H?}=argminF∑I∈D||SH(I)?(F(?(I,Sˉ))+Sˉ)||22<script type="math/tex" id="MathJax-Element-557"> \{\mathbf F^\ast , \mathbf H^\ast\} = \arg \min \limits_\mathbf F {\sum_{I \in D}||S_\mathbf H(I) - (\mathbf F(\phi(I, \bar S)) + \bar S)||^2_2}</script>
当 I∈Di<script type="math/tex" id="MathJax-Element-558"> I \in D_i </script>时,H<script type="math/tex" id="MathJax-Element-559">\mathbf H</script> 第 i<script type="math/tex" id="MathJax-Element-560">i </script> 种类型的关键点是已经标注好的,而其他 n?1<script type="math/tex" id="MathJax-Element-561">n-1</script> 种类型的关键点则使用 H<script type="math/tex" id="MathJax-Element-562">\mathbf H </script> 预计生成。
2. 方法流程细节
2.1 深度回归模型
与 SDM/LBF相似,作者也使用了回归方法训练和測试图像特征到关键点位置的映射。差别是使用深度回归网络从初始形状開始回归 (深度学习已经占据各领域,不能被落下呀):
ΔS=F(I)=(fl(fl?1(...f1(?(I,Sˉ)))))<script type="math/tex" id="MathJax-Element-24">\Delta S = \mathbf F(I) = (f_l(f_{l-1}(...f_1(\phi(I, \bar S)))))</script>
当中 fl<script type="math/tex" id="MathJax-Element-25"> f_l </script> 为深度回归网络的第l<script type="math/tex" id="MathJax-Element-26">l</script> 层隐层。
2.2 稀疏回归模型
尽管各个数据集 Di<script type="math/tex" id="MathJax-Element-27"> D_i </script>的关键点定义并不同样,可是之间有着非常强的关联,作者使用了稀疏矩阵依据其他数据集的关键点类型来预计当前数据集上未标记的关键点, H=[S?1;S?2;???;S?i?1;Si;S?i+1;???;S?n]∈Rp×2<script type="math/tex" id="MathJax-Element-28">\mathbf H = [\widehat S_1; \widehat S_2; \cdot \cdot \cdot; \widehat S_{i-1}; S_i; \widehat S_{i+1}; \cdot \cdot \cdot; \widehat S_n]\in \mathbf R^{p \times 2}</script>:
Sj?=Hij?Si<script type="math/tex" id="MathJax-Element-29"> \widehat {S_j} = H_{ij} \ast S_i</script>
当中 Hij∈Rpj×pi<script type="math/tex" id="MathJax-Element-30">H_{ij} \in \mathbf R^{p_j \times p_i} </script>是 一个 预计 Di<script type="math/tex" id="MathJax-Element-31">D_i</script> 数据集中未标记的关键点 Sj^∈Rpj×2<script type="math/tex" id="MathJax-Element-32"> \hat {S_j} \in \mathbf R^{p_j \times 2}</script> 的稀疏矩阵。
这样总流程的公式,可以写为还有一种形式:
{F?,H?}=argminF,H∑ni=1∑I∈Di||Hi?Si(I)?(F(?(I,Sˉ))+Sˉ)||22<script type="math/tex" id="MathJax-Element-33"> \{\mathbf F^\ast ,\mathbf H^\ast\}= \arg\min_\mathbf {F,H}\sum_{i=1}^n{\sum_{I \in D_i}||\mathbf H_i \ast S_i(I) - (\mathbf F(\phi(I, \bar S)) + \bar S)||^2_2}</script>
2.3 训练模型
上述公式有两个模型參数须要训练,作者採用了固定一个參数,训练还有一个的迭代循环直到收敛的方法来求最优解。
每次迭代过程,作者採用了 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将多类人脸关键点数据融合。取得了比单个数据集训练模型更好的结果。终于的模型也较为有用(可为我所用。毕竟手头数据多。如何整合一直比較头疼)。
PS
前一段时间因为操作失误,将这篇博客不小心删除(同一时候小吐槽下csdn的博客设置)。我这里没有备份,准备重写时无意发现网络上有人转载了我这篇文章(当然没有写明出处,公式也是乱码),我就拿过来回笼了一篇。
这也算是盗版给原作者的贡献了,哈哈。
<script type="text/javascript"> $(function () { $(‘pre.prettyprint code‘).each(function () { var lines = $(this).text().split(‘\n‘).length; var $numbering = $(‘
‘).addClass(‘pre-numbering‘).hide(); $(this).addClass(‘has-numbering‘).parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($(‘
‘).text(i)); }; $numbering.fadeIn(1700); }); }); </script>