向非技术人员解释AdaBoost算法

时间:2009-12-17 16:36:24

标签: algorithm language-agnostic adaboost

我一直试图理解AdaBoost algorithm但没有取得多大成功。我正在努力理解Viola Jones paper on Face Detection作为一个例子。

你能用非专业人士的术语解释AdaBoost,并提供使用它的好例子吗?

3 个答案:

答案 0 :(得分:12)

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

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

  1. 培养弱势学习者。
  2. 将其添加到目前为止训练有素的弱学习者(具有最佳体重)
  3. 提高仍然未被分类的样本的重要性。
  4. 转到1.
  5. 幕后有一个广泛而详细的理论,但直觉就是:让每个“愚蠢”的分类器专注于以前无法解决的错误。

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

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

答案 1 :(得分:9)

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

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

希望这有帮助。

答案 2 :(得分:3)

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

1 - 它主要用于对象,主要用于人脸检测识别。最流行且相当不错的C ++库是英特尔最初的OpenCV。我以OpenCV中的人脸检测为例。

2 - 首先,使用面(称为正)和图像样本训练使用样本矩形(“特征”)的级联的增强分类器 >没有面孔(否定)。

来自谷歌的一些论文:

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

·基于观察结果,找到许多粗略的经验法则比找到一个高度准确的分类器要容易得多。

·首先,我们定义了一种用于查找经验法则的算法,我们将其称为弱学习者。

·提升算法反复调用这个弱学习者,每次在训练数据上提供不同的分布(在AdaBoost中)。

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

在此过程中,扫描图像以确定与每个脸部的某些部分相对应的区别区域。应用了基于复杂计算假设的算法(一旦得到主要想法就不那么难理解了。)

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

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

最后,这些是有用的资源 - Object Detection in OpenCVGeneric Object Detection using AdaBoost来自加利福尼亚大学,2008年。