DBoW2算法原理介绍

DBoW2算法原理介绍

本篇介绍DBoW2算法原理介绍,下篇介绍DBoW2的应用。

DBow2算法

DBow2是一种高效的回环检测算法,DBOW2算法的全称为Bags of binary words for fast place recognition in image sequence,使用的特征检测算法为Fast,描述子使用的是brief描述子,(TODO:和DBow的区别在哪里?)是一种离线的方法。

二进制特征(ORB特征):Fast特征点+Brief描述子
(Hamming distance) 256bits的二进制描述符

基本的数学知识

Brief使用的距离描述算子为Hamming距离,定义如下:

算法流程

Bag of Words字典建立方法(最终得到的就是每一层的不同类的median,每一个叶节点对应的就是一个词汇):

建树流程

kmeans++方法
输入:(a)聚类数目;(2)初始化中心点(这里使用kmeans++的方法)
算法流程:
迭代:
(1)每个点分类到最近的中心点;
(2)用每一类点的中心点更新中心点。

中心点初始化方法:
-(1)从输入的点集合中随机选择一个点作为第一个聚类中心;
-(2)对于数据集中的每一个点,计算它与已选择的最近的聚类中心的距离D(x);
-(3)选择一个新的数据点作为新的聚类中心,选择的原则是:D(x)较大的点,被选为聚类中心的概率较大;
-(4)重复2和3的步骤直到k个聚类中心被选出来;

D(x)到概率上的反应:

  • 先从数据库随机挑个随机点当“种子点”
  • 对于每个点,计算其和最近的一个“种子点”的距离D(x)并保存在一个数组里,然后把这些距离加起来得到Sum(D(x))。
  • 然后,再取一个随机值,用权重的方式来取计算下一个“种子点”。这个算法的实现是,先取一个能落在Sum(D(x))中的随机值Random,然后用Random -= D(x),直到其<=0,此时的点就是下一个“种子点”。

k-median方法在聚类方法的第二步使用每一个类的中值作为新的中心;

创建words:把建树中所有的节点遍历一遍,找出叶节点。

DBoW2创建节点代码:

\\把所有的节点遍历一遍
for(++nit; nit != m_nodes.end(); ++nit)
{
      \\只有节点是字符
      if(nit->isLeaf())
      {
        nit->word_id = m_words.size();
        m_words.push_back( &(*nit) );
      }
}

权重设置

权重设置用的是idf,意思是词汇在训练过程中出现的频率越高,区分度越低,因此权重越低。

每一个节点包括(只列出了部分信息)

struct Node
{
    //在所有节点中的标号
    NodeId id;
    //该节点的权重,该权重为
    //训练的过程中设置的,在得到了树之后,将所有的描述子
    //过一遍树,得到每个单词出现的次数,除以总的描述子数目
    WordValue weight;
    //描述符,为每一类的均值(对于brief描述子,则要对均值进行二值化)
    TDescriptor descriptor;
    //如果是叶节点,则有词汇的id
    WordId word_id;
}

[说明]:上面的方法是分层聚类的,每一次聚类得到的多个节点,都有median v表示该类,可以用来判断新的词汇是否属于该类。最终建立的树包括W个叶节点,也就是W个视觉词汇,词汇也用median表示。

转载出处:http://www.cnblogs.com/jian-li/p/5664559.html

鸣谢:感谢原作者的创作,转载文章是为了学习并防止文章删除,绝不做商业用途。

时间: 2024-10-27 13:03:31

DBoW2算法原理介绍的相关文章

CYQ.Data V5 分布式缓存Redis应用开发及实现算法原理介绍

前言: 自从CYQ.Data框架出了数据库读写分离.分布式缓存MemCache.自动缓存等大功能之后,就进入了频繁的细节打磨优化阶段. 从以下的更新列表就可以看出来了,3个月更新了100条次功能: + View Code 其实更多的时间,是放在ASP.NET Aries 业务开发框架上,上里下外全部重构了一遍. 前几天,决定把Redis集成进来,一鼓作气,解决了. 下面分享一下经历: 最初的想法: 一开始我是拒绝的,不愿动态调用第三方的客户端(关联依赖的dll太多). 最近打算支持Redis,有

SEO搜索中文分词算法原理实战教程

