(论文分析) Object Detection -- Class-Specific Hough Forests for Object Detection
Class-Specific hough forests for object detection
从这篇文章中我们可以学习到generic hough transform 和 random forest 的应用
Hough Forests 如何建造呢?
对于Hough forests, 每棵树基于一系列patch 进行建造,其中
进行建造,其中 是这个patch的appearance,
是这个patch的appearance, 是这个patch的标签,
是这个patch的标签, 是这个patch离object中心的偏移(offset)。
是这个patch离object中心的偏移(offset)。
下面我们具体描述一下如何从训练样本中抽取这些patch :
从背景图像中抽取得到的patch,其类别标签 ,从使用bounding boxes框住的图像内部抽取的patch其类别标签为
,从使用bounding boxes框住的图像内部抽取的patch其类别标签为 。对于每一个object patch也赋予一个从bounding box 中心(即目标中心)到patch中心的偏移。对于一个background patch这个offset不赋值。
。对于每一个object patch也赋予一个从bounding box 中心(即目标中心)到patch中心的偏移。对于一个background patch这个offset不赋值。
在所构建的树上,对于每一个叶节点,在训练时到达这个叶节点的所有patch的信息保存。于是,我们存储 (到达这个叶节点的object pathes的比例)和
(到达这个叶节点的object pathes的比例)和  针对于所有到达这个叶节点的object patches的偏移值(用于投票使用)。于是这棵树的叶子节点就形成了一个用于目标中心可能位置的discriminative codebook。在运行时,这些信息用来对object的所有可能位置进行投票。
针对于所有到达这个叶节点的object patches的偏移值(用于投票使用)。于是这棵树的叶子节点就形成了一个用于目标中心可能位置的discriminative codebook。在运行时,这些信息用来对object的所有可能位置进行投票。
我们应该选用什么样的patch appearance 和 binary tests呢?
在训练和测试时,所有的patches 使用一个固定大小,例如16*16,对于apperance 可以使用扩展的特征通道来定义。于是一个patch 的apperance可以写成 ,其中
,其中 是一个16*16的图像,
是一个16*16的图像, 是通道数。
是通道数。
对一个patch appearance 的二值测试 能够用许多方式来定义,但是作者选择基于pixel 测试。像这样的测试使用通道索引
能够用许多方式来定义,但是作者选择基于pixel 测试。像这样的测试使用通道索引 ,两个位置
,两个位置 和
和 ,阈值
,阈值 ,从而测试可以写成如下形式:
,从而测试可以写成如下形式:

现在我们开始建立树了:
Hough forests 中树的建立遵循这一般随机森林的框架。每一棵树从根开始迭代建立。在构建过程中,每个节点收到一系列training patches。如果节点深度等于一个最大值( )或者patches的数目很小(
)或者patches的数目很小( ),被构建的节点就可以成为一个叶节点,并且叶节点的信息
),被构建的节点就可以成为一个叶节点,并且叶节点的信息 被累计并且存储。否则一个非叶节点被创建并且一个最优的测试(binary test)被挑选。
被累计并且存储。否则一个非叶节点被创建并且一个最优的测试(binary test)被挑选。
如何挑选这个最优测试呢?
核心原则:越走向叶节点,所接收到得patches的类别标签和偏移向量的不确定度逐渐减少。为了实现这个目标,作者定义了两个对patch不确定性的测量方法。假设对于一个节点收到的patches 。class-label 不确定性,其是用来衡量class labels
。class-label 不确定性,其是用来衡量class labels  的不纯性:
的不纯性:

其中,entropy定义为 。
。
偏移不确定性,其用来衡量偏移向量的不纯性:

其中 是平均偏移。
是平均偏移。
注意我们忽略背景patches。
现在两个测量不确定性的方式已经给出,我们采用如下的方式进行binary tests。给定一系列training patches
 ,我们依靠均匀抽样
,我们依靠均匀抽样 来产生一系列像素测试
来产生一系列像素测试 。然后随机决策被建立。一般来说,除非negative patches 太少,我们等概率地选择,在这种情况下,选择最小化offset uncertainty。最后我们选择可以使两个不确定度测量都最小化的binary test
。然后随机决策被建立。一般来说,除非negative patches 太少,我们等概率地选择,在这种情况下,选择最小化offset uncertainty。最后我们选择可以使两个不确定度测量都最小化的binary test 

如何使用hough forest 进行目标检测呢?
现在假设 对应于在图像中的位置
对应于在图像中的位置 目标出现的随机事件。我们感兴趣的时计算
目标出现的随机事件。我们感兴趣的时计算 ,其可以解释为这个patch的appearance
,其可以解释为这个patch的appearance 可以带来在图像中得位置
可以带来在图像中得位置 处的
处的 事件。
事件。
我们需要区分两个情况:是否 属于以x为中心的bounding box
属于以x为中心的bounding box  。如果
。如果 ,那么我们可以假设
,那么我们可以假设 对于
对于 是没有信息价值的。
是没有信息价值的。
在这片文章中,作者假设第二种情况 。于是我们有:
。于是我们有:

对于第一项的估计方法如下:
使用基于在训练中在叶节点存储的偏移向量集 ,和 Parzen-window进行估计。第二项可以直接使用在训练期间的object patches 的比例
,和 Parzen-window进行估计。第二项可以直接使用在训练期间的object patches 的比例 。对于一棵单独的树,我们有
。对于一棵单独的树,我们有

而对于一个森林呢?

(6)和(7)定义了一个single patch的关于目标是否存在的概率投票。为了整合来自于不同patches的投票信息。我们使用一种additive way累计他们进入2D Hough 图像:

如果我们完全按照(6)~(8)来进行计算的话,这是没有效率的。作者给出了更好的策略

| 见即将公布的 eagleeye 框架 | 
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号