在讨论使用Haar特征的级联分类器时,我经常看到提到使用AdaBoosting等方法来选择最佳的检测特征。然而,这仅在存在一些初始特征集可供提升时才有效。
对于一个24×24像素的图像,可能的Haar特征有162,336个。我可能在这里错了,但我认为像OpenCV这样的库不会最初就测试所有这些特征。
那么我的问题是,初始特征是如何选择或生成的?关于初始特征的数量是否有任何指导方针?
如果最初使用了所有162,336个特征,它们是如何生成的?
回答:
我猜想,你已经熟悉了Viola/Jones关于这个主题的原始工作。
你可以从手动选择一种特征类型开始(例如,矩形A)。这会给你一个用于训练弱分类器的掩模。为了避免逐像素移动掩模并重新训练(这将耗费大量时间且不会提高准确性),你可以指定特征在x和y方向上每训练一个弱分类器移动多少。你的跳跃大小取决于你的数据大小。目标是让掩模能够进出检测到的对象。特征的大小也可以是可变的。
在你用一个特定的特征(即掩模位置)训练了多个分类器后,你可以照常进行AdaBoost和级联训练。
特征/弱分类器的数量高度依赖于你的数据和实验设置(即也包括你使用的分类器类型)。你需要广泛测试参数,以了解哪种类型的特征效果最好(矩形/圆形/类似俄罗斯方块的对象等)。两年前我从事这项工作时,我们花了相当长的时间来评估哪些特征和特征生成启发式方法能产生最佳结果。
如果你想从某个地方开始,不妨选择4个原始Viola/Jones特征中的一个,并在(0,0)处锚定训练一个分类器。接下来用(x,0)训练下一个分类器。再用(2x,0)训练… (0,y), (0,2y), (0,4y),.. (x,y), (x, 2y)等…看看会发生什么。很可能你会发现,拥有较少的弱分类器是可以的,即你可以增加x/y步长值,这些值决定了掩模的滑动方式。你还可以让掩模变大或做其他事情来节省时间。这种“懒惰”的特征生成之所以有效,是因为AdaBoost:只要这些特征使分类器略好于随机,AdaBoost就会将这些分类器组合成一个有意义的分类器。