SEO搜索中文分词算法原理实战教程,如果一个人想成为一个合格的SEO人员,那么搜索引擎分词思维是必须掌握的,因为只有掌握了分词思维,你才可以做出搜索引擎喜欢,而且用户也喜欢的网页,虽然在梦想之旅视频教程中有和大家分享过搜索引擎中文分词原理,但没有完全的,系统的用文字版本和图片版本和大家分享,那么顾芳源就带大家如何正确学习SEO搜索分词思维吧. 搜索引擎中文分词原理 首先我们要知道搜索引擎工作原理是把每个网页的内容按词来录入到数据库,比如你的文章标题是:梦想SEO实战培训提供免费SEO教程,那么搜

在Linux中绑定多网卡的原理介绍与实战

一.原理介绍: 1.什么是bonding? Linux bonding 驱动提供了一个把多个网络接口设备捆绑为单个的网络接口设置来使用,用于网络负载均衡及网络冗余: Linux双网卡绑定实现就是使用两块网卡虚拟成为一块网卡,这个聚合起来的设备看起来是一个单独的以太网接口设备,通俗点讲就是两块网卡具有相同的IP地址而并行链接聚合成一个逻辑链路工作. 2.bonding技术功能作用? bonding主要用于两个方向: a.实现 负载均衡:   通过bonding技术,将网络的业务流量平均分配到不同的

[转]MySQL索引背后的数据结构及算法原理

引用:http://blog.codinglabs.org/articles/theory-of-mysql-index.html 摘要 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题.特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BTree索引,哈希索引,全文索引等等.为了避免混乱,本文将只关注于BTree索引,因为这是平常使用MySQL时主要打交道的索引,至于哈希索引和全文索引本文暂不讨论. 文章

[数据库]MySQL索引背后的数据结构及算法原理

一 写在前面的话 在编程领域有一句人尽皆知的法则"程序 = 数据结构 + 算法",我个人是不太赞同这句话(因为我觉得程序不仅仅是数据结构加算法),但是在日常的学习和工作中我确认深深感受到数据结构和算法的重要性,很多东西,如果你愿意稍稍往深处挖一点,那么扑面而来的一定是各种数据结构和算法知识.例如几乎每个程序员都要打交道的数据库,如果仅仅是用来存个数据.建建表.建建索引.做做增删改查,那么也许觉得数据结构和这东西没什么关系.不过要是哪天心血来潮,想知道的多一点,想研究一下如何优化数据库,

MySQL索引背后的数据结构及算法原理

看到的一篇关于MySql索引的介绍,感觉比较经典,直接转了. 本文转自张洋博客,原文链接:http://blog.codinglabs.org/articles/theory-of-mysql-index.html 摘要 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题.特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BTree索引,哈希索引,全文索引等等.为了避免混乱,本文将只关注于BTree索引,因为

《Hadoop与大数据挖掘》——2.6 TF-IDF算法原理及Hadoop MapReduce实现

2.6 TF-IDF算法原理及Hadoop MapReduce实现 2.6.1 TF-IDF算法原理 原理:在一份给定的文件里,词频(Term Frequency,TF)指的是某一个给定的词语在该文件中出现的次数.这个数字通常会被正规化,以防止它偏向长的文件(同一个词语在长文件里可能会比在短文件里有更高的词频,而不管该词语重要与否).逆向文件频率(Inverse Document Frequency,IDF)是一个词语普遍重要性的度量.某一特定词语的IDF可以由总文件数目除以包含该词语的文件的数

jquery选择器原理介绍

 这篇文章主要介绍了jquery选择器原理介绍($()使用方法),需要的朋友可以参考下 每次申明一个jQuery对象的时候,返回的是jQuery.prototype.init对象,很多人就会不明白,init明明是jQuery.fn的方法啊,实际上这里不是方法,而是init的构造函数,因为js的prototype对象可以实现继承,加上js的对象只是引用不会是拷贝,new jQuery,new jQuery.fn和new jQuery.fn.init的子对象是一样的,只是有没有执行到init的不同.

经典的7种排序算法 原理C++实现

经典的7种排序算法 原理C++实现 排序是编程过程中经常遇到的操作,它在很大程度上影响了程序的执行效率. 7种常见的排序算法大致可以分为两类:第一类是低级排序算法,有选择排序.冒泡排序.插入排序:第二类是高级排序算法,有堆排序.排序树.归并排序.快速排序. 一.低级排序算法 1. 选择排序 排序过程:给定一个数值集合,循环遍历集合,每次遍历从集合中选择出最小或最大的放入集合的开头或结尾的位置,下次循环从剩余的元素集合中遍历找出最小的并如上操作,最后直至所有原集合元素都遍历完毕,排序结束. 实现代