极市吧 关注:17贴子:87
  • 4回复贴,共1

极市分享 | CVPR论文《Face Alignment at 3000 FPS 》阅读笔记

只看楼主收藏回复

本文为极市平台原创编译,作者为缨宁。首发地址 原创|CVPR论文《Face Alignment at 3000 FPS 》阅读笔记。
《Face Alignment at 3000 FPS》 又是msra孙剑组一篇cvpr大作,之前实现了他之前的一篇《Face Alignment by Explicit Shape Regression 》(ESR), 当时速度应该是50fps左右,新算法已经到了3000fps。前一篇的思路是双层随机蕨做回归器 + shape indexed feature(计算复杂度相当低)。这一次用的思路是先学习每个landmark做feature mapping,然后再学习一个全局回归。


1楼2017-06-29 18:35回复
    训练流程





    2楼2017-06-29 18:38
    回复
      特征提取
      shape-indexed feature
      这是在12年那篇提出的特征提取方式,使用的是像素对之间的差值来计算特征,这种提取方式计算复杂度非常低,也助理整个算法的提速。
      整体流程是:
      1. 为了保证特征在脸部尺度变化和旋转情况下的稳定性,首先要计算一个从当前形状到平均形状的的变换矩阵;
      2. 对转换后的图像的每个像素,都使用离其最近的一个landmark来作为这个像素的index;
      3. 随机的在这些像素中选取P个,可以生成P2 个像素对;
      4. 每个像素对之间intensity的差值即可以作为特征值。

      其中的精华是第二步,给每个像素使用离他最近的landmark来打index,这样index相同的像素其实是拥有相似的语法意义的,如都是眼角附近的像素, 如图a。这种方式比起使用全局的坐标来打index,更加的鲁棒。
      在ESR中,其实只需要在P2 个特征中选取F个(很多特征是不独立的,几近重复的),于是使用了correlation-based的方法来选取合适的特征。首先使用回归目标投影到一个随机的方向上产生一个scalar,然后选择F个和这个scalar相关度最大的Feature。
      在3000fps中,为了加速,每个随机森林的学习目标是某一个landmark,所以只会在当前的landmark附近随机选取一对像素来作为shape-index feature,整个特征空间就会小很多。
      pixel difference feature
      即将两个像素点的值相减得到一个差值


      3楼2017-06-29 18:38
      回复
        随机森林 Φt 训练
        训练的目标函数如下

        这里使用的是随机森林来对每个landmark进行特征映射。建立随机森林的一个关键点就是选择split node的规则。
        首先确定一个landmark,对此landmark来构建随机森林。首先在此landmark附近的一个区域随机的选取500对pixel difference feature,并且选取其中能让方差降低程度最大的作为split threshold。 训练后,每个叶子节点上存储了落在此节点上所有样本的2-d平均偏移量。
        在测试阶段,一个样本在某个随机森林上的数据就是起所有叶子节点上输出的值,即



        4楼2017-06-29 18:40
        回复
          全局线性回归器Wt训练
          回归目标如下:

          测试流程


          5楼2017-06-29 18:41
          回复