我希望有人可以解释如何使用词袋模型通过SIFT / SURF / ORB功能和支持向量机进行图像分类?
目前,我可以计算图像的SIFT特征向量,并且已经实现了SVM,但是发现很难理解有关如何使用词袋模型来“向量量化” SIFT特征并建立直方图的文献。固定大小的向量,可用于训练和测试SVM。
欢迎访问有关该主题的教程或文献的任何链接,谢谢
我希望有人可以解释如何使用词袋模型通过SIFT / SURF / ORB功能和支持向量机进行图像分类?
目前,我可以计算图像的SIFT特征向量,并且已经实现了SVM,但是发现很难理解有关如何使用词袋模型来“向量量化” SIFT特征并建立直方图的文献。固定大小的向量,可用于训练和测试SVM。
欢迎访问有关该主题的教程或文献的任何链接,谢谢
Answers:
如果可以实现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的计算机视觉系统工具箱现在提供功能包。