BoW学习笔记

BoW(词袋)简介:(统计频率,无顺序)

Bag-of-words model (BoW model) 最早出现在自然语言处理(Natural Language Processing)和信息检索(Information Retrieval)领域.。该模型忽略掉文本的语法和语序等要素,将其仅仅看作是若干个词汇的集合,文档中每个单词的出现都是独立的。BoW使用一组无序的单词(words)来表达一段文字或一个文档.。近年来,BoW模型被广泛应用于计算机视觉中。
 

应用于文本的BoW model:

给出两个简单的文本文档如下:

John likes to watch movies. Mary likes too.

John also likes to watch football games.

基于上述两个文档中出现的单词,构建如下一个词典 (dictionary):

       {"John": 1, "likes": 2,"to": 3, "watch": 4, "movies": 5,"also": 6, "football": 7, "games": 8,"Mary": 9, "too": 10}

上面的词典中包含10个单词, 每个单词有唯一的索引, 注意它们的顺序和出现在句子中的顺序没有关联. 根据这个字典, 每个文本我们可以使用一个10维的向量来表示:

       [1, 2, 1, 1, 1, 0, 0, 0, 1, 1]

       [1, 1,1, 1, 0, 1, 1, 1, 0, 0]

这两个向量共包含10个元素, 其中第i个元素表示字典中第i个单词在句子中出现的次数. 因此BoW模型可认为是一种统计直方图 (histogram). 在文本检索和处理应用中, 可以通过该模型很方便的计算词频.

这种表示有几个成功的应用程序,例如电子邮件过滤。

相关基础详细部分:

[翻译]词袋模型入门:https://blog.csdn.net/android_ruben/article/details/78238483

 

应用于计算机视觉中的BoW model:

图像可以类比为文档(document), 图像中的单词(words)可以定义为一个图像块(image patch)的特征向量. 那么图像的BoW模型即是 “图像中所有图像块的特征向量得到的直方图”.

建立BoW模型主要分为如下几个步骤:(与文本处理相似)

1. 特征提取

假设有N张图像, 第i张图像图像可由n(i)个image patch组成, 也即可以由n(i)个特征向量表达. 则总共能得到sum(n(i))个特征向量(即单词).

特征向量可以根据特征问题自行设计, 常用特征有Color histogram, SIFT, LBP等.

2. 生成字典/码本(codebook)

对上一步得到的特征向量进行聚类(可以使用K-means等聚类方法), 得到K个聚类中心, 用聚类中心构建码本。(通过聚类方法,生成词袋)

3. 根据码本生成直方图

对每张图片, 通过最近邻计算该图片的每个 “单词”应该属于codebook中的 “哪一类”单词, 从而得到该图片对应于该码本的BoW表示.

 

BOW可视化(此部分为转载引用:http://www.cnblogs.com/zyly/p/9796600.html

  • 假设我们有三个目标类,分别是人脸、自行车和吉他。首先从图像中提取出相互独立的视觉词汇(假设使用SIFT方法):

通过观察会发现,同一类目标的不同实例之间虽然存在差异,但我们仍然可以找到它们之间的一些共同的地方,比如说人脸,虽然说不同人的脸差别比较大,但眼睛,嘴,鼻子等一些比较细小的部位,却观察不到太大差别,我们可以把这些不同实例之间共同的部位提取出来,作为识别这一类目标的视觉词汇。

  • 将所有的视觉词汇集合在一起:

  • 利用K-means算法构造词汇字典。K-means算法是一种基于样本间相似性度量的间接聚类方法,此算法以kk为参数,把nn个对象分为kk个簇,以使簇内具有较高的相似度,而簇间相似度较低。SIFT算法提取的视觉词汇向量之间根据距离的远近,可以利用K-Means算法将词义相近的词汇合并,作为词汇字典中的基础词汇,假定我们将kk设为4,那么词汇字典的构建过程如下:

  • 利用词汇字典的中词汇表示图像。利用SIFT算法,可以从每幅图像中提取很多个特征点,这些特征点都可以用词汇字典中的词汇近似代替,通过统计词汇字典中每个词汇在图像中出现的次数,可以将图像表示成为一个$k=4$维数值向量:

上图中,我们从人脸、自行车和吉他三个目标类图像中提取出的不同视觉词汇,而构造的词汇字典中,会把词义相近的视觉词汇合并为同一类,经过合并,词汇表中只包含了四个视觉词汇,分别按索引值标记为1,2,3,4。通过观察可以看到,它们分别属于自行车、人脸、吉他、人脸类。统计这些词汇在不同目标类中出现的次数可以得到每幅图像的直方图表示(我们假定存在误差,实际情况亦不外如此):

人脸:  [3,30,3,20]
自行车:[20,3,3,2]
吉他:  [8,12,32,7]

其实这个过程非常简单,就是针对人脸、自行车和吉他这三个文档,抽取出相似的部分(或者词义相近的视觉词汇合并为同一类),构造一个字典,字典中包含4个视觉单词,即:

dic = {1:'自行车',
       2:'人脸', 
       3:'吉他', 
       4:'人脸类'}

最终人脸、自行车和吉他这三个文档皆可以用一个4维向量表示,最后根据三个文档相应部分出现的次数绘制对应的直方图。
需要说明的是,以上过程只是针对三个目标类非常简单的一个示例,实际应用中,为了达到较好的效果,单词表中的词汇数量kk往往非常庞大,并且目标类数目越多,对应的kk值也越大,一般情况下,kk的取值在几百到上千,在这里取k=4k=4仅仅是为了方便说明。

 

超级全的讲解,包括目标识别、目标检测(有图有代码):

第十九节、基于传统图像处理的目标检测与识别(词袋模型BOW+SVM附代码)http://www.cnblogs.com/zyly/p/9796600.html

简介BoW实现图像分类,与提取所有特征的算法相比较,举了狗狗眼睛的例子:

BoW实现图像分类报告:https://www.jianshu.com/p/8f68bdfac93c

简介BoW用于图像检索的流程

BoW用于图像检索的一般化流程:BoW用于图像检索的一般化流程

算法解析(过程步骤很细):

计算机视觉课程作业 基于词袋模型的图像分类算法:https://blog.csdn.net/baidu_28563321/article/details/46348439

MATLAB实现:

视觉词袋模型BOW学习笔记及matlab编程实现:https://blog.csdn.net/gdengden/article/details/80702007

本文参考:

https://www.cnblogs.com/scnucs/p/3161961.html

BoW(词袋)模型详细介绍:https://blog.csdn.net/u010213393/article/details/40987945(有代码下载链接)

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值