向非技术人员解释 AdaBoost 算法

Posted

技术标签:

【中文标题】向非技术人员解释 AdaBoost 算法【英文标题】:Explaining the AdaBoost Algorithms to non-technical people 【发布时间】:2010-12-27 17:40:31 【问题描述】:

我一直在尝试理解AdaBoost algorithm,但没有取得多大成功。以Viola Jones paper on Face Detection 为例,我很难理解。

您能否通俗地解释一下 AdaBoost 并举出很好的例子来说明何时使用它?

【问题讨论】:

【参考方案1】:

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

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

    训练弱学习者。 将其添加到目前训练的弱学习器集合中(具有最佳权重) 提高仍未分类的样本的重要性。 转到 1。

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

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

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

【讨论】:

我很好奇 1.train aweak learner 到底是什么意思?例如,如果我使用的是 haar 特征,那么什么是训练? @dicroce ,训练弱学习器意味着搜索分类规则(Viola Jones 论文中的 Haar 特征),该规则在训练集中实现最小加权误差。也就是说:它正确地分类了大多数重要的例子(即那些具有高权重的例子)。【参考方案2】:

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

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

希望这会有所帮助。

【讨论】:

【参考方案3】:

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

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

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

来自一些谷歌论文:

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

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

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

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

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

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

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

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

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

【讨论】:

“boosting 算法反复调用这个弱学习器,每次都在训练数据上提供不同的分布(在 AdaBoost 中)。”我可以使用不同的分类算法而不是不同的分布吗?

以上是关于向非技术人员解释 AdaBoost 算法的主要内容,如果未能解决你的问题,请参考以下文章

如何向非技术人员解释Kubernetes

Adaboost算法

我该如何向非技术人解释SQL注入?

李航统计学习方法--8. 提升方法(详细推导)

如何向非技术人员推广 WCF?

Adaboost算法的原理推导及解释