基于Hamming embedding and weak geometric consistency for large scale image search论文的学习博客

本文从两个方面来介绍HE算法: 
1.简要介绍一下BOF,以及它的投票机制 
2.针对BOF的改进,局部图像描述子的汉明嵌入


voting interpretation of bag-of-features 
这是图像检索中常用到的一个模型,我觉得和bag-of-word差不多的吧,一种词袋模型。提取database中所有图片的特征点,对此进行聚类,(例如聚类成k个类),可以将这些特征点划分成k个类,由此建立一个词典模型。这里可以想象成文本中的词语,例如我们有冰淇凌、火腿、牛奶、连衣裙、裤子、T恤这几个词,可以聚类成2个类(食物和衣服),那么词典中就有v=[v1(食物),v2(衣服)]这个向量模型。这样子,每个特征描述子都有对应的聚类中心,如果两个特征描述子如果对应于同一个聚类中心,那么这两个描述子匹配成功。这时候如果给定一个查询图片,它与数据库中所有图片进行比较,如果描述子匹配数目多,相似度越高,则越容易匹配成功。 
这里重点讲一讲投票的过程: 
yi` 给定查询图片的局部描述子 
xi,j 数据库第j张图片(1《i《n)的局部描述子

1.数据库第j张图片相似度分数初始化 sj = 0 
2.对于查询图片的每个描述子yi和数据库每个描述子xi,y 
![这里写图片描述](https://img-blog.csdn.net/20150801151827865) 
f为xi,j和yi
的匹配函数,f函数可以有很多种,如欧式距离、k-NN等 
 
在这里使用匹配函数采用这种方式定义: 
 
根据k-means聚类得到量化器q,q(x)是离描述子x最近的聚类中心。如果两个描述子的q(x) =q(y),则两个描述子在空间上有很大概率相似。 
3.最后就是利用bof的voting机制对数据库中的每张图片进行投票,计算相似度。 
 
这里sj是每张图片的匹配分数,分数越高,则query图片与database中第j张图片的相似度越高。其中m是query图片的特征总数,mj是database中第j张图片的特征总数,这里除以mj*m是 做了一个归一化处理,防止某张图片特征数过大或过小。而后面一个等式是做的一个匹配上的改进,利用聚类索引号码k进行匹配,计算同属于一类的query和database中图片的特征数,进行voting得分计算。 
ps: 以上所提及的score是未考虑到视觉单词的权重,此处再进行改进,加入tf-idf权值, 

然而bof也存在不少缺点,主要集中在选择聚类中心k值数上。 
当k值过低时,虽然噪音降低,但是同一聚类的特征间差距可能会比较大;当k值过高时,则容易导致本应分属于同一类的特征点,则分至其他类中,造成较大误差。 


Hamming embedding of local image descriptors 
汉明嵌入的主要目的是解决计算复杂度,对128维特征进行降维,减少计算量。并且针对bof模型进行改进,对同一聚类中心的特征计算由0和1构成的汉明编码值,若同属于一个中心,则再计算两汉明编码向量的距离,若小于阈值则match,这样减少了单纯比较sift特征的复杂度,并提高了bof模型的精度。

具体步骤分成如下两步:1.off-line 学习过程,即对数据集数据进行离线处理;2.on-line 匹配过程,即query图片与数据集图片进行匹配

1.off-line操作 
1>产生正交P矩阵,用以降维。先随机产生一个128*128维高斯矩阵,再进行QR分解,并取前db(这里取db=64)行,作为降维的正交P矩阵64*128维。 
2>提取数据集图片的sift特征点,并进行聚类,这里可以采用k-means方法进行聚类。 
3>对特征x进行降维,采用z=P*x,降维成64维向量。计算该特征对应的聚类中心q(x)。可以使用flann、暴力匹配、或者转置与码本向量相乘取最大值得到匹配项这些方法来得到该特征的聚类中心。 
4>将同属于一个聚类中心的所有特征向量进行中值计算,计算该类的64维中值向量。 
5>计算所有特征的汉明编码b(x)=(b1(x),b2(x)““`b64(x)) 
 
这里tq(x),i是指的聚类中心q(x)的中值向量的第i维值。

2.on-line操作 
1>提取query图片的sift特征点,并正交降维化 
2>计算特征点对应的聚类中心 
3>与中值向量比较得到其汉明编码值b(x) 
4>进行匹配。与bof中的matching function不同的是,特征点匹配条件从原来的聚类中心数相同,改成了当聚类中心数相同时进一步比较两个特征向量的汉明距离,小于阈值ht时,则特征点匹配 
 
利用这个改进匹配函数,进行投票,计算sj的方法同bof中的计算方法,只是利用k进行简化计算的式子不能再用了。另外,ht的取值与数据集选择、聚类中心数目有关系,论文中建议为20-25左右,而我在进行项目中所计算得到的是11,所以ht的参数值需要使用者根据实际数据进一步调整。

最后结果就不附上了,利用汉明嵌入确实使得匹配精度有了很大提升。另外根据论文思路在进行匹配时容易造成匹配速度较慢,可以先将图片中的每个特征点对应的聚类中心数进行排序,然后再匹配时利用归并排序的思想,这样可以将时间复杂度从O(N*M)降至O(Nlog(M))。


