用于SIFT的空间金字塔匹配(SPM)然后输入到C++中的SVM

我正在尝试使用C++和OpenCV将脑肿瘤的MRI图像分类为良性和恶性。我计划在使用kmeans聚类SIFT描述符后使用词袋(BoW)方法。也就是说,我将用整个“码本”/字典作为x轴,并用图像中它们的出现次数作为y轴来表示每张图像的直方图。这些直方图将成为我的SVM(使用RBF核)的输入。

然而,使用BoW的缺点是它忽略了图像中描述符的空间信息。有人建议我改用SPM。我阅读了一些关于它的资料,并找到了这个链接,其中列出了以下步骤:

  1. 从训练集中计算K个视觉词,并将所有局部特征映射到其视觉词上。
  2. 对于每张图像,将K个多分辨率坐标直方图初始化为零。每个坐标直方图包含L个层次,每个层次i有4^i个单元,这些单元均匀地分割当前图像。
  3. 对于图像中的每个局部特征(假设其视觉词ID为k),选出第k个坐标直方图,然后根据局部特征的坐标,将每个对应的L个单元的计数加1。这些L个单元是局部特征在L个不同分辨率下所在的单元。
  4. 连接K个多分辨率坐标直方图,形成图像的最终“长”直方图。在连接时,第k个直方图由第k个视觉词的概率加权。
  5. 为了计算两张图像上的核值,求它们“长”直方图交集的所有单元的总和。

现在,我有以下几个问题:

  1. 什么是坐标直方图?直方图不就是显示x轴上每个分组的计数吗?它如何提供一个点的坐标信息?
  2. 我该如何计算第k个视觉词的概率?
  3. 我得到的“核值”有什么用?我如何将其作为SVM的输入?如果我理解正确的话,核值是在测试阶段使用而不是在训练阶段使用?如果是的,那么我该如何训练我的SVM?
  4. 或者你认为我没有必要为我的情况(良性和恶性肿瘤)而烦恼于空间信息,只需坚持使用普通的BoW?

请帮助这个可怜的本科生。如果你能帮我,我将永远感激你。如果你有任何需要澄清的地方,请随时问我。


回答:

这是实际论文的链接,http://www.csd.uwo.ca/~olga/Courses/Fall2014/CS9840/Papers/lazebnikcvpr06b.pdf

这里提供了MATLAB代码 http://web.engr.illinois.edu/~slazebni/research/SpatialPyramid.zip

你帖子中提到的坐标直方图只是图像中计算直方图的一个子区域。这些幻灯片以视觉方式解释了这一点,http://web.engr.illinois.edu/~slazebni/slides/ima_poster.pdf

这里有多个直方图,每个图像的不同区域各有一个。概率(或项目数量)将取决于该子区域中的SIFT点。

我认为你需要按照幻灯片中提到的定义你的金字塔核。

如果你有足够的训练样本,卷积神经网络可能更适合你的任务。你可以考虑看看Torch或Caffe。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注