我正在按照Viola-Jones论文的描述实施AdaBoost,以实现自己的启发。在单元测试过程中我发现了一些奇怪的行为。这可能只是算法在固定数据上奇怪地行动,或者我可能遗漏了一些东西。我想知道它是哪种情况。
首先,我有:
2 instances of A type faces
1 instance of a B type face
3 instances of noise
--------------------
6 total instances
因此每张图片的初始权重为1/6
。
分类器选择的第一个特征识别A类型面,但不识别B类型面,而不识别任何噪声。因此,它在1/6
中有一个错误(以及提升的分类器中的相关权重)。
接下来更新权重(首先将正确分类的图像乘以(error / 1 - error)) == 0.2
得出:
A type face weight: 1/30
B type face weight: 1/6
noise image weight: 1/6
然后将权重归一化(总和为1):
A type face weight: 1/22
B type face weight: 5/22
noise image weight: 5/22
第二个功能正确选择B型图像,但不能选择噪点或A型图像。因此,它的错误为1/11
(2/22
),明显低于1/6
。
由于Viola-Jones提出的“默认”阈值(这是在我们在论文的后半部分进行级联和调整阈值之前)是权重的一半,并且只有两个权重,第二个特征的权重因为它的误差较小(因为误差较小),所以得到的增强分类器只能正确分类B类面。
直观地说,我期望强分类器由检测A面的弱分类器和检测B面以检测A面和B面的弱分类器组成。
我甚至愿意接受我只会得到两个中的一个,因为AdaBoost是一种多数投票算法,并且可能只有2个选民表现得很奇怪,但我希望如果它只能正确分类一个然后它会正确地对A面进行分类,因为它们有更多。
换句话说,我认为加入强分类器的每个弱分类器都会逐渐降低权重。
我是否错过了一个步骤,或者对于过于简单的数据这是一种奇怪的行为?
答案 0 :(得分:1)
计算中存在错误。使用第一个特征时,误差为1/6,因为只有B面被错误分类。在这种情况下,噪声和A面被正确分类。因此,当您根据w(i)= w(i)* beta ^(1-e(i))更新权重时,仅针对B面e(i)等于1.对于A面和噪声e(i )= 0.因此,噪声和A面的权重将被更新:
A type face weight: 1/30
B type face weight: 1/6
noise image weight: 1/30
规范化后:
A type face weight: 1/10
B type face weight: 1/2
noise image weight: 1/10
现在,当您使用第二个功能时,错误是1/5。