One Millisecond Face Alignment with an Ensemble of Regression Trees人脸对齐 级联回归树 ERT GBDT

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010821666/article/details/81537254

级联回归属于人脸对齐中的判别方法,优点和缺点如下:
优点:
- 通过对initial shape进行调整,可以简单方便地进行数据增广。
- 能够有效训练大规模数据
- 简单,通用性强,替换不同的特征和模型方便,计算效率高。

缺点:
- 大pose下效果差(跟initial shape主要是mean shape有关)。
用来做姿态估计可能并不太适合。

论文摘要

本文主要面向使用单幅图像进行人脸对齐的问题。我们展示了如何利用级联回归树,从像素强度(像素灰度值)的稀疏子集中估计人脸关键点的位置,并且取得了很好的预测效果以及完全可实时应用的性能。我们提出了一个基于gradient boosting学习级联回归树,优化平方误差loss,并且能够处理标注不全数据的方法。我们展示了如何使用合适的先验来利用图像数据的结构帮助高效的特征选择。我们同样调研了不同的归一化策略和这些策略对于防止过拟合的重要性。另外,我们分析了训练数据的质量对于预测的影响,并研究了使用合成数据及性能数据增广的影响。

参考:https://blog.csdn.net/App_12062011/article/details/78661992
“此算法通过建立一个级联的残差回归树(GBDT)来使人脸形状从当前形状一步一步回归到真实形状。每一个GBDT的每一个叶子节点上都存储着一个残差回归量,当输入落到一个节点上时,就将残差加到该输入上,起到回归的目的,最终将所有残差叠加在一起,就完成了人脸对齐的目的。”

Method

1. 回归器的级联 the cascade of regressors

这里写图片描述
其中 S ( t ) 表示第t级回归器的形状,是一个由坐标组成的向量,t表示级联的级数,I为图像, r t 表示当前级的回归器,是需要训练的量。
更新策略采用GBDT梯度提升决策树,即每级回归器学习的都是当前形状(当前形状初始时为initial shape也就是mean shape)与ground truth形状的残差。

代码见shape_predictor.h
参数及含义
这里写图片描述

  • 级联的级数表示GBDT的棵树,相互独立,有10棵GBDT就有10个特征池。
  • 每层级联包含树的数目就是每棵GBDT有多少棵树。500表示一共有10*500棵树,每一个需要学习的回归器 r t 由500个弱回归器组成。
  • 树的深度指的是每棵子树的深度,深度为5则叶子节点为32个。
  • 特征池的size,就是特征池中选择多少个坐标点。
  • num_test_splits,是指同一棵GBDT中,每一次节点分裂,都从特征池中挑出20对点,随机产生20个阈值进行分裂。
  • oversampling_amount 初始化的时候随机生成shape的倍数。R is the number of initialisations user per image.

2.学习级联中的每一个回归器 learning each regressor in the cascade

也就是训练rt。
通过GBDT来表示初始形状与真实形状的关系,输入时从当前图像中提取出的特征,用像素差作为特征(特征是树进行分裂的依据)。
构建一个GBDT 中的第一棵树,将N张图片输入这一棵树,图片会落入其中一个叶子节点,全部分完后(有些叶子节点可能会没有图片落入,有的叶子节点会有多张图片落入),计算残差(残差的含义是每一张图片的当前形状与真实形状之间的差值),同一个叶子节点中的所有残差取平均,保留在这个叶子节点中。
GBDT中的第二棵树要基于第一棵树,使用残差+图片current shape->current shape,来更新current shape。依次类推,构建一整棵GBDT。

3.基于树的回归器 tree based regressor

3.1 形状不变的分裂测试 shape invariant split tests

3.2选择节点进行分裂 choosing the node splits

3.3 特征选择 feature selection

特征选择和每棵树中的节点如何分裂,合并起来一起说。
特征是像素差 pixel difference。
建立一个特征池feature pool(所有的GBDT树,比如说10棵,相互独立,那就有10个特征池)。特征池中有几百上千个随机挑选的点的坐标(对应于每一幅图像中的不同像素值)。
节点分裂的时候,从特征池中挑选两个点,计算每一幅图像在这两个点的像素值和像素差pixel difference,然后随机产生一个分裂阈值,使用分裂阈值作为分裂依据,如果像素差小于这个阈值向左分裂,反之向右分裂。
重复这样的过程,可以将所有的图片分为两部分(一个节点分裂,将图片分为左右两部分),然后根据方差判断根据哪两个点(特征池中挑选的)和哪个阈值分裂地比较好,就选择这个点和阈值。

依次分裂直至叶子节点(都是二叉树,且深度指定,叶子节点的数量是固定的)。
这里写图片描述
这里写图片描述

4. 处理缺失标签 handling missing labels

Experiments

猜你喜欢

转载自blog.csdn.net/u010821666/article/details/81537254
今日推荐