使用OpenCV SVM进行物体检测

11

我无法在互联网上找到一个好的解释。有太多东西了,而不是找出要做什么,我变得更加困惑。

我的目标:创建一个Android应用程序,使用相机实时检测物体(我的物体是方向盘和汽车轮胎)。

到目前为止,我尝试过haar分类器,但是很难训练,耗费了很多时间,并且无法正确地训练它,因此我决定寻找另一种实现我的目标的方法。

现在我了解了特征检测器和SVM训练。我的问题是:

1:我应该使用哪个算法(SURF、ORB、FREAK等)?

2:你对HOG + Bag-Of-Words有什么看法?

3:你能告诉我如何训练SVM或者提供一个教程链接吗?-我没有找到任何关于这个的教程。我在继续搜索,但我的时间有限,所以我决定问问。

4:哪种算法会给出最好的结果?

5:我应该使用Android NDK原生实现还是与Java实现相比不会有太大区别?

如果您有任何教程或参考资料,请将它们添加到您的答案或评论中。对于这个冗长的问题,我感到抱歉,正如我所说,我的时间有限(这是一个学校项目)。即使只是部分答案,我也会非常感激。谢谢!


(我的对象是方向盘和汽车轮胎。)而且,在我看来,这是你的主要问题。你能重新协商一下吗?(学校问题)。区分苹果和香蕉将是一个更友好的场景。你知道“内部类方差”是什么意思吗?你之前的帖子表明,找到“唯一”的方向盘非常困难。即使使用更复杂的算法,情况也不会好转。 - berak
我不确定我完全理解你想告诉我的内容(可能是因为我的英语水平不够好)。而且,我也不知道什么是内部类方差。 - dephinera
此外,我还没有达到我的目标,因为这是我第一次使用OpenCV,它很难。 - dephinera
1个回答

9

1: 并不存在适用于所有情况的最佳算法,而是根据应用程序的需求选择适用于某些特定情况的算法。

您可以尝试使用最常见但效率较低(慢)且需要大量内存的描述符SIFTSURF。如果效率是您的目标,可以尝试使用二进制描述符(例如BRIEF、ORB、BRISK、FREAK),它们更加高效并需要更少的存储空间。还可以看一下FAST检测器。

2: 图像分类问题中的Bag-of-Words是一种方法,可识别给定一组包含对象类别的正训练图像和一组不包含对象类别的负训练图像的对象类别。

Bag-Of-Words将为每个训练图像获取一个向量表示。

在获得这个向量后,您将需要训练分类器来区分与正训练图像相对应的向量和负训练图像。您可以使用SVM分类器进行此操作。

3: 这里有一个完整的OpenCV 2.3方法(BOW + SVM)的教程。您需要在代码中进行一些更改,但总体思路已经在这里:http://www.morethantechnical.com/2011/08/25/a-simple-object-classifier-with-bag-of-words-using-opencv-2-3-w-code/

此外,还有一个OpenCV SVM教程http://docs.opencv.org/doc/tutorials/ml/introduction_to_svm/introduction_to_svm.html

4: 正如我之前所说,并不存在完美的算法,因此我无法回答您。我认为在(1.)中尝试一些替代方案后,您将能够回答我们的问题。 :)

5. 我认为您应该使用Android NDK,但我对Android开发不了解。

http://docs.opencv.org/doc/tutorials/introduction/android_binary_package/android_dev_intro.html http://opencv.org/platforms/android.html


首先,感谢您详细的回答! 其次,我想问的是BOW + SVM是实现我的目标的最佳方法还是一个好方法? - dephinera
正如我之前向你解释的那样,无法确定那种方法是否能有效地解决你的问题。不过,我敢打赌使用BOW + SVM方法会给你带来好的结果。但是你需要尝试来确认这一点。 - zedv
首先,很抱歉我一直在问问题,但对我来说事情并不容易。我发现我不能使用二进制描述符的BOW。不幸的是,SIFT和SURF是非免费的,这就是为什么我不想使用它们的原因。我找不到如何使用FAST提取特征训练SVM的方法。这可能吗?你有任何参考资料吗?非常感谢您的帮助。(如果您有这些问题的答案,将其添加到您的回答中可能会更好) - dephinera
实际上,您可以使用二进制描述符来使用BOW。我的建议是首先尝试使用SIFT或SURF这种方法。如果结果很好,那么您可以尝试使用二进制描述符。正如我所说,FAST只是一个检测器。也就是说,它只能检测关键点,之后您需要使用描述符来描述这些关键点。 - zedv

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接