(论文分析) 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的标签,
是这个patch离object中心的偏移(offset)。
下面我们具体描述一下如何从训练样本中抽取这些patch :
从背景图像中抽取得到的patch,其类别标签,从使用bounding boxes框住的图像内部抽取的patch其类别标签为
。对于每一个object patch也赋予一个从bounding box 中心(即目标中心)到patch中心的偏移。对于一个background patch这个offset不赋值。
在所构建的树上,对于每一个叶节点,在训练时到达这个叶节点的所有patch的信息保存。于是,我们存储(到达这个叶节点的object pathes的比例)和
针对于所有到达这个叶节点的object patches的偏移值(用于投票使用)。于是这棵树的叶子节点就形成了一个用于目标中心可能位置的discriminative codebook。在运行时,这些信息用来对object的所有可能位置进行投票。
我们应该选用什么样的patch appearance 和 binary tests呢?
在训练和测试时,所有的patches 使用一个固定大小,例如16*16,对于apperance 可以使用扩展的特征通道来定义。于是一个patch 的apperance可以写成,其中
是一个16*16的图像,
是通道数。
对一个patch appearance 的二值测试能够用许多方式来定义,但是作者选择基于pixel 测试。像这样的测试使用通道索引
,两个位置
和
,阈值
,从而测试可以写成如下形式:
现在我们开始建立树了:
Hough forests 中树的建立遵循这一般随机森林的框架。每一棵树从根开始迭代建立。在构建过程中,每个节点收到一系列training patches。如果节点深度等于一个最大值()或者patches的数目很小(
),被构建的节点就可以成为一个叶节点,并且叶节点的信息
被累计并且存储。否则一个非叶节点被创建并且一个最优的测试(binary test)被挑选。
如何挑选这个最优测试呢?
核心原则:越走向叶节点,所接收到得patches的类别标签和偏移向量的不确定度逐渐减少。为了实现这个目标,作者定义了两个对patch不确定性的测量方法。假设对于一个节点收到的patches。class-label 不确定性,其是用来衡量class labels
的不纯性:
其中,entropy定义为。
偏移不确定性,其用来衡量偏移向量的不纯性:
其中是平均偏移。
注意我们忽略背景patches。
现在两个测量不确定性的方式已经给出,我们采用如下的方式进行binary tests。给定一系列training patches,我们依靠均匀抽样
来产生一系列像素测试
。然后随机决策被建立。一般来说,除非negative patches 太少,我们等概率地选择,在这种情况下,选择最小化offset uncertainty。最后我们选择可以使两个不确定度测量都最小化的binary test
如何使用hough forest 进行目标检测呢?
现在假设对应于在图像中的位置
目标出现的随机事件。我们感兴趣的时计算
,其可以解释为这个patch的appearance
可以带来在图像中得位置
处的
事件。
我们需要区分两个情况:是否属于以x为中心的bounding box
。如果
,那么我们可以假设
对于
是没有信息价值的。
在这片文章中,作者假设第二种情况。于是我们有:
对于第一项的估计方法如下:
使用基于在训练中在叶节点存储的偏移向量集,和 Parzen-window进行估计。第二项可以直接使用在训练期间的object patches 的比例
。对于一棵单独的树,我们有
而对于一个森林呢?
(6)和(7)定义了一个single patch的关于目标是否存在的概率投票。为了整合来自于不同patches的投票信息。我们使用一种additive way累计他们进入2D Hough 图像:
如果我们完全按照(6)~(8)来进行计算的话,这是没有效率的。作者给出了更好的策略
见即将公布的 eagleeye 框架 |