Bag of Features 如何运作?
How Bag of Features works?
我不确定这个论坛是否适合这个问题,否则我很抱歉。
我对 Bag of Features 模型还很陌生,我正在尝试实施以通过矢量表示图像(对于 CBIR 项目)。
根据我的理解,给定 S
个 n
图像的训练集,并假设我们想通过大小为 k
的向量表示图像,这些是实施 BoF 的步骤:
- 对于每个图像
i
,计算关键点集并从中计算描述符集 i-D
。
- 将所有图像的描述符集放在一起,所以现在我们有
D
。
- 运行
k
表示(上面定义了 k
)D
上的算法,所以现在我们有 k
个簇和每个描述符向量完全属于一个集群。
- 将
iv
定义为相对于图像 i
的结果 BoF 向量(大小 k
)。每个维度都初始化为0。
- 对于每个图像
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,找出点之间的一些合理分离。这基本上确定了单词是什么。
因此,对于新图像,您需要像对训练集所做的那样计算关键点,然后使用您在训练中已经计算的聚类,计算出新图像的特征向量。那就是你把你的图像从你建立的词典中转换成单词。
这是一种从图像中生成合理特征向量的方法(如果需要,可以是部分结果)。这不是一个完整的机器学习算法。要完成它,您需要知道自己想要做什么。如果您只想找到最相似的图像,那么是的,最近邻搜索应该可以做到这一点。如果要标记图像,则需要从特征向量训练分类器(如朴素贝叶斯)并使用它来计算查询的标签。
我不确定这个论坛是否适合这个问题,否则我很抱歉。
我对 Bag of Features 模型还很陌生,我正在尝试实施以通过矢量表示图像(对于 CBIR 项目)。
根据我的理解,给定 S
个 n
图像的训练集,并假设我们想通过大小为 k
的向量表示图像,这些是实施 BoF 的步骤:
- 对于每个图像
i
,计算关键点集并从中计算描述符集i-D
。 - 将所有图像的描述符集放在一起,所以现在我们有
D
。 - 运行
k
表示(上面定义了k
)D
上的算法,所以现在我们有k
个簇和每个描述符向量完全属于一个集群。 - 将
iv
定义为相对于图像i
的结果 BoF 向量(大小k
)。每个维度都初始化为0。 - 对于每个图像
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,找出点之间的一些合理分离。这基本上确定了单词是什么。
因此,对于新图像,您需要像对训练集所做的那样计算关键点,然后使用您在训练中已经计算的聚类,计算出新图像的特征向量。那就是你把你的图像从你建立的词典中转换成单词。
这是一种从图像中生成合理特征向量的方法(如果需要,可以是部分结果)。这不是一个完整的机器学习算法。要完成它,您需要知道自己想要做什么。如果您只想找到最相似的图像,那么是的,最近邻搜索应该可以做到这一点。如果要标记图像,则需要从特征向量训练分类器(如朴素贝叶斯)并使用它来计算查询的标签。