参考文献:

Kazemi V, Sullivan J. One millisecond face alignment with an ensemble of regression trees[C]//Computer Vision and Pattern Recognition (CVPR), 2014 IEEE Conference on. IEEE, 2014: 1867-1874

简介

CVPR 2014的一篇关于人脸关键点检测的论文,基于Ensemble of Regression Tress算法(以下简称 ERT),速度极快(单人人脸关键点检测耗时约为1ms),效果也不错。同时又能处理训练集中部分关键点标定缺失的情况。

dlib 库中(http://dlib.net/),有这个算法的完整实现,包括训练和测试部分。

有paper,有code,对我们这些搞算法的底层人员,真是再happy不过了。

算法介绍

LBF(Face Alignment at 3000 FPS via Regressing Local Binary Features)这篇论文也是基于Tree的人脸关键点检测算法。LBF是基于Tree的方法,学习每个关键点的局部二值特征,然后将特征组合起来,使用线性回归检测关键点。与 LBF 不同的是, ERT 是在学习 Tree的过程中,直接将 shape <script type="math/tex" id="MathJax-Element-13">shape</script> 的更新值 ΔS <script type="math/tex" id="MathJax-Element-14">\Delta S </script>存入叶子结点 leaf node. 初始位置 S <script type="math/tex" id="MathJax-Element-15">S</script> 在通过所有学习到的 Tree后,mean<script type="math/tex" id="MathJax-Element-16">mean</script> shape <script type="math/tex" id="MathJax-Element-17">shape</script> 加上所有经过的叶子结点的 ΔS <script type="math/tex" id="MathJax-Element-18">\Delta S</script>,即可得到最终的人脸关键点位置。总体流程如下图所示:

总体流程图

用公式来表示:
S^t+1=S^t+rt(I,S^t) <script type="math/tex" id="MathJax-Element-19"> \hat S^{t+1}=\hat S^t+r_t(I,\hat S^t)</script>

其中 t <script type="math/tex" id="MathJax-Element-20">t</script> 表示级联序号,rt(,)<script type="math/tex" id="MathJax-Element-21"> r_t (\bullet,\bullet)</script> 表示当前级的回归器regressor。回归器的输入参数为图像 I <script type="math/tex" id="MathJax-Element-22">I</script> 和上一级回归器更新后的 shape<script type="math/tex" id="MathJax-Element-23">shape</script> , 采用的特征可以是灰度值或者其它。

为了训练每一级的 rt <script type="math/tex" id="MathJax-Element-24"> r_t</script>, 文章采用了 gradient tree boosting算法减小 initial shape 和 ground truth 的平方误差总和。

每个回归器由很多棵树(tree)组成,每棵树参数是根据 current shape 和 ground truth 的坐标差和随机挑选的像素对训练得到的。具体算法可详见论文(我还没有完全理解清楚)。

总结

跑过dlib代码后,使用默认参数,基本能够重现论文结果。不像LBF算法,无论怎么调参也很难达到论文中的结果。

速度跟LBF是一个数量级,精度也与SDM稍好一些,缺点就是模型稍大了些(基于随机树的算法似乎都是这样)。

后续还要进一步研究算法和论文。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