Bag of Features 如何运作?

How Bag of Features works?

我不确定这个论坛是否适合这个问题,否则我很抱歉。

我对 Bag of Features 模型还很陌生,我正在尝试实施以通过矢量表示图像(对于 CBIR 项目)。

根据我的理解,给定 Sn 图像的训练集,并假设我们想通过大小为 k 的向量表示图像,这些是实施 BoF 的步骤:

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

我不清楚如何实现第 5 点,那么我们如何理解描述符属于哪个集群,特别是如果我们尝试计算 BoF 的图像矢量是查询图像(因此不属于初始数据集)?我们是否应该找到最近的邻居 (1-NN) 以了解查询描述符属于哪个集群?

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

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

如果我在上述过程中有任何错误,请告诉我。

您的算法正在做的是为图像生成等效的文字。 "words" 的集合并不意味着最终结果,而只是使其与其他机器学习技术一起使用变得简单的东西。

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

第 3 点说你从训练集图像中获取所有关键点,运行k-means algorithm,找出点之间的一些合理分离。这基本上确定了单词是什么。

因此,对于新图像,您需要像对训练集所做的那样计算关键点,然后使用您在训练中已经计算的聚类,计算出新图像的特征向量。那就是你把你的图像从你建立的词典中转换成单词。

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