使用SIFT功能和SVM进行图像分类


12

我希望有人可以解释如何使用词袋模型通过SIFT / SURF / ORB功能和支持向量机进行图像分类?

目前,我可以计算图像的SIFT特征向量,并且已经实现了SVM,但是发现很难理解有关如何使用词袋模型来“向量量化” SIFT特征并建立直方图的文献。固定大小的向量,可用于训练和测试SVM。

欢迎访问有关该主题的教程或文献的任何链接,谢谢

Answers:


16

如果可以实现SVM,则可以量化功能。:)

通常,使用k均值聚类对特征进行量化。首先,确定您的“词汇量”应该是多少(例如200个“视觉单词”),然后针对该数目的群集(200)运行k均值群集。SIFT描述符是128个元素的矢量,即128维空间中的点。因此,您可以像其他任何点一样尝试将它们聚类。您可以从大量图像中提取SIFT描述符,类似于您希望使用功能包进行分类的图像。(理想情况下,这应该是一组单独的图像,但是在实践中,人们通常只是从他们的训练图像集中获得要素。)然后,您可以在这套大型SIFT描述符上运行k-means聚类,将其划分为200个(或任何其他类)聚类,即将每个描述符分配给一个群集。k均值将为您提供200个聚类中心,

然后,获取图像中的每个SIFT描述符,并通过找到最接近它的聚类中心来确定它属于200个聚类中的哪个。然后,您只需计算每个集群中有多少个功能。因此,对于具有任意数量的SIFT功能的任何图像,您的直方图均为200 bin。那就是您提供给SVM的特征向量。(请注意,术语功能严重超载)。

我记得,关于如何对这些直方图进行归一化有很多工作要做。我可能是错的,但是我似乎想起了一篇论文,该论文声称二进制特征向量(即如果存在至少1个特征,则为1,否则为0)要比直方图更好。您将需要查看文献以获取详细信息,而这些细节很重要。

编辑: MATLAB的计算机视觉系统工具箱现在提供功能包


嗨,狄玛(Dima),谢谢您的回答,我只是有一个问题,当您说“然后针对该数量的集群运行k-means集群”时,您正在运行k-mean集群吗?ps:对于您对术语功能严重超载的评论,我几乎想接受这个答案,我对图像处理是陌生的,我不能同意更多
Jono Brogan 2012年

@JonoBrogan:您应该接受我的回答,因为它是正确的。:)我已经编辑了答案,以试图弄清k均值。
迪马2012年

现在有意义吗?
Dima 2012年

是的,谢谢。我已经接受了答案,尽管我只是想知道您是否知道如何确定要使用多少个“视觉单词”?
乔诺·布罗根

3
但是最大的问题是Kmeans算法并不总是给出相同的结果。它是随机的。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.