目录
Bag-of-words简介
Bag-of-words应用于图像
Bag-of-features基础流程
1、特征提取
2、学习 “视觉词典(visual vocabulary)”
3、针对输入特征集,根据视觉词典进行量化
4、把输入图像转化成视觉单词(visual words)的频率直方图
图像检索
1、TF-IDF
2、倒排表(Inverted file)
最初的Bag-of-words ,也叫做“词袋”,在信息检索中,Bag-of-words model假定对于一个文本,忽略其词序和语法,句法,将其仅仅看做是一个词集合,或者说是词的一个组合,文本中每个词的出现都是独立的,不依赖于其他词是否出现。
应用以下实例解释:
文档1: John likes to watch movies. Mary likes movies too.
文档2: John also likes to watch football games.
基于以上两个文档,可以建构出词袋:
["John","likes","to","watch","movies","also","football","games","Mary","too"]
此处有10个不同的词,使用清单的索引表示长度为10的向量:
(1) [1, 2, 1, 1, 2, 0, 0, 0, 1, 1] (2) [1, 1, 1, 1, 0, 1, 1, 1, 0, 0]
词袋中列举了出现在文档中的每个词,向量(1)和向量(2)的索引内容分别对应到相应文档中该元素出现的次数。
举例来说,向量(1)第一个内容索引是1,即代表第一个索引内容"John"在文档1中出现的次数。后面以此类推。
此向量表示法根据文本中的词频分布,构造出文本描述子,无关原始文档中词的顺序。
通过构建词袋,可以将文档转化为各个单词元素作为横坐标,以单词出现的次数作为纵坐标的直方图,然后进行归一化处理,将每个词出现的频数作为文档的特征。
类比Bag-of-words在文档中的应用,也可以将图片分成若干个图像块,构建“词库”,把每幅图像描述为一个局部区域/关键点(Patches/Key Points)特征的无序集合,即Bag-of-features。
1. 特征提取
2. 学习 “视觉词典(visual vocabulary)”
3. 针对输入特征集,根据视觉词典进行量化
4. 把输入图像转化成视觉单词(visual words)的频率直方图
通过分割、密集或随机采集、关键点或稳定区域、显著区域等方式使图像形成不同的图像块,并获得各图像块处的特征。
特征必须具有较高的区分度,而且要满足旋转不变性以及尺寸不变性等,通常采用SIFT特征(也可以采用SUFT、Harrist等特征提取算法 )。SIFT会从图片上提取出很多特征点,每个特征点都是 128 维的向量,如果图片足够多的话,我们会提取出一个巨大的特征向量库。
提取完特征后,采取聚类算法对这些特征向量进行聚类。通才采用k-means聚类。
K-means算法流程:
1、随机初始化 K 个聚类中心
2、重复下述步骤直至算法收敛:
(1)对应每个特征,根据距离关系赋值给某个中心/类别
(2) 对每个类别,根据其对应的特征集重新计算聚类中心
视觉单词数量即K一般取3000~10000, 即图像整体描述的直方图维度为3000~10000。
聚类是实现 visual vocabulary 即码本的关键
• 无监督学习策略
• k-means 算法获取的聚类中心作为 codevector
• 码本可以通过不同的训练集协同训练获得
• 一旦训练集准备足够充分, 训练出来的码本将具有普适性
聚类完成后,得到k个向量组成的字典,叫visual word。
(1)对于输入特征,量化的过程是将该特征映射到距离其最接近的 codevector ,并实现计数
码本=视觉词典
Codevector=视觉单词
视觉词典样例
(2)选择视觉词典/码本的规模可能存在的问题:
太少:视觉单词无法覆盖所有可能出现的情况
太多:计算量大,容易过拟合
生成码本,即构造Bag-of-Features,也就是局部特征投影过程。
在第一步中我们获取了很多特征点,将这些特征点映射为码本矢量,码本矢量归一化,最后计算其与训练码本的距离,对应最近距离的训练图像认为与测试图像匹配。即图像检索。
图像检索流程
1. 特征提取
2. 学习 “视觉词典(visual vocabulary)”
3. 针对输入特征集,根据视觉词典进行量化
4. 把输入图像,根据TF-IDF转化成视觉单词(visual words)的频率直方图
5. 构造特征到图像的倒排表,通过倒排表快速索引相关图像
6. 根据索引结果进行直方图匹配
图像检索流程前面几步在前面有提到过,就不展开了。接下来我们了解下TF-IDF和倒排表。
TF-IDF是一种用于信息检索的常用加权技术,在文本检索中,用以评估词语对于一个文件数据库中的其中一份文件的重要程度。词语在文档中出现的频率越高,TF-IDF值越高,即成正比增加,也成反比下降。
TF-IDF可拆分为词频和逆文档频率。
词频(Term Frequency,TF)指的是一个给定的词语在该文件中出现的次数。如:一篇文档总词数为1000,单词A出现次数为3次,则TF=3/1000=0.003。其主要思想是:如果某个关键词在一篇文章中出现的频率高,说明该词语能够表征文章的内容,该关键词在其它文章中很少出现,则认为此词语具有很好的类别区分度,对分类有很大的贡献。
逆文档频率(Inverse Document Frequency,IDF)是描述了某一个特定词语的普遍重要性,如果某词语在许多文档中都出现过,表明它对文档的区分力不强,则赋予较小的权重;反之亦然。如:总共有1000篇文档,有100个包含词语A,则IDF= log (1000/1,00) = 3.287。IDF的主要思想是:如果文件数据库中包含词语A的文件越少,则IDF越大,则说明词语A具有很好的类别区分能力。
最终的TF-IDF权值为词频与逆文档频率的乘积。
利用下面的例子说明:
文档1:what is it?
文档2:it is a banana.
则有
"what": {1,1} 表示"what"出现在文档1中,频率为1次
"is": {1,2,2} 表示"is“出现在文档1和文档2中,总频率为2次
"it": {1,2,2}
"a": {2,1}
"banana": {2,1}
以此可以快速使用倒排表进行计算测试图像与数据库中训练图像之间的相似性,索引到相关图片,然后和测试图像特征进行直方图匹配。
图像检索效果如下图:
由此我们可以看出,图像检索得到的结果还是会有偏差,但还是能得到大部分正确的检索结果。
参考文章:
1、bag of feature||bag of word
2、浅析 Bag of Feature