Reference: 
1: HE and WGC for large scale image search 论文paper 
2: http://blog.csdn.net/definewl/article/details/41217441 
3: http://blog.csdn.net/mqfcu8/article/details/44950609 
4: http://www.docin.com/app/p?id=1097516045 
5: http://www.codeproject.com/Articles/619039/Bag-of-Features-Descriptor-on-SIFT-Features-with-O 
6: http://blog.csdn.net/loadstar_kun/article/details/39450137

Hamming Embedding 汉明嵌入相关推荐

  1. hamming code/汉明编码

    hamming code/汉明编码 看了很多文章都没太讲明白汉明编码,都讲的太复杂了,概念复杂.操作也复杂,之后看了些资料,明白了一些,在此分享,希望能够简洁而本质的阐述汉明编码. 汉明编码的本质 通 ...

  2. 汉明距离、汉明损失详解及代码(python)

    文章目录 引言 汉明距离(Hamming distance) 代码示例 汉明损失(Hamming loss) 代码示例 参考链接 引言 汉明距离是机器学习中的常用度量.本文整理了具体的图示+代码,帮你 ...

  3. 1968年图灵奖得主 – 理查德·卫斯里·汉明 (Richard Hamming)

    1968年图灵奖得主 – 理查德·卫斯里·汉明 (Richard Hamming) 背景 鉴于其在计数方法.自动编码系统.检测及纠正错码方面的工作. 传记资料 理查德·卫斯里·汉明(1915年2月11 ...

  4. 距离度量:闵氏、欧式、马氏、余弦、汉明等

    目录 1. 闵氏距离(Minkowski Distance) 2. 欧式距离(Euclidean Distance) 3. 标准化欧式距离(Standardized Euclidean distanc ...

  5. 理查德·汉明和他的汉明码

    点击上方"LiveVideoStack"关注我们 作者 | Alex 技术审校 | 赵军 理查德·汉明 声影传奇 #005# "计算的目的是洞察,而非数字(The pur ...

  6. 第二章 数据的表示和运算 2.1.5 汉明(海明)校验码 [计算机组成原理笔记]

    第二章 数据的表示和运算 2.1.5 汉明(海明)校验码 本笔记参考书目: 计算机组成原理(第六版.立体化教材)白中英.戴志涛 2021王道计算机组成原理视频公开课 本节重点: 海明(Hamming) ...

  7. 理查德·汉明《你和你的研究》

    转载自:阮一峰的网络日志 理查德·汉明(Richard Hamming,1915--1998)是著名美国计算机学家,图灵奖得主,"汉明码"的发明人. 1986年3月7日,他在贝尔通 ...

  8. 我国计算机体系结构相关产业,中国工程院院士吴汉明:发展我国半导体产业,力求颠覆传统计算机体系结构...

    "集成电路是一个非常典型的全球化产业.在后摩尔定律时代,产业技术发展趋势放缓,系统结构.特色工艺和先进封装在芯片制造方面大有可为."在题为"关于我国芯片制造的一些思考&q ...

  9. 华中科技大-汉明校验码设计

    实验目的: 掌握汉明码编码的基本方法. 要求采用传统电路的设计方法,对二进制加法器进行设计 利用Logsim软件的虚拟仿真来设计实现22位的海明编码(16位原始数据+5位海明检验位+1位总的奇偶校验位 ...

最新文章

  1. APPLE框架之高效便捷的Repository解决方案
  2. 原HP大中华区总裁孙振耀的退休感言
  3. 详解实时查看网卡流量的几款工具
  4. ps、grep和kill联合使用杀掉进程(转)
  5. 【es】INDEX_CREATED the shard cannot be allocated to the same node a copy of the shard already
  6. 一个收入很低的人,能装大款到什么地步?
  7. JSP(二):JSP页面组成部分
  8. python中基例_python | 自定义函数
  9. Java实现生成32位UUID工具类
  10. 基于 Retinex 的几种图像增强算法总结
  11. 用户体验衡量指标分析
  12. VSCode SSH 远程连接
  13. 计算机视觉的发展历程
  14. EL表达式和JSTL标签库学习笔记
  15. 用c语言写个简单的电话薄
  16. python 比较两种包装的大米的价钱
  17. attention 文字识别算法_支持40种语言的图片文字识别(OCR)项目
  18. 智能锁行业进入视频时代,如何定义一把好的视频锁?
  19. Qt(三)--- 实现QQ登陆界面头像状态栏的功能
  20. iapp跳转QQ名片代码

热门文章

  1. mysql报错No operations allowed after statement closed
  2. Python的列表推导式和嵌套列表推导式
  3. Python软件编程等级考试三级——20210905
  4. 全新线控制动系统产品发布,清智科技正式完成业务拓展
  5. 【Wayland】Weston多屏显示
  6. 【Python数据结构与算法】(三):递归(Recursion)
  7. 部署NFS服务,以及安全的NFS服务
  8. 【原理/Java并发】从volatile到MESI协议
  9. ajax回调方法名使用什么事件,ajax的回调函数和匿名函数
  10. 读《STRENGTHNET: DEEP LEARNING-BASED EMOTION STRENGTH ASSESSMENT FOR EMOTIONAL SPEECH SYNTHESIS》