BOW模型在ANN框架下的解释
原文链接:http://blog.csdn.net/jwh_bupt/article/details/17540561
作者的视野好,赞一个。
哥德尔第一完备性定理,始终是没有能看完完整的证明,艹!看不懂啊!
原文:
Bag of words模型(简称BOW)是最常用的特征描述的方法了。在图像分类和检索的相关问题中,能够将一系列数目不定的局部特征聚合为一个固定长度的特征矢量,从而使不同图像之间能够进行直接比较。BOW的改进方法包括一些稀疏的编码方式(如llc),kernel
codebooks等,使得BOW一般作为benchmark被比较。然而,BOW往往作为一种编码方式被解释着(SIFT作为coding,BOW作为average pooling),在这里,我会从一个近似最近邻(approximate nearest neighbor)的角度解释一下BOW。
假设有两幅图像A和B,A有一系列描述子(例如SIFT){x1,x2…xn}组成,而B由{y1,y2…ym}组成。为了计算这两幅图之间的相似度,最直接的方法是采用一下的voting system:
(1)
其中f是一个匹配函数,反映了xi与yj之间是否匹配。对于一个ε-search和k-NN的匹配方式下,f分别定义为:
按(1)式将所有的i和j累加起来,再对{x}和{y}做归一化(这对应于BOW的L1归一化),就能够得到A和B的一个相似度度量(此时s的值越大,表示A和B之间匹配的特征对的数目越多)。
我们令f反映的匹配方式为最近邻匹配,此时yj是xi的最近邻时(一般还需要这个最近邻的距离与次近邻的距离的比值小于一定阈值),认为yj和xi是匹配的。但是潜在的一个问题就是如果两幅图包含的SIFT特征十分多(一般是1000以上的数量级),exhaustively search将是十分耗时的,时间复杂度是O(nm),需要大量的搜索时间。因此常常用approximate nearest neighbor代替exact nearest neighbor,如下图所示。
近似的最近邻有可能与真实的最近邻有所偏差,但是计算上时间复杂度大大降低。
常见的ANN的方法有k-d tree(通过生成一棵树对D维特征空间进行划分,待匹配的特征点会从与之属于同一子空间的点开始查找),BBF(改进的k-d
tree方法,在k-d tree回溯的时候引入优先级的队列),Locality-sensitive Hashing(通过一系列随机的哈希函数,使得经过哈希投影后两特征点哈希值相等的概率与原特征的相似度之间形成一对应关系)。
LSH是最需要一说的,但是限于篇幅我又不想在这里说,我在后面的文章中肯定会再提到,如果大家不太了解的话可以先看这里。在这里到提到的结论是,对于欧式距离作为相似度的情况下,LSH选择的哈希函数是一个随机的投影函数:
(2)
这个投影函数相当于将原始特征向量投影到一条随机的直线上,然后将这条直线划分为长度为bi的多条线段,会落入同一线段上的两特征点被认为是相似的。我们选择多个投影函数共同作用,要求在这多个投影函数上的取值都相等的两个点,才被认为是近邻的。这些投影函数的作用,相当于对整个描述子的特征空间做随机的划分,如下图所示:
落入同一子空间的点,都被认为是近邻的。至于为什么是随机投影函数,这里有比较详细的解释,我以后有空再到文章中做介绍。
从LSH的效果上来看,很明显就是我们只要能够选择一种合理的划分特征空间的方式,就能认为落入同一子空间的所有点是近邻的。随机投影尽管能够满足LSH的基本假设,但是这个“随机”,其实是很蛋疼的,因为随着投影的直线越来越多,很多直线存在的意义是值得思考的,也就是说如果我们已经选了1000中随机投影的方法,那么第1001中投影的方法应该尽可能在效果上不同于前1000中(这样才能体现它最大的价值嘛),而随机显然不能保证这一效果。所以,我们完全可以通过所有样本的分布情况,学习出一种划分方式。没错,k-means,无疑是一种实现手段,如下图:
好,终于绕了半天以后绕到BOW上来了,BOW不就是用k-means训练了一个码数,然后所有SIFT描述子都往这本码数上做硬投影(其实就是投影到一个子空间中)了么。投影后,在同一个码字上的所有点都认为是相匹配的。回到(1)式的f(xi,yj)函数中来,如果xi和yj落入同一个码字上,那么它们就被认为是相匹配的(注意这里一个xi可能与B图像的多个特征相匹配了,我最后还会接着解释)。这种设计,会是f的一种取法。
再看看BOW的矢量本身,如果我们采用内积来计算两个图像之间的相似度(在此不考虑对BOW矢量做归一化)。BOW特征的第i维表示图像所有SIFT在第i个码字上的投影的数目(对A和B两幅图分别用Ai和Bi表示),那么这一维上内积的结果就是Ai*Bi。这不正是在第i个子空间,A图的所有SIFT点与B图所有SIFT点的两两匹配的所有种可能吗?正好对应着前面所说的f()。
原来内积对应着两两匹配的所有可能,但是这很不合理啊,一个特征点按理应该在另一幅图中最多找到1个对应的匹配才对,如果用内积来描述相似度,一个点不就被匹配了n多次了么?不合理啊不合理。而如果用直方图相交的话,取min(Ai,Bi),这样一个点不就最多找到1个对应的匹配了吗?正是因为这样,直方图相交是一种更好的度量BOW这类直方图的方式(而不应该用余弦夹角或者内积)。而从数学上来说,适合L1归一化的特征(直方图一类的特征)不适合用欧氏距离来度量距离,而更适合用Hellinger
kernel,Mercer kernel之类的,不过我在这里也不做解释了,大家应该从其他文献中能找到答案。
BOW模型在ANN框架下的解释的更多相关文章
- Keras框架下的保存模型和加载模型
在Keras框架下训练深度学习模型时,一般思路是在训练环境下训练出模型,然后拿训练好的模型(即保存模型相应信息的文件)到生产环境下去部署.在训练过程中我们可能会遇到以下情况: 需要运行很长时间的程序在 ...
- 全面解析Pytorch框架下模型存储,加载以及冻结
最近在做试验中遇到了一些深度网络模型加载以及存储的问题,因此整理了一份比较全面的在 PyTorch 框架下有关模型的问题.首先咱们先定义一个网络来进行后续的分析: 1.本文通用的网络模型 import ...
- Bow模型(解释的很好)
Bag-of-words model (BoW model) 最早出现在NLP和IR领域. 该模型忽略掉文本的语法和语序, 用一组无序的单词(words)来表达一段文字或一个文档. 近年来, BoW模 ...
- 在Jena框架下基于MySQL数据库实现本体的存取操作
在Jena框架下基于MySQL数据库实现本体的存取操作 转自:http://blog.csdn.net/jtz_mpp/article/details/6224311 最近在做一个基于本体的管理系统. ...
- Caffe框架下的图像回归测试
Caffe框架下的图像回归测试 参考资料: 1. http://stackoverflow.com/questions/33766689/caffe-hdf5-pre-processing 2. ht ...
- Bag of Words(BOW)模型
原文来自:http://www.yuanyong.org/blog/cv/bow-mode 重复造轮子并不是完全没有意义的. 这几天忙里偷闲看了一些关于BOW模型的知识,虽然自己做图像检索到目前为止并 ...
- (转)springMVC框架下JQuery传递并解析Json数据
springMVC框架下JQuery传递并解析Json数据 json作为一种轻量级的数据交换格式,在前后台数据交换中占据着非常重要的地位.Json的语法非常简单,采用的是键值对表示形式.JSON 可以 ...
- Spring Security框架下Restful Token的验证方案
项目使用Restful的规范,权限内容的访问,考虑使用Token验证的权限解决方案. 验证方案(简要概括): 首先,用户需要登陆,成功登陆后返回一个Token串: 然后用户访问有权限的内容时需要上传T ...
- caffe框架下目标检测——faster-rcnn实战篇操作
原有模型 1.下载fasrer-rcnn源代码并安装 git clone --recursive https://github.com/rbgirshick/py-faster-rcnn.git 1) ...
随机推荐
- centos7下源码方式安装gitlab8.9+发送邮件+ldap
CentOS7下源码方式安装gitlab 环境描述 操作系统: centos7 redis: >=2.8 mysql >=5.5.14 git >=2.7.4 架构设计 一台gitl ...
- Atcoder AGC031B Reversi (DP计数)
简单的计数题.(总算做出一道AGC的B题了,然而这场比赛我忘记打了233333) 题目链接: https://atcoder.jp/contests/agc031/tasks/agc031_b 题意: ...
- 【例题 4-5 uva 512】Spreadsheet Tracking
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 每个操作对与一个点来说变化是固定的. 因此可以不用对整个数组进行操作. 对于每个询问,遍历所有的操作.对输入的(x,y)进行相应的变 ...
- 百度之星2014初赛 - 1002 - Grids
先上题目: Grids Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)Tota ...
- UVALive Archive - 6196 - Party Games
题目: You've been invited to a party. The host wants to divide the guests into 2 teams for party games ...
- asp.net--webconfg指南
原文链接 花了点时间整理了一下ASP.NET Web.config配置文件的基本使用方法.很适合新手参看,由于Web.config在使用很灵活,可以自定义一些节点.所以这里只介绍一些比较常用的节点. ...
- sublime text3环境与工具搭建
1,ctrl+shift+P ,打开包安装窗口如下: 2,选择 install Package,安装详解插件 1-安装 JsFormat插件,用于格式化js的插件,使用快捷键 Ctrl+Alt+F对J ...
- Linux查看文件内容命令:less(转)
less与more类似,但使用less可以随意浏览文件,而more仅能向前移动,却不能向后移动,而且less在查看之前不会加载整个文件. 语法 less [参数] 文件 参数说明: -b <缓冲 ...
- eclipse快捷键深入理解
1.Eclipse 中的重构功能使其成为了一个现代的 Java 集成开发环境 (IDE),而不再是一个普通的文本编辑器.使用重构,您可以轻松更改您的代码,而不必担心对别处造成破坏. 2.Eclipse ...
- ListViewItem中的图片不能动态改变的解决方法
近期遇到了一个问题,就是我的listviewitem中有个图片,点击的时候须要变成还有一种图片.结果在getView()中设置了响应.可是能够运行.就是不起作用.在网上查了非常多资料也没有解决.最后发 ...