【问题标题】:How Bag of Features works?功能包如何工作?
【发布时间】:2016-10-07 05:56:36
【问题描述】:

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

我对@9​​87654321@ 模型很陌生,我正在尝试实现以通过向量表示图像(对于 CBIR 项目)。

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

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

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

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

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

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

【问题讨论】:

    标签: c++ algorithm computer-vision k-means


    【解决方案1】:

    您的算法正在为图像生成相当于单词的内容。这组“单词”并不意味着最终结果,而只是使其易于与其他机器学习技术一起使用的东西。

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

    第 3 点表示您从训练集图像中获取所有关键点,然后运行 ​​k-means algorithm,以找出点之间的合理分隔。这基本上确定了单词是什么。

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

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

    【讨论】:

    • 我很抱歉,我很愚蠢!不是第 3 点(这只是 k-means),而是第 5 点(我们通过将每个描述符与一个集群相关联并定义直方图来定义结果向量)。
    • 所以,我仍然不清楚“给定图像查询,我们如何获得结果 BoF 向量”?对于每个描述符,我们必须在数据集中找到 1-NN 描述符并将其与相关集群相关联吗?如果我不清楚,请告诉我
    • 是的,要分配描述符,您可以获得最近的邻居。您可以根据您的训练数据计算每个集群的半径,并仅在查询点位于该半径内时分配它(以防您开始获得与训练数据非常不同的查询)。
    • 哇,这很聪明,没想到半径技巧!谢谢!
    • 你能看看this的问题吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-02
    • 2012-02-24
    • 2012-09-06
    • 1970-01-01
    • 1970-01-01
    • 2022-11-11
    相关资源
    最近更新 更多