冒泡~词袋模型应该是当初毕设就想写的一篇了吧...拖到现在。其实最近在思考我这样输出是否真的有用...因为自己的实践太差了..但是不输出的话 连理论都不会了 所以还是要努力鸭!
——————————————————
词袋模型
词袋模型即Bag-of-words model (BoW model) 最早出现在神经语言程序学(NLP)和信息检索(IR)领域。该模型忽略掉文本的语法和语序, 用一组无序的单词(words)来表达一段文字或一个文档,将其仅仅看做是一个词集合,或者说是词的一个组合,文本中每个词的出现都是独立的,不依赖于其他词是否出现。近年来, BoW模型被广泛应用于计算机视觉中. 与应用于文本的BoW类比, 图像的特征(feature)被当作单词(Word),把图像“文字化”之后,有助于大规模的图像检索。
文本实例
先举个例子说明一下 词袋模型在文本的实际应用过程:
例如有如下两个文档:
1.Bob likes to play basketball, Jim likes too.
2.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个不同的单词,利用词典的索引号,上面两个文档每一个都可以用一个10维向量表示(用整数数字0~n(n为正整数)表示某个单词在文档中出现的次数):
1:[1, 2, 1, 1, 1, 0, 0, 0, 1, 1]
2:[1, 1, 1, 1 ,0, 1, 1, 1, 0, 0]
接下来可以将次数化为直方图,我们查看文本中单词的直方图,即将每个单词计数视为一个特征。如果文档具有相似的内容,则文档是相似的,并且,仅从内容中我们可以了解文档的含义。通过例子的简单理解,可以发现词袋模型涉及两件事:
①已知单词的词汇。
②衡量已知单词的存在。
它被称为单词的“ 包 ”,因为关于文档中单词的顺序或结构的任何信息都被丢弃。该模型仅关注文档中是否出现已知单词,而不是文档中的位置。词袋可复杂性在于:如何设计已知单词(或标记)的词汇?如何对已知单词的存在进行评分?
(可采用布尔值去评分看是否出现)具体参考--你知道词袋模型吗?
图像实例
那么如何将词袋模型运用到图像分类上呢?其实,同理为了表示一幅图像,我们可以将图像看作文档,即若干个“视觉词汇”的集合,同样的,视觉词汇相互之间没有顺序。接下来做个详解:
由于图像中的词汇不像文本文档中的那样是现成的,我们需要首先从图像中提取出相互独立的视觉词汇,需经过如下三个步骤:
①特征检测②特征表示③单词本的生成同一类目标的不同实例之间虽然存在差异,但我们仍然可以找到它们之间的一些共同的地方,比如说人脸,虽然说不同人的脸差别比较大,但眼睛,嘴,鼻子等一些比较细小的部位,却观察不到太大差别,我们可以把这些不同实例(即眼睛、嘴等)之间共同的部位提取出来,作为识别这一类目标的视觉词汇。
SIFT算法是提取图像中局部不变特征的应用最广泛的算法,因此我们可以用SIFT算法从图像中提取不变特征点,作为视觉词汇,并构造单词表,用单词表中的单词表示一幅图像。接下来通过一个例子来叙述这个过程:
现在有三个目标类,分别是人脸、自行车和吉他。
①利用SIFT算法,从每类图像中提取视觉词汇,将所有的视觉词汇集合在一起,如下所示:②利用K-Means算法构造单词表。K-Means算法是一种基于样本间相似性度量的间接聚类方法,此算法以K为参数,把N个对象分为K个簇,以使簇内具有较高的相似度,而簇间相似度较低。SIFT提取的视觉词汇向量之间根据距离的远近,可以利用K-Means算法将词义相近的词汇合并,作为单词表中的基础词汇,假定我们将K设为4,那么单词表的构造过程如下图所示:③利用单词表的中词汇表示图像。利用SIFT算法,可以从每幅图像中提取很多个特征点,这些特征点都可以用单词表中的单词近似代替,通过统计单词表中每个单词在图像中出现的次数,可以将图像表示成为一个K=4维数值向量。从上图可以看到,我们从人脸、自行车和吉他三个目标类图像中提取出的不同视觉词汇,而构造的词汇表中,会把词义相近的视觉词汇合并为同一类,经过合并,词汇表中只包含了四个视觉单词,分别按索引值标记为1,2,3,4。通过观察可以看到,它们分别属于自行车、人脸、吉他、人脸类。统计这些词汇在不同目标类中出现的次数可以得到每幅图像的直方图表示:
人脸: [3,30,3,20]
自行车:[20,3,3,2]
吉他: [8,12,32,7]通过上面的例子可以发现:这其实就是针对人脸、自行车和吉他这三个文档,抽取出相似的部分(或者词义相近的视觉词汇合并为同一类),构造一个词典,词典中包含4个视觉单词,即Dictionary = {1:”自行车”, 2. “人脸”, 3. “吉他”, 4. “人脸类”},人脸、自行车和吉他这三个文档皆可以用一个4维向量表示,最后根据三个文档相应部分出现的次数得到直方图。
【补充说明:实际应用中,为了达到较好的效果,单词表中的词汇数量K往往非常庞大,并且目标类数目越多,对应的K值也越大,一般情况下,K的取值在几百到上千】
那么可以总结一下:
bow在图像应用上的步骤即为:sift→k-means→直方图
参考来源:BOW 原理及代码解析
代码可以参考:使用词袋模型对图像进行分类
八月最后一篇了~ending!