13

我一直在尝试理解AdaBoost 算法,但没有取得多大成功。我正在努力理解Viola Jones 关于人脸检测的论文作为示例。

你能用外行的术语解释 AdaBoost 并提供使用它的好例子吗?

4

3 回答 3

13

Adaboost 是一种算法,它将性能较差的分类器(也称为弱学习器)组合成一个性能更高的更大分类器。

它是如何工作的?以非常简化的方式:

  1. 训练弱学习者。
  2. 将其添加到迄今为止训练的一组弱学习者中(具有最佳权重)
  3. 增加仍然错误分类的样本的重要性。
  4. 转到 1。

幕后有一个广泛而详细的理论,但直觉就是:让每个“哑”分类器专注于以前的分类器无法修复的错误。

AdaBoost 是机器学习社区中最常用的算法之一。特别是,当您知道如何创建简单的分类器(可能有许多不同的分类器,使用不同的特征)并且您希望以最佳方式组合它们时,它很有用。

在 Viola 和 Jones 中,每种不同类型的弱学习器都与您可以拥有的 4 或 5 个不同的 Haar 特征之一相关联。

于 2010-02-19T10:08:26.677 回答
10

AdaBoost 使用许多训练样本图像(例如人脸)来挑选一些好的“特征”/“分类器”。对于人脸识别,分类器通常只是一个具有一定平均颜色值和相对大小的像素矩形。AdaBoost 将查看许多分类器,并根据样本图像找出哪一个是人脸的最佳预测器。在它选择了最好的分类器之后,它将继续寻找一个又一个,直到达到某个阈值,并且这些分类器组合在一起将提供最终结果。

这部分你可能不想与非技术人员分享:) 但无论如何它很有趣。有几个数学技巧可以使 AdaBoost 快速用于人脸识别,例如能够将图像的所有颜色值相加并将它们存储在二维数组中,这样任何位置的值都将是所有像素的总和在那个位置的左边。该数组可用于非常快速地计算图像中任何矩形的平均颜色值,方法是从右下角的值中减去左上角的值并除以矩形中的像素数。使用这个技巧,您可以快速扫描整个图像,寻找与特定颜色匹配或接近的不同相对大小的矩形。

希望这可以帮助。

于 2009-12-23T00:53:15.600 回答
3

这是可以理解的。您可以在 Internet 上找到的大多数论文复述 Viola-Jones 和 Freund-Shapire 论文,它们是 AdaBoost 在 OpenCV 中应用于人脸识别的基础。它们主要由几个数学领域的困难公式和算法组合而成。这是可以帮助您的(足够短)-

1 - 它用于对象,主要用于人脸检测识别。最流行和相当不错的 C++ 库是最初来自 Intel 的 OpenCV。我以OpenCV中的人脸检测部分为例。

2 - 首先,使用样本矩形(“特征”)的级联增强分类器在具有面部(称为正)和没有面部(负)的图像样本上进行训练。

来自一些谷歌论文:

"· Boosting 是指一种通用且可证明有效的方法,通过结合粗略和适度不准确的经验法则来生成非常准确的分类器。

· 它基于以下观察:找到许多粗略的经验法则比找到一个单一的、高度准确的分类器要容易得多。

· 首先,我们定义了一个用于寻找经验法则的算法,我们称之为弱学习器。

· boosting 算法反复调用这个弱学习器,每次都给它一个不同的训练数据分布(在 AdaBoost 中)。

· 每个调用都会生成一个弱分类器,我们必须将所有这些组合成一个分类器,希望它比任何一个规则都准确得多。”

在此过程中,扫描图像以确定与每张脸的特定部分相对应的独特区域。应用了基于复杂计算假设的算法(一旦你掌握了主要思想,就不难理解了)。

这可能需要一周时间,输出是一个 XML 文件,其中包含有关如何快速检测人脸的学习信息,例如,在任何图片的正面位置(在其他情况下可以是任何对象)。

3 - 之后,您将此文件提供给 OpenCV 人脸检测程序,该程序运行速度非常快,阳性率高达 99%(取决于条件)。正如这里提到的,扫描速度可以通过称为“整体图像”的技术大大提高。

最后,这些是有用的资源 - OpenCV 中的对象检测和 使用 AdaBoost 的通用对象检测,来自加利福尼亚大学,2008 年。

于 2012-12-11T10:07:09.797 回答