功能包如何运作?

How Bag of Features works?

本文关键字:包如何 功能      更新时间:2023-10-16

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

我对特征袋模型很陌生,我正在尝试实现以便通过矢量表示图像(对于 CBIR 项目)。

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

  1. 对于每个图像i,计算关键点集,并从中计算描述符i-D集。
  2. 将所有图像中的描述符集放在一起,所以现在我们有D.
  3. D上运行k均值(上面定义了k)算法,所以现在我们有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 来做到这一点!我希望现在更清楚为什么我需要它:)

如果我在上述过程中犯了一些错误,也请告诉我。

你的算法正在做的是为图像生成等效的单词。这组"单词"并不是最终结果,而只是让它易于与其他机器学习技术一起使用的东西。

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

第 3 点表示您从跟踪集图像中获取所有关键点,并运行 k 均值算法,以找出点之间的一些合理分离。这基本上确定了单词是什么。

因此,对于新图像,您需要像对训练集所做的那样计算关键点,然后使用您在训练中已经计算出的集群,您可以找出新图像的特征向量。也就是说,您将图像转换为您构建的字典中的单词。

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