这么渣的效率可咋办呢?以上内容已经证明了alignment确实对detection的preciseness有帮助,这就够啦,对下面的工作也是个启发——能不能在做detection的同时把alignment做了呢?alignment的中间结果是否能给detection带来一些帮助呢?后面慢慢讲。先说两个通用的面部检测和矫正的模型:
1.级联检测分类器(bagging):不失一般性,一个简单的级联分类器是这样的:
图中的Ci代表的是第i个弱分类器。x代表的是特征向量,f代表分类得分。每个Ci会根据自己的分类方法对x输出一个分类结果,比如是一张脸或者不是一张脸,而fn(n=1~N)都会对应一个thresholdΘi,让任意一个fn小于对应的Θi的时候,样本就会被拒绝。通常不是一张脸的图片在经过前几个弱分类器的判断后就会被拒绝,根本不用做后面的判断,所以速度很快。
2.级联回归校准(我这翻译…+_+):这里介绍的是另一个人在10年发的文章:Cascaded Pose Regression (CVPR10),给图像一个初始shape(通常采用平均shape),然后通过一次一次的回归把shape回归到正确的地方。算法结构很简单,但是效果确实非常好:
回归过程如下:首先提取特征,原作者采用的是Pose-Indexed point features,然后根据特征训练回归函数(可以用线性回归,CART,随机森林等等),原作者采用了一个叫Random Fern Regressor的东西,这里翻译成随机蕨好了(这名字…),回归出这一阶段的偏移量,然后shape加上这个偏移量,反复这一过程,直到迭代上限或者shape错误率不再下降。随机蕨的算法过程和随机森林类似,他是一个半朴素贝叶斯模型。首先选取M组每组K个特征建立M个蕨(弱分类器),然后假设蕨内特征是相关的,蕨间特征是独立的,这样从统计学上随机蕨是一个完整的把朴素贝叶斯分类器,让计算变得简单:
式中C代表分类,ci代表第I类,M代表蕨数量。
综上,这样回归的过程可以总结成如下形式:
S代表shape,St代表在回归第t阶段的shape,他等于上一阶段的shape加上一个偏置,这个偏置就是上述回归方法之一搞定的。比如随机森林或者随机蕨,或者线性回归。
现在再说说怎么训练得到这个回归Rt。
有两种思路:一种是像刚才随机蕨那样,每个每个蕨的叶子节点存储一个偏移量,计算训练的时候落入这个叶子节点的样本偏移之平均,然后作为最终的叶子节点偏移量。其实就是在优化一个如下目标函数:
然而MSRA组在3000fps中采用的是另一种方法,形状的偏移量ΔδS为:
目标函数是:
其实也是同样的思路,Φ代表特征提取函数,论文中称Φ的输出为局部二值特征(LBF),W为线性回归参数矩阵,其实就是把提取出来的特征映射到一个二维的偏移量上,是一个2*lenth(特征空间维数)的变换矩阵。
首先讲Φ是怎么训练的:Φ其实就是一个随机森林。输入像素差特征(pixel-difference features),输出一个offest。训练的时候随机给每个根节点像素差特征中的一部分。非叶节点的依据是从输入的pixel-difference features中找出能够做到最大的方差衰减的feature。在最后的叶子节点上写上落在叶子节点上的样本偏移量,这个偏移量在之前说到的fern里有用,但是在这里没啥用,因为作者最后不是用这个做回归的而是用LBF,详细的得往下看。如果有多个样本都落在这里,则求平均。这样训练出来的东西就是下面这个公式所表达的东西:
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-22609-2.html
这家公司演变成三鹿
虽远必诛