4

我正在实施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 面,因为它们的数量更多。

换句话说,我希望每个添加到强分类器的弱分类器的权重都会依次降低。

我错过了一步还是这只是过于简单的数据的奇怪行为?

4

1 回答 1

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。

于 2014-06-20T19:35:55.533 回答