功能包如何运作?
How Bag of Features works?
我不确定这是这个问题的正确论坛,否则我很抱歉。
我对特征袋模型很陌生,我正在尝试实现以便通过矢量表示图像(对于 CBIR 项目)。
根据我的理解,给定一个n
图像的训练集S
,并假设我们想通过大小为k
的向量来表示图像,这些是实现 BoF 的步骤:
- 对于每个图像
i
,计算关键点集,并从中计算描述符i-D
集。 - 将所有图像中的描述符集放在一起,所以现在我们有
D
. - 在
D
上运行k
均值(上面定义了k
)算法,所以现在我们有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 来做到这一点!我希望现在更清楚为什么我需要它:)
如果我在上述过程中犯了一些错误,也请告诉我。
你的算法正在做的是为图像生成等效的单词。这组"单词"并不是最终结果,而只是让它易于与其他机器学习技术一起使用的东西。
在此设置中,您将从初始要素(点 1 的关键点)生成一组 k 个聚类。 然后,您通过落在每个集群中的关键点数量来描述每个图像(就像您有一个由长度为 k 的字典中的单词组成的文本一样)。
第 3 点表示您从跟踪集图像中获取所有关键点,并运行 k 均值算法,以找出点之间的一些合理分离。这基本上确定了单词是什么。
因此,对于新图像,您需要像对训练集所做的那样计算关键点,然后使用您在训练中已经计算出的集群,您可以找出新图像的特征向量。也就是说,您将图像转换为您构建的字典中的单词。
这都是从图像生成合理特征向量的方法(如果需要,可以生成部分结果)。这不是一个完整的机器学习算法。要完成它,您需要知道要做什么。如果您只想找到最相似的图像,那么是的,最近邻搜索应该这样做。如果要标记图像,则需要从特征向量中训练一个分类器(如朴素贝叶斯),并使用它来找出查询的标签。
- 如何反转整数参数包
- 如何将enable-if与模板参数和参数包一起使用
- 两个文件使用彼此的功能-如何解决
- 对可变参数使用声明.如何选择正确的功能
- 模板元编程:如何将参数包组合成新的参数包
- 如何将C++闭包与变量参数同时重用——类似于JavaScript
- 如何使用lock_guard在c++11中实现scoped_lock功能
- 如何使我的 sizeof sum 结构与空参数包一起工作
- 如何使用pyopencv_to功能?
- 模板参数包如何具有其他尾随参数?
- 模板参数包如何同时具有显式参数和推导参数?
- 可视化工具包 - 如何读取和渲染多个对象?
- 参数包和功能声明
- 您如何使用参数包参数键入功能指针类型
- 功能包如何运作?
- 未找到 MinGW msys 软件包:如何继续的一般建议
- 多参数包——如何
- 消息包-如何查找表示的字符串
- 流操纵器如何C++功能
- Boost::asio如何实现定时数据包发送功能