论文:Face Alignment at 3000 FPS via Regressing Local Binary Features.pdf

实现:https://github.com/luoyetx/face-alignment-at-3000fps

摘要&介绍:

论文有两个新颖的点,一是采用局部二值特征,二是用局部性规则指导学习这些特征,最终的识别效果和实现速度俱佳。

论文首先夸赞了一番——形状回归(shape regression ),该方法已经被业内广泛认可,其高精度和强鲁棒性主要得益于三点:1)区分能力强;2)形变可控;3)能带得动大量数据训练。

形状回归方法遵循级连原则,假设其初始形状为S0,S通过在每一层预测一个增量∆S来不断修正其自身, ∆St表示在t层获得的增量,其公式的一般形式如下所示:

I表示输入图像,St-1 为上一层的结果,Φt  是一个特征映射函数,Wt是一个线性回归矩阵,采用的特征为shape-indexed。

Φt最开始用的是一些诸如SIFT等的设计好的特征,其取得了不错的表现,人们认为利用学习获得的Φt能够取得更佳的效果,然而并不是这样,之所以没有获得增强的原因有两点:一是选择整张图片训练输入数据会导致特征群过于庞大;二是过量的噪声同样带来大量的噪声,这会导致其过拟合,从而在测试集上准确率不高。

本篇论文的着手点就在 Φt上,针对上面提到的问题,作者提出了一种局部性原则,可以理解为如下两点:

1)对于确定某个关键点的最有用的信息往往集中于上一层预测的该关键点周围。

2)其他关键点的位置信息和该关键点的局部信息足以用于预测该关键点位置。

基于这一原则,我们可以将特征锁定于局部然后联合这些关键点确定最终形状。

这样,就可以将Φt分步到所有关键点上,对应每个关键点,都有一个φlt。通过这种做法,可以显著降低噪声,剔除非关键特征,降低计算复杂度。

对于每一个φlt,利用回归树诱导二值特征,所有二值特征来自于局部信息,当构建完所有φlt后组合为Φt,学习Wt回归整体形状。

训练过程:

训练分两步,先训练Φt,然后组织其结果用以训练Wt,其过程如下图所示。

1、训练Φt

目标函数:

其中i表示所有训练数据,l表示关键点,t表示训练层树,πl 表示提取 l 点。

公式的前半部分表示当前形状与实际形状的增量,后半部分表示当前形状与预测形状的增量。

引用自:http://blog.jobbole.com/85783/

Φ代表特征提取函数,论文中称Φ的输出为局部二值特征(LBF),W为线性回归参数矩阵,其实就是把提取出来的特征映射到一个二维的偏移量上,是一个2*lenth(特征空间维数)的变换矩阵。

首先讲Φ是怎么训练的:Φ其实就是一个随机森林。输入像素差特征(pixel-difference features),输出一个offest。训练的时候随机给每个根节点像素差特征中的一部分。非叶节点的分裂依据是从输入的pixel-difference features中找出能够做到最大的方差衰减的feature。在最后的叶子节点上写上落在叶子节点上的样本偏移量,这个偏移量在之前说到的fern里有用,但是在这里没啥用,因为作者最后不是用这个做回归的而是用LBF,详细的得往下看。如果有多个样本都落在这里,则求平均。这样训练出来的东西就是下面这个公式所表达的东西:

但是我只想要其中的Φ,于是这里给出了LBF(local binary feature)的定义,直接简单粗暴地统计所有树叶节点是否被该样本落入,如果落入了就记为1否则记为0,然后把所有的01串连起来就是LBF了。还是看图说话:

先看b,随机森林的三棵树,样本经过三棵树后分别落在了第1,2,3个叶子节点上,于是三棵树的LBF就是1000,0100,0010.连接起来就是100001000010.然后看a,把27个特征点的lbf都连接起来形成总的LBF就是Φ了。
接下来是训练w:之前已经得到了wΦ(I,S)以及Φ(I,S),现在想求w,这还不容易吗,直接算呀。不过作者又调皮了,他说他不想求w,而是想求一个总的大W=[w1,w2,w3,…,w27].怎么求呢?得做二次回归。至于为什么要这么做下面会介绍。目标函数:

后面加了个L2项,因为W是炒鸡sparse的,防止过拟合。做线性回归即可得到W。
现在解释一下为啥不直接用w1w2w3…而是要再回归出来一个W:原因有两个:
1. 再次回归W可以去除原先小wi叶子节点上的噪声,因为随机森林里的决策树都是弱分类器嘛噪声多多滴;
2.大W是全局回归(之前的一个一个小w也就是一个一个特征点单独的回归是local回归),全局回归可以有效地实施一个全局形状约束以减少局部误差以及模糊不清的局部表现。
这样一来,测试的时候每输入一张图片I,先用随机森林Φ求出它的LBF,然后在用W乘一下就得到了下一个stage的shape,然后迭代几次就得到了最终的shape。所以效率十分的快。

