Adaboost 如何与 Viola 和 Jones 算法一起工作?

How Does Adaboost Work with Viola and Jones Algorithm?

我正在使用 Viola 和 Jones 算法在 C 中实现功能性人脸检测算法。我无法理解 Adaboost 来训练强大的分类器。

我可以检测单个图像中的所有 5 个基本 haar 特征(24x24 图像中的 162336 个)我很确定这很好并且有效,我的算法输出和包含所有排序特征的数组。

然后,我开始研究 Adaboost,这就是我的理解。我们创建一个弱分类器(略好于随机),然后我们对许多弱分类器(大约 200 个)进行线性组合以获得强分类器。

我不明白的是如何创建这个弱分类器。根据我在网上看到的内容:

我真的很期待你的帮助,让我明白这一点!

本应更快地回答我自己的问题,但我忘记了。这是我计算机科学学校的一个项目,所以我可以提供答案。

Adaboost 理解起来其实相当简单。

首先,您需要检测基础中每个图像的特征(我们使用 4000 张图像来组成一个大集合)如果您有足够的内存,您可以存储它们,或者在您的程序中需要它们时处理它们。对于内部具有 5 个 haar 特征的 4000 张图像,我们使用了超过 16Gb 的 RAM(代码是用 c 编写的,但没有内存泄漏,它是双精度数组)

训练算法为图像分配权重。该权重表示算法做出良好预测(有脸或无脸)的难度。

您的训练算法将由轮次组成(200 轮次可以达到 90% 以上的良好预测)。

在第一轮中,每张图像都具有相同的权重,因为算法从未对它们起作用。

这是一轮的进行方式:

  1. 在每个图像的 X(对于每种类型)中找到最佳的 haar 特征。为此,将每个特征与每个图像上的相同特征(相同类型、尺寸和位置)进行比较,看看它是好预测还是坏预测。 X 特征中具有最佳预测的特征是最好的,保留它 stored.You 将为每张图像找到 5 个最佳特征,因为有 5 种类型将它们组合在一个结构中,这是你的 弱点分类器

  2. 计算分类器的加权误差。加权误差是应用于每个图像的弱分类器的误差,同时考虑到分配给每个图像的权重。在后面的轮次中,权重更大的图像(算法对这张图像犯了很多错误)将被更多地考虑。

  3. 将弱分类器添加到强分类器(这是一个弱分类器数组)及其 alpha。 alpha 是弱分类器的性能,由加权误差决定。使用 alpha,在算法的后期训练更困难时制作的弱分类器将在强分类器的最终预测中具有更大的权重。

  4. 根据刚刚创建的弱分类器的预测,更新每张图片的权重。如果分类器正确,则权重下降,否则它上升。

200轮训练结束后,你将拥有一个由200个弱分类器组成的强分类器。要对单个图像进行预测,请将每个弱分类器应用于图像,多数人获胜。

我自愿简化了解释,但大部分都在这里。有关更多信息,请查看此处,它在我的项目中确实对我有帮助:http://www.ipol.im/pub/art/2014/104/article.pdf

我建议每个对 AI 和优化感兴趣的人都从事这样的项目。作为一名学生,它让我对 AI 产生了真正的兴趣,并让我思考了很多关于优化的问题,这是我以前从未想过的。