我不确定这是否是这个问题的正确论坛,我很抱歉。
我对Bag of Features模型很陌生,我试图通过向量来表示图像(对于CBIR项目)。
根据我的理解,给定S
n
张k
图像,并假设我们想要通过尺寸为i
的矢量来表示图像,这些是实施BoF的步骤:
i-D
,计算一组关键点,并从中计算描述符D
的集合。k
。 k
上运行D
方法(上面定义k
)算法,现在我们有iv
个群集,每个描述符向量完全属于一个群集。 k
定义为相对于图片i
生成的BoF向量(大小为i
)。每个维度都初始化为0. d
,以及属于i-D
的每个描述符d
,找出所有k
群集之间属于哪个群集d
。假设j
属于第vi[j]++
个群集,则为q
。我不清楚如何实现第5点,那么我们如何理解描述符所属的聚类,,特别是如果我们试图计算BoF向量的图像是查询图像(因此不属于初始数据集)?我们是否应该找到最近邻居(1-NN)以了解查询描述符属于哪个群集?
为什么我需要这个 - 应用程序:
我实施BoF模型以实现CBIR:给定查询图像i
,在图像数据集中找到q
的最相似图像INSPECT REPLACING
。为此,我们需要解决1近似最近邻问题,例如使用LSH。问题是LSH中每个图像的输入都表示为一个向量,所以我们需要BoF才能做到这一点!我希望现在为什么我需要它更清楚:)
如果我在上述程序中犯了一些错误,请告诉我。
答案 0 :(得分:1)
您的算法正在为图像生成等效的单词。这些“单词”并不意味着是最终的结果,而只是使其易于与其他机器学习技术一起使用的东西。
在此设置中,您将从初始要素(第1点的关键点)生成一组k个簇。 然后用每个簇中关键点的数量来描述每个图像(就像你有一个由长度为k的字典中的单词组成的文本)。
第3点表示你从训练集图像中获取所有关键点,并运行k-means algorithm,以找出点之间的一些合理分离。这基本上确定了单词的含义。
因此,对于新图像,您需要像训练集一样计算关键点,然后使用已经在训练中计算过的聚类,找出新图像的特征向量。也就是说,您将图像转换为您构建的字典中的单词。
这是从图像生成合理特征向量的所有方法(如果需要,可以是部分结果)。这不是一个完整的机器学习算法。要完成它,您需要知道自己想要做什么。如果您只是想找到最相似的图像,那么最近邻搜索应该这样做。如果要标记图像,则需要从特征向量中训练分类器(如naive-bayes),并使用它来计算查询的标签。