视觉词袋图像分类中的每个过程是如何工作的?

计算科学 计算机视觉
2021-12-22 10:57:18

我希望这是主题,我通过这里的提案找到了这个: https ://area51.meta.stackexchange.com/questions/320/shall-we-unite-computational-science-proposals

BOW 的一个很好的视觉描述: 在此处输入图像描述

但是,我不太了解此处某些步骤的意义。我知道特征提取从图像中获取某种形式的独特特征。但就是这样。

编码似乎是某种形式的 kd-tree 操作,但似乎最常见的方法是直方图编码。只需通过编码阶段,我就可以进行对象识别,因为通过编码,我可以直接搜索匹配特征列。

但是标准模型还在继续,这就是我完全迷失的地方。

我不知道什么是池化。但我感兴趣的池化步骤是使用金字塔匹配内核进行最大或总和池化。汇集的意义何在?

最后,通过分类,使用某种形式的 SVM 将输入图像分类器与其他分类器进行比较。我有点理解这个过程,但它似乎没有必要,除非我需要找到一个对象属于哪个类,而不是识别一个对象本身。

那么忽略分类部分,编码和池化是如何工作的呢?如果我可以通过提取特征并将其与转换为 kd-tree 的特征数据库进行比较来实现对象识别,为什么还需要池化?

1个回答

有几种方法可以实现 BoW(词袋)模型,但一般来说:

  • 编码是对构成要分类的图像或对象的图像块进行量化。基本编码方案的工作原理是首先在训练/预处理步骤期间跨图像/对象的多个实例收集的所有(例如 3x3)像素补丁集上运行 K-means。这构建了一个已知的字典,该字典由从聚类中获得的质心表示。

    在这个过程结束时,你最终得到了 3x3 个补丁的 K 个具有代表性的“视觉词”(K 表示结束后每个簇的质心)。这些“视觉词”代表了通常被理解为你的视觉词典的内容。一旦有了这些视觉词,编码就是为图像/对象中的每个 3x3 补丁分配字典中最接近的 3x3 词(最近邻)的过程。

  • 化是指将图像(或要分类的对象)表示为“词袋”的过程。这里的词袋是为了传达,一旦你用一个词(一个介于 1 和 K 之间的数字)对每个补丁进行编码,你就会构建一个新的表示(一个袋子),它丢弃了构成你的图像或对象的词之间的空间关系.

    这种表示通常是 3x3 单词的直方图或空间相邻直方图的集合(即值 1 到 K 的直方图),它们共同构成您的对象或图像。因此,“池化”是构建单词直方图的过程(即池化〜从图像中“采样”单词以构建单词的概率质量函数)

    澄清一下,池化的目的有两个:

    1. 通过构建作为单词直方图的特征向量(而不是将完整的“单词句子”放入特征向量中),您的描述符将不受“单词顺序”的变化的影响。在计算机视觉中,这转化为关于图像和对象的旋转和扭曲的不变性,这是一个理想的东西。

    2. 如果字典与句子的长度相比较小,则单词的直方图的维数比原始向量少。更少的维度使学习(培训)变得更加容易

    分类是指对现在由“词袋”表示的图像/对象进行分类的过程。按照上面的示例,这里的特征向量将是您的对象或图像的单词(3x3 块)的直方图(或直方图)。

以上暗示您的工作词是一个图像补丁(在我使用的示例中,一个 3x3 像素补丁)。但是没有什么能阻止您定义与其他视觉提示或描述符相对应的单词,例如 SIFT 特征向量(您发布的图表中就是这种情况)。