2016-06-07 103 views
2

我不确定这是否是适合此问题的正确论坛,否则我很抱歉。功能包如何工作?

我对Bag of Features模型很陌生,我试图实现为了通过矢量(用于CBIR项目)表示图像。

从就我的理解,给定一个训练集n图像0​​,并假定我们想通过大小k的矢量来表示图像,这些都为实现使用BoF步骤:

  1. 对于每个图像i,计算关键点集合并从中计算描述符集合i-D
  2. 把所有图像中的描述符集合放在一起,所以现在我们有D
  3. D上运行k表示(其中k定义如上)算法,所以现在我们有k簇,每个描述符向量完全属于一个簇。
  4. 将相对于图像i的结果BoF矢量(尺寸为k)定义为iv。每个维度被初始化为0
  5. 对于每个图像i,和用于属于i-D每个描述符d,找出d所有k簇之间所属群集。假设d属于j集群,那么vi[j]++

什么是我不明白的是如何落实第5点,那么我们该如何理解到集群中的描述属于,特别是如果我们试图计算转炉矢量图像是查询图像(不属于初始数据集)?我们是否应该找到最近邻居(1-NN)以便了解查询描述符属于哪个群集?

为什么我需要这个 - 应用程序:

为了实现CBIR我实现炼钢模型:给定一个查询图像q,找到q最相似的图像i中的数据集图片。为了做到这一点,我们需要解决1-近似最近邻问题,例如使用LSH。问题在于LSH中的每个图像的输入都表示为一个矢量,所以我们需要BoF才能做到这一点!我希望现在它更清楚为什么我需要它:)

请让我知道,如果我在上述程序中犯了一些错误。

回答

1

你的算法正在做什么是为图像生成等价的单词。这套“单词”并不意味着是最终结果,而只是简单的用于其他机器学习技术。

在此设置中,您将从初始特征(来自点1的关键点)生成一组k个聚类。 然后,通过每个集群中关键点的数量来描述每个图像(就像您有一个由长度为k的字典中的单词构成的文本一样)。

点3表示您从traing set images中获取所有关键点,并运行k-means algorithm,找出点之间的合理间隔。这基本上确定了这些词是什么。

因此,对于新图像,您需要像计算训练集一样计算关键点,然后使用已在训练中计算出的集群计算出新图像的特征向量。那就是你将你的图像转换成你所创建的字典中的单词。

这是从图像中生成合理特征向量的一种方法(如果需要,也可以是部分结果)。这不是一个完整的机器学习算法。要完成它,你需要知道你想要做什么。如果你只是想找到最相似的图像,那么是的最近邻居搜索应该这样做。如果要标记图像,则需要从特征向量中训练分类器(如朴素贝叶斯),并使用它来计算查询的标签。

+0

我太如此如此抱歉,我很愚蠢!这不是第3点(它只是k-均值),而是第5点(我们通过将每个描述符关联到一个聚类并定义直方图来定义结果向量)。 – justHelloWorld

+0

因此,仍然不清楚的是“给出图像查询,我们如何获得最终的BoF矢量”?我们必须为每个描述符找到数据集中的1-NN描述符,并将其与相对集群关联起来?告诉我,如果我不清楚 – justHelloWorld

+0

是的,要分配一个描述符,你可以得到最近的邻居。您可以根据您的训练数据计算每个聚类的半径,只有当查询点位于该半径范围内时(如果您开始获得与训练数据非常不同的查询)才可以分配它。 – Sorin