看了很多网上写的霍夫森林的讲解,感觉他们讲的都不是很全面,所以想写这个东西,方便以后自己查阅。这里所写的是关于对行人检测的那篇论文。
很多人一看hough forest 是不是和hough transform有关。那天我讲ppt的时候给大家讲了一下hough transform,想从hough transform过度到hough forest要好一点。老实说很多人听了霍夫变换去听霍夫森林更是云里雾里的。如果想看hough transform 建议去看维基百科。如果知道hough transform对直线检测的话。你把在直线上的点想象成这里的一个个的patch,把直线在最后在数组上的投票想象成我们后面所说的投票。但是在对直线检测的时候我们检测的是一条确定的直线,在这里我们检测的是一个物体中心。你把直线想象成物体中心就ok了。
通过训练特定类的hough forest,各个局部图像块(patch)产生对物体中心位置的概率性投票(注意:这里说的是概率性投票,其实想表达的不是概率,因为相加之后不等于1),最后累加这些投票,选取最大值作为物体的中心。
特点:
1.叶子节点存的是具有判别性的码本。即一个patch来自背景还是物体,物体中心距离当前patch的位置。
2.hough forest可以优化投票性能,即叶子节点投票的不确定度再一直降低。(因为决策树在每个分支节点都想做到把不纯度降到最低)
3.用监督方法建立树。
ok,不知道别人怎么样,我第一次看到这个图像的时候一脸懵逼。其实这幅图我理解的意思是:先取局部图像块(图a中红绿蓝色的框框(patch),然后提取特征,得到训练集。(你可以这么联想,想象成通过提取hog特征,就得到了像西瓜书上面西瓜的纹路,响声那些特征,毕竟我们有特征才有办法计算不是)。 然后就要训练一颗决策树了。训练完所有的树后我们会得到很多叶子节点。叶子节点里面存放了两个值。
1. cl—即在一个叶子节点中,正样本的数量占所有样本数量的比例。
2. dl—在叶子节点中,属于目标的样本,到物体中心的位移向量
图b显示是通过cl,dl对目标中心的概率性投票。(你可以想象成横轴表达的patch的位置,数轴表达的是这个patch是目标中心的概率值,这个不对但是你可以这么理解)
———- 训练阶段结束 ————
图c显示的是我们用固定大小的框在测试图像上滑动的时候。框中所有patch块通过hough投票得到的总概率大小。越黑的地方概率值更大。
图d得到目标中心。
训练数据
s0={(v,c,y)}
v是图片块的特征,
c是分类标签(1表目标,0表背景),
y是该块的中心到目标中心的向量 2维:有大小和方向
c=1时候才会有y
C=0时,y—-undefined
这就是分类器, a代表的是选择的channel,也就是刚刚用hog提取的特征,一般得到的是9个channel(你可以想象成这里我们需要选择西瓜的纹理那些进行熵的计算)。
(p,q) (r,s)是随机选择的两个像素点。阈值也是随机选取。
是这是叶子节点存放的情况。
树停止生长的条件:
1.达到最大深度
2.训练集中只包含一类数据
3当前节点中包含的数据集数量小于最小限制。
目标函数
1.分类
2.回归
至于分类和回归的选择,是随机选取的。
有一种特殊情况就是,当在此分裂节点中,负样本数量小于5%时候,我们只做回归。
——-至此训练结束——–
现有一图像块(v(p),c(p),y(p))
p是这个块的中心点,现在不确定c(p)的取值
E(q)表示物体中心位于x时的随机事件
。
我们用一个固定大小的框(蓝色的框)在测试图像上去滑动)。我们只计算属于蓝色框框中的图像块的投票。
怎么计算——-
这就是cl和dl的作用(直接粘自己的ppt了)。第一项是用parzen window来估计(不会百度一下有很好的讲解)。第二项就是cl。
到这里得到了一颗树,关于一个图像块的投票结果了。
这个是hough森林关于这一个patch的结果。
这个是整个森林对属于蓝色框中所有的块做出的最终结果。
到这里我们就得到了目标中心。其实就是我们用的固定大小框的中心,只是因为这个框得到的最终结果最大,所以就将他作为中心而已。
然后说下是否剪枝的问题,其实可以剪枝。在随机森林中我们一般是不剪枝的,在这里剪枝可以加速检测速度。实验中发现将叶子节点中cl<0.5的叶子节点减掉,不影响森林的准确性。你可以想,在bounding box中,本来就有很多属于背景的图片块,所以剪枝大多都是包含很多背景块的叶子节点,这并不会影响最终结果。
小时候语文学的不好,看不懂的话轻喷。。。。