具有概率估计的多class图像class化

Multi-class image classification with probability estimation

我的目标是通过概率估计进行多 class 图像 class 化。

到目前为止,'one-label'-classification 开箱即用,具有 OpenCV C++ 库提供的所有强大功能。目前我正在使用带有本地 Sift 描述符和 SVM classification 的 BoW 描述符。到目前为止,一切都很好。但现在我需要图像的概率估计。因此,我需要输出 "image A is with 50% likelihood class X, with 10% class Y, 30% class Z",而不是 "image A is class X",,等等。对所有 classes.

进行估计

不幸的是,我在机器学习方面并不擅长。我开始调查这个问题,现在我的大脑很痛。我的菜鸟问题:

  • libsvm 选项 -b probability_estimates 是我要找的吗?
  • 有没有办法只用 OpenCV 来做到这一点? (如果 Get SVM classification score in multiclass classification with OpenCV 是唯一的方法,有人可以向我解释输出吗?)
  • 对于如何实现我的目标,您还有其他建议吗?要阅读的论文,要使用的图书馆?

如有任何提示,我们将不胜感激。谢谢!

P.S.: 我知道这里之前回答过很多类似的问题,但对我来说 none 确实抓住了我的观点。

SVM 算法的某些实现确实提供了概率估计。但是,SVM 本身就提供概率估计。它是创建算法后 "tacked on" 的函数。这些概率估计不是 "trustworthy",如果我没记错的话,计算概率估计的能力在几个版本前就因为这个原因从 Scikit-Learn 库中删除了。不过,如果您坚持使用 SVM,请查看 LibSVM 中的 A Practical Guide to Support Vector Classification。它是 OpenCV 调用的库。您可以跳过数学以获取提示。 LibSVM 的输出,以及 OpenCV 的 SVM,在文档中进行了解释。或者,您可以选择使用 LibSVM。这将允许您在不重新编译 OpenCV 的情况下获得概率估计(如您的 link 中所建议),但缺点是您必须将数据传递给 LibSVM 的适当形式(即,OpenCV 的 Mat 不太可能直接使用 LibSVM)。

如果您使用的是线性 SVM,即具有线性内核的 SVM,那么您可以尝试将其替换为逻辑回归分类器,因为根据经验它们的行为相似(两者都是线性分类器,只是一个使用铰链损失和另一个,物流损失)。逻辑回归的概率估计会起作用。

或者,考虑使用随机森林(或其变体,极端随机树)分类器。它们还提供概率估计,作为测试样本达到的给定叶节点中训练样本的比例。话虽如此,这两个分类器并非基于原理性数学(尽管研究人员正在努力弄清楚它们在理论上的工作原理),尽管众所周知它们在许多现实世界的环境中表现出色(Kinect 姿势估计就是一个例子)。

如果您的分类器不是从一开始就设计用来做概率估计的,那么提出概率估计是一件非常困难的事情,也就是说,不是您从标准统计机器学习教科书中找到的分类器。这就像从一个人的屁股里拉出数字。大多数执行分类的算法只是为每个测试样本的每个 category/label 计算一个 "score",然后选择得分为 "best" 的那个。这更容易做到。对于 SVM,它试图 "translate" 这个分数到 "probability",但它不是 "calibrated",这实际上使它变得无用。

您可以查看这篇论文:Predicting Good Probabilities With Supervised Learning 了解有关如何计算其中一些分类器的概率以及为什么需要校准它们的更多详细信息。

一般来说,我建议对分类器返回的概率估计持保留态度。如果你想要它们,请使用统计分类器,例如逻辑回归,而不是 SVM。

至于库,虽然 OpenCV 确实提供了一些机器学习算法,但它们非常有限。尝试一个合适的 ML 库。我假设您使用的是 C++,因此我建议您查看免费的 Shogun Machine Learning Library.

如果您正在使用 Python,或者只是想看看有关如何使用机器学习算法的教程,请查看优秀的 Scikit-Learn library

关于将机器学习算法应用于行业问题的一些一般性建议(幻灯片):Experiences and Lessons in Developing Industry-Strength Machine Learning and Data Mining Software