【论文笔记】Face Alignment at 3000 FPS via Regressing Local Binary Features相关推荐

  1. 论文《Face Alignment at 3000 FPS via Regressing Local Binary Features》笔记

    论文:Face Alignment at 3000 FPS via Regressing Local Binary Features.pdf 实现:https://github.com/luoyetx ...

  2. 人脸对齐--Face Alignment at 3000 FPS via Regressing Local Binary Features

    Face Alignment at 3000 FPS via Regressing Local Binary Features CVPR2014 https://github.com/yulequan ...

  3. Face Alignment at 3000 FPS via Regressing Local Binary Features(CVPR2014)读后感(first pass)

    Face Alignment at 3000 FPS via Regressing Local Binary Features(CVPR2014)读后感(first pass) 这篇文章还是通过训练形 ...

  4. Face alignment at 3000 FPS via Regressing Local Binary Features

    最近在网上找了三个程序,一个程序是buding 找到给我的,是face alignment 的程序,网址是: http://www.csc.kth.se/~vahidk/face_ert.html 这 ...

  5. 《Face alignment at 3000 FPS via Regressing Local Binary Features》阅读笔记

    文章目录 一.前言 二.基于形状回归的人脸对齐算法 三.previous work 四.算法的具体实现 4.1 $\phi^{t}$ 的训练 4.2 全局线性回归矩阵 $W^{t}$ 的训练 五.局部 ...

  6. face alignment by 3000 fps系列学习总结(三)

    训练 我们主要以3000fps matlab实现为叙述主体. 总体目标 我们需要为68个特征点的每一个特征点训练5棵随机树,每棵树4层深,即为所谓的随机森林. 开始训练 分配样本 事实上,对于每个特征 ...

  7. 【论文笔记】AAAI2022:Do Feature Attribution Methods Correctly Attribute Features?

    CV可解释性方向,第一次整理论文笔记,如有错误请批评指正. 原文链接:https://www.semanticscholar.org/paper/Do-Feature-Attribution-Meth ...

  8. face alignment by 3000 fps系列学习总结

    我们主要讲一讲Github上给出的matlab开源代码<jwyang/face-alignment>的配置. 首先声明:本人第一次配置的时候也是参考了csdn一个作者和github给出的说 ...

  9. Face Alignment by 3000 FPS系列学习总结(一)

    广播: 如今的opencv已经提供了LBF的训练和测试代码,推荐阅读 <使用OpenCV实现人脸关键点检测> face alignment 流程图 train阶段 测试阶段 预处理 裁剪图 ...

  10. face alignment by 3000 fps系列学习总结(二)

    准备初始数据 mean_shape mean_shape就是训练图片所有ground_truth points的平均值.那么具体怎么做呢?是不是直接将特征点相加求平均值呢? 显然这样做是仓促和不准确的 ...

最新文章

  1. ADO.Net练习1
  2. IOS用CGContextRef画各种图形(文字、圆、直线、弧线、矩形、扇形、椭圆、三角形、圆角矩形、贝塞尔曲线、图片)...
  3. vhdl变量除法_VHDL语法总结以及编码风格(二)
  4. [转]第一章 Windows Shell是什么 【来源:http://blog.csdn.net/wangqiulin123456/article/details/7987862】...
  5. mysql gid_mysql主从复制5.6基于GID及多线程的复制笔记
  6. mysql partition 性能_通过分区(Partition)提升MySQL性能
  7. 微信小程序实战开发视频
  8. HDU - 3564 Another LIS(LIS+线段树)
  9. Oracle和al,ORACLEAL TERTABLE
  10. 利用 perl 调用 Java 类,通过读取文件 获取调用类返回值
  11. (转)MTK softkey流程 必看
  12. 【c语言复习笔记】初始c源程序及其数据类型
  13. 一组这几年,美国人均寿命变化的数据
  14. 腾讯手游助手吃鸡一直服务器繁忙,腾讯手游助手里的吃鸡鼠标移动太快怎么办?...
  15. 王道数据结构代码笔记
  16. word中如何去掉页眉横线?
  17. 记录一下Material Dialogs的使用
  18. php mb_eregi_replace 只替换一个,php正则ereg ereg_replace eregi eregi_replace split
  19. 是什么原因才导致网站打开速度慢?
  20. 前端类库开发最佳实践

热门文章

  1. 线性代数知识荟萃(2)——矩阵运算理论
  2. 一维搜索——进退法matlab实现(含代码)
  3. Java中做比较介绍
  4. k邻近算法应用实例(一) 改进约会网站的配对效果
  5. QQ去除未读状态的动画
  6. DOM操作style样式——link、style、p style=''的区别
  7. Linux中grep命令使用方法
  8. 标准I/O缓冲:全缓冲、行缓冲、无缓冲
  9. Bristol的第6篇密码学
  10. 20170830 - A - Java IO操作