词汇树在图像检索领域用的比较多,而图像检索在计算机视觉中的3D重建中又是一个比较关键的问题。作者提出这个方法是受到了一个先前被提出的文本检索的方法。

先从训练的图像中局部仿射不变的区域中提取局部描述子,然后对这些描述子进行K-means聚类,聚类中心成为visual words。 visual words的集合使用TD-IDF(Term Frenquency Inverse Document Frenquency)打分,来评价查询图像和数据库图像的相关性。作者用这些visual words构造了一个词汇树(Vocabulary Tree),并提出了一种层次化的TF-IDF打分策略。词汇树的结构使我们可以使用大量的visual words,因为树的查询起来很快。

一、构造词汇树

使用大量具有代表性的描述子矢量来进行树的无监督训练,在这里使用K-means聚类方法,不过K不是代表最终的聚类中心的数量,而是代表每一层的分类数。首先,对原始的训练数据进行K-means聚类,定义K个聚类中心。然后把训练数据按照聚类中心分为K个组,每个组的数据都有同样的聚类中心。然后同样的聚类过程应用到每个组中,把每个组再划分为K个组,不停地迭代,直到词汇树到达了预设的最大深度L。

在线搜索阶段,每个描述子只用按照跟训练相似的步骤逐层地寻找聚类中心,直到叶结点。


图1.词汇树的生成过程。K=3,每一层都进行聚类,找到最近的类中心,再继续在该区域中聚类。

二、打分的定义

在进行查询的时候,要计算查询图像和数据库图像的相似程度,这是通过比较查询图像和数据库图像的特征在词汇树中的分布相似程度衡量的。一个图像往往会有很多个特征。


图2. K=10的3层词汇树,代表一个有400个特征的图像。

总的来说,是根据熵来定义一个权重wi,给树中的每一个节点i。qi代表查询量,di代表数据库中的值。

ni 和 mi 分别是查询图像和数据库图像的特征描述子中通过节点i的描述子个数。基于归一化的描述子的差得到一个数据库图像和查询图像的打分s:

另外,作者发现上式中 L1-模的效果会比 L2-模的效果要好。

N是数据中图像的总数量,Ni是至少有一个描述子通过节点i的数据库图像数量。

三、打分的实现

使用 Forward file 来记录在每一个图片中出现了哪些 visual words, 一个图片对应一个 Forward file。同样,每一个节点对应一个Inverted file 来存储每个节点中出现的图片的序号(id-number),以及每张图像出现的次数 mi(term-frenquency)。

在实现中,只有叶结点有真正的 Inverted file,内部节点的 Inverted file 是根据叶结点计算出来的。如下图所示:


图3. K=2,L=2 的数据库结构。叶结点有真正的Inverted File,中间的节点只有Virtual inverted file,可以根据叶结点的Inverted file直接串联即可得到。

表示数据库图像的矢量可以被预先计算好,并且归一化,同样,查询矢量也被归一化到单位大小。使用如下方式计算归一化的Lp-模差:

对于每一个非零的查询维度qi,inverted file 可以被用来遍历对应的非零数据库实体 di 并累计数量。

Vocabulary Tree 词汇树算法相关推荐

  1. [论文阅读]词汇树 Scalable Recognition with a Vocabulary Tree

    论文阅读,记录一下自己阅读论文的收获,如有谬误,希望能得到指正! ------------------------------------------------------------------- ...

  2. Python:实现decision tree决策树算法(附完整源码)

    Python:实现decision tree决策树算法 import numpy as np class Decision_Tree:def __init__(self, depth=5, min_l ...

  3. 【机器学习】Decision Tree 决策树算法详解 + Python代码实战

    文章目录 一.直观理解决策树 二.熵的作用 三.信息增益 四.决策树构造实例 4.1 问题描述 4.2 根节点构造 五.信息增益率和GINI系数 5.1 信息增益存在的问题 5.2 信息增益率 5.3 ...

  4. C++实现trie tree字典树(附完整源码)

    实现trie tree字典树 实现trie tree字典树算法的完整源码(定义,实现,main函数测试) 实现trie tree字典树算法的完整源码(定义,实现,main函数测试) #include ...

  5. 四级英语词汇加词组(超全)

    新四级冲刺需牢记的700核心词 1. alter   v. 改变,改动,变更 2. burst   vi./ n. 突然发生,爆裂 3. dispose   vi. 除掉:处置:解决:处理 (of) ...

  6. 【大学英语四六级】四六级阅读高频词汇

    四六级阅读高频词汇 689个高频词汇 相关资料下载(免费) 689个高频词汇 alter v. 改变,改动,变更 burst vi. n. 突然发生,爆裂 dispose vi. 除掉:处置:解决:处 ...

  7. 最新版大学英语六级词汇打印版

    abbreviation          n.节略,缩写,缩短 abide                vt.遵守 vt.忍受 abolish              vt.废除,取消 abse ...

  8. 【机器学习】Java 代码实现 CART 决策树算法

    文章目录 一.决策树算法 二.CART 决策树 三.Java 代码实现 3.1 TrainDataSet 3.2 DataType 3.3 PredictResult 3.4 CartDecision ...

  9. 2011大学英语四级核心高频词汇表免费下载

    2011年大学英语四级核心高频词汇表 abandon vt.丢弃:放弃,抛弃 ability n.能力:能耐,本领 abnormal a.不正常的:变态的 aboard ad.在船(车)上:上船 ab ...

最新文章

  1. java.net.SocketException四大异常解决方案
  2. ML_Multiple Linear Regression
  3. 用MATLAB模拟天线接收信号时,突然出现一个干扰信号,并且干扰信号从0°开始,绕90°,观察SINR的变化规律
  4. git bash 操作文件及文件夹命令
  5. 用SoapUI进行WebService接口测试
  6. ELK详解(七)——Kibana部署
  7. Informatic学习总结_day01
  8. gst-launch-1.0在Linux下的命令
  9. 2019上半年深圳二手楼市热度如何?(链家数据爬取分析)
  10. 现身说法,如何给上司送礼物
  11. 得链表者得天下(上)
  12. hbase基于solr配置二级索引
  13. Quartz - Java 任务调度
  14. 数电和Verilog-基础概念
  15. SW2017学习笔记(三)草图的简介、绘制
  16. flutter 局部状态和全局状态区别_Android 开发者遇到 5G、AI,写给 Android 开发者的 Flutter 指南
  17. 幻想一夜暴富 “彩民”变“赌徒”
  18. 阿里系的企业协同办公平台——「语雀」
  19. QCC304X/QCC514X DFU/OTA升级精讲
  20. 2021本科渣渣的春招总结

热门文章

  1. 软考高级架构师笔记-6计算机系统性能评价信息系统基础知识
  2. (附源码)SSM校园新闻发布系统JAVA计算机毕业设计项目
  3. js实现禁止网页缩放(Ctrl+鼠标、+、-缩放有效亲测)
  4. 数字生活场景升级,智能音箱进入“存量战”
  5. .net连接Access 2000或Access 2007
  6. 2023年度国家自然科学基金项目申请初审结果公布~
  7. 拓展全球领域iebook超级精灵与国际巨头合作走向新市场
  8. matlab仿真电气连接,电气系统模块库-simulink与电气系统接口
  9. 使用opencv实现美颜(磨皮、祛痘)
  10. SMBMS(超市订单管理系统)