LBF特征点对齐个人的一些理解:
1:训练
采用随机森林训练特征,假设的条件是特征符合概率分布!在每一个特征的局部区域内随机的选择特征,然后进行逻辑回归,预测点坐标的位置;训练随机的森林,随机树组成的随机森林,每一棵随机树,是由二叉树组成的;提取的500个特征,按照特征的灰度差值进行排序,然后训练随机树,让左右子树的最大方差减小,然后选择阈值,所有的非叶子节点,保存阈值;这样就可以训练一颗随机树;
2:训练样本选取的问题:
提取人脸小图,获得人脸矩形框,获得人脸关键点在人脸小图上的坐标;把所有的坐标转化为0到1之间的均匀分布;获得真实的关键点的坐标位置,根据坐标点预测的关键点的位置,计算之间的残差,让残差最小就可以得到一个随机森林,训练好的随机森林;选择样本的时候采用5倍的生成负样本,从而可以计算残差,然后让残差最小的!不断寻找阈值,总之就是让残差最小,此时就训练好了随机森林;
3:算法原理:
其算法思想是基于学习理论,将每个特征点用一个标准随机森林训练,使得森林能够记住各种姿态下的“特征点走势”,得到特征点的稀疏编码,再通过全局优化得到最终的标定结果。特征映射函数Φ,首先讲Φ是怎么训练的:Φ其实就是一个随机森林。输入像素差特征(pixel-difference features),输出一个offest。训练的时候随机给每个根节点像素差特征中的一部分。非叶节点的分裂依据是从输入的pixel-difference features中找出能够做到最大的方差衰减的feature,也就是信息增益变大最大的特征。在最后的叶子节点上写上落在叶子节点上的样本偏移量。
4: 随机森林的LBF理解
主要还是回答一下上面的几个子问题。
1. 随机森林的重点是挑选属性进行节点分裂,LBF将候选属性集定义为“当前特征点周围圆形邻域内的随机撒点”,如下图所示:
这样做的目的很直白,就是通过比较各个随机撒点(比如有500个)的信息增益值,挑选最小的那一个作为分裂属性,效果是使得初始的不准确特征点一点一点的向真实位置靠近。与众不同的地方在于,LBF将像素位置作为候选属性,这么做很灵活。
2. 在文中给出的特征是“pixel-difference feature”,看过它的引用文献,发现这个特征十分的简单,就是两个像素之间的灰度差,这恰好解释了LBF快速的原因(SDM用的是sift特征,大家想想吧!!),和其他人脸对齐算法一样,始终要利用纹理信息。
3. 分裂的依据就是信息增益值,这里举个例子,比如随机森林共有50棵树,候选属性个数为500,每棵树的训练样本个数为1000,那么在根节点上,我就要将这1000个样本的当前特征点与每个候选属性进行计算,也就是得到了500 * 1000个pixel-difference feature,然后对每一组pixel-difference feature计算信息增益值,也就是说得到了1000个信息增益值,然后挑选出最小的那个值所对应的候选属性作为当前节点的分裂属性,进一步,有了分裂属性,与事先设定的阈值进行比较,将1000个样本进行分类,共分为两类!不明白的是根据信息的增益,样本的标签是什么呢?是0或者1吗?还是连续的实数呢?不同的叶节点代表不同的偏移量,相同的偏移量归为一类。
4. 叶子节点中存放的本来是训练样本,但是为了之后的计算方便,要对训练样本与初始值做减法再做平均,于是存放的其实是偏移值。
5. 训练与测试过程的流程如下,测试样本在每棵决策树中只能抵达一个叶子节点,累加所有叶子节点中的偏移量,得到的就是最终的结果。LBF别出心裁,采用了一个稀疏编码完成这一过程。
在这里简单介绍一下信息增益的概念:
介绍信息增益之前,首先需要介绍一下熵的概念,这是一个物理学概念,表示“一个系统的混乱程度”。系统的不确定性越高,熵就越大。假设集合中的变量X={x1,x2…xn}
,它对应在集合的概率分别是P={p1,p2…pn}
。那么这个集合的熵表示为:
介绍完熵的概念,我们继续看信息增益。为了便于理解,我们还是以一个实际的例子来说明信息增益的概念。假设有下表样本
其中Positive为正样本(已流失),Negative为负样本(未流失),下面的数值为不同划分下对应的人数。那么可得到三个熵:
活跃度的信息增益比性别的信息增益大,也就是说,活跃度对用户流失的影响比性别大。在做特征选择或者数据分析的时候,我们应该重点考察活跃度这个指标。
http://www.fx114.net/89939/qa-116-170799.aspx
http://www.myexception.cn/cloud/1898080.html