具有概率估计的多类图像分类
Multi-class image classification with probability estimation
我的目标是使用概率估计进行多类图像分类。
到目前为止,"单标签"分类开箱即用,具有OpenCV C++库提供的所有强大功能。目前,我正在使用带有本地 Sift 描述符和 SVM 分类的 BoW 描述符。目前为止,一切都好。但是现在我需要图像的概率估计。因此,我需要输出"图像 A 具有 50% 的可能性类 X,具有 10% 的 Y 类,30% 的类 Z"等,而不是"图像 A 是 X 类",以及所有类的估计值。
不幸的是,我在机器学习方面并不那么称职。我开始调查这个问题,现在我的大脑很痛。我的菜鸟问题给你:
- libsvm 选项
-b probability_estimates
我正在寻找的吗? - 有没有办法单独使用OpenCV来做到这一点?(如果使用 OpenCV 在多类分类中获取 SVM 分类分数是唯一的方法,有人可以向我解释输出吗?
- 对于如何实现我的目标,您还有其他建议吗?要阅读的论文,可以使用的图书馆?
任何提示都值得赞赏。谢谢!
PS:我知道之前有很多类似的问题在这里回答过,但对我来说,没有一个真正抓住我的观点。
SVM 算法的某些实现确实提供了概率估计。但是,SVM 本身并不提供概率估计。它是在创建算法后"附加"的功能。这些概率估计并不"可信",如果我没记错的话,由于这个原因,计算概率估计的功能在几个版本前从Scikit-Learn库中删除了。不过,如果您坚持使用 SVM,请查看 LibSVM 的《支持向量分类的实用指南》。它是OpenCV调用的库。您可以跳过数学运算来获取提示。LibSVM 的输出,以及 OpenCV 的 SVM,在文档中进行了解释。或者,您可以选择改用 LibSVM。这将允许您在不重新编译OpenCV的情况下获得概率估计(如您的链接所示),但缺点是您必须将数据传递给LibSVM的适当形式(即OpenCV的Mat不太可能直接与LibSVM一起使用)。
如果您使用的是线性 SVM,即带有线性内核的 SVM,那么您可以尝试将其替换为逻辑回归分类器,因为根据经验,它们的行为相似(两者都是线性分类器,只是一个使用铰链损失,另一个使用逻辑损失)。逻辑回归的概率估计将起作用。
或者,考虑使用随机森林(或其变体,极端随机化树)分类器。它们还提供概率估计值,即测试样本达到的给定叶节点中训练样本的比例。话虽如此,这两个分类器并非基于原理数学(尽管研究人员正在努力弄清楚它们在理论上是如何工作的),尽管众所周知,它们在许多现实世界中都非常有效(Kinect 姿势估计就是一个例子)。
如果你的分类器从一开始就不是为了做到这一点而设计的,也就是说,不是你从标准统计机器学习教科书中找到的分类器之一,那么提出概率估计是非常困难的。这就像从屁股里掏出数字一样。大多数执行分类的算法只是为每个测试样本的每个类别/标签计算一个"分数",并使用具有"最佳"分数的算法。这要容易得多。对于 SVM,它试图将此分数"转换"为"概率",但它没有"校准",这实际上使其无用。
你可以看看这篇论文:用监督学习预测良好的概率,了解更多关于如何计算其中一些分类器的概率,以及为什么需要校准它们。
一般来说,我建议对分类器返回的概率估计持保留态度。如果需要它们,请使用统计分类器,例如逻辑回归,而不是 SVM。
至于库,虽然OpenCV确实提供了一些机器学习算法,但它们非常有限。尝试使用适当的 ML 库。我假设你正在使用C++,所以我建议看看免费的幕府将军机器学习库。
如果您正在使用Python,或者只是想查看有关如何使用机器学习算法的教程,请查看优秀的Scikit-Learn库。
关于将机器学习算法应用于行业问题的一些一般建议(幻灯片):开发行业强度机器学习和数据挖掘软件的经验和教训。
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- OpenCV EqualizeHist()从彩色图像创建黑白图像
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 平均图像时图像损坏
- 在C++中使用GDAL可以将图像的像素坐标转换为lat,long吗
- 如何根据单词在文本中出现的概率输出单词
- 如何将图像传输到c++(dll)中的缓冲区,然后在c#的缓冲区中读/写
- 神经网络和图像分类
- OpenCV SVM 分类器图像识别
- 使用OpenCV在Android上使用神经网络进行灰度图像分类
- 使用Caffe从图像中分类手写数字
- 如何训练svm对英文字母图像进行分类
- 使用 SVM 和 BOW 进行图像分类
- 具有概率估计的多类图像分类
- haar分类器是否可以用于特定ROI中的检测而不是整个图像中的检测
- 用于对整个图像进行分类的OpenCV中的HOG
- 如何在OpenCV和c++中配置CvSVM进行图像分类
- 神经网络图像分类,最有效的解决方案/建议
- 图像中闪电类型的分类