因为在使用SIFT特征作图像分类时,一张图像通常有很多keypoints,一个keypoints有一个128维的特征向量,而若直接将这些特征向量只做简单的串联就输入分类器中,是不对的。我们需要一个能够表示整体图像的特征向量,所以要用到该模型。今天写一下学习的笔记。
简介:
Bag of words模型最初被用在文本分类中,将文档表示成特征矢量。
对于一个文档,忽略单词之间的词序、语法和句法等,仅将其看作是一堆单词(words)的集合。
多个文档的单词集合可组成一个袋子(bag)。袋子也称为词典、词汇表(Dictionary / vocabulary)。
袋中每个单词相互独立,将其聚类,类内相似度高,类间相似度低。合并后袋中只有不重复的单词(类)。
统计袋中每个单词在每个文档中出现的次数。假设有K个单词,则可对每个文档可画出对应的K维直方图。
若是分类问题,则可根据K维直方图中的单词词频,判断每个文档属于哪一类别。
经典例子:
文档一:Bob likes to play basketball, Jim likes too.
文档二:Bob also likes to play football games.
基于这两个文档构建的词典:
Dictionary = {1:"Bob", 2:"like", 3:"to", 4:"play", 5:"basketball", 6:"also", 7:"football", 8:"games", 9:"Jim", 10:"too"}
利用词典的索引号,以及每个单词在每个文档中出现的次数,我们可以得到表示两个文档的10维特征向量:
文档一:[1, 2, 1, 1, 1, 0, 0, 0, 1, 1]
文档二:[1, 1, 1, 1 ,0, 1, 1, 1, 0, 0]
向量中并没有表现出单词在文档中的词序。
应用于CV:
Bow模型也可用于计算机视觉的图像分类(image classification)中,每张图像的特征可视为视觉单词。A bag of visual words则为统计视觉单词出现的次数,用一个K维特征向量表示每张图像。
如何利用Bag of words模型将一幅图像表示为一个特征向量:
1、利用SIFT算法从属于不同类别的图像中提取出N个局部不变的特征点(keypoints)向量,作为视觉词汇;(每张图像的N,个数不同)
2、将所有特征点向量集中到一块,利用K-Means算法(基于样本间相似性度量的间接聚类方法)合并词义相近的视觉词汇,构造一个包含K个视觉词汇的词汇表(vocabulary);
3、统计词汇表中每个单词在每张图像中出现的次数,从而将每张图像表示为一个K维数值向量。即所求特征向量,最后用于分类器的输入。