回环检测中的词袋模型(bag of words)

https://blog.csdn.net/qq_24893115/article/details/52629248

 

将会从以下四个方面进行展开

关于词袋模型的基本理解
算法简介
开源代码库DBoW2库的简单介绍
关于DBoW的一些总结
关于词袋模型的基本理解
BoW基本简介
Bag of words模型最初被用在文本分类中,将文档表示成特征矢量。它的基本思想是假定对于一个文本,忽略其词序和语法、句法,仅仅将其看做是一些词汇的集合,而文本中的每个词汇都是独立的。
如果文档中猪、马、牛、羊、山谷、土地、拖拉机这样的词汇多些,而银行、大厦、汽车、公园这样的词汇少些,我们就倾向于判断它是一篇描绘乡村的文档,而不是描述城镇的。

举例说明
文档一:Bob likes to play basketball, Jim likes too. 
文档二:Bob also likes to play football games.
基于这两个文本文档,构造一个词典:Dictionary = {1:”Bob”, 2. “like”, 3. “to”, 4. “play”, 5. “basketball”, 6. “also”, 7. “football”,8. “games”, 9. “Jim”, 10. “too”}。

基于上述的词典可以构造出一个两个直方图向量 
1:[1, 2, 1, 1, 1, 0, 0, 0, 1, 1] 
2:[1, 1, 1, 1 ,0, 1, 1, 1, 0, 0] 
这两个向量共包含10个元素, 其中第i个元素表示字典中第i个单词在句子中出现的次数. 因此BoW模型可认为是一种统计直方图 (histogram).

应用词袋模型的图像处理
这是一个万能的词袋模型示意图 

其实整个过程是这样实现的 


算法简介
应用在视觉SLAM中的回环检测
在SLAM过程中,回环检测显得尤为重要,当失去回环检测时,整个SLAM过程就会退化成一个视觉里程计。 
 


在回环的过程中,如何确定什么时候回环,需要比较当前图像信息与先前图像的相似性。 
 
但并不是每次回环都会这么友好,还会受到各种影响,有天气、阴影等带来的,所以往往就会识别错误,错误情况分为两种,在应该回环的时候没有识别出来;在不应该回环的时候认为是回环了。

介绍词袋模型
1、特征提取与描述 
2、词袋组成与结构 
3、回环检测流程 
4、实验评估

参考论文: 
Galvez-Lopez D, Tardos J D. Real-time loop detection with bags of binary words[C]// IEEE/RSJ International Conference on Intelligent Robots & Systems. 2011:51-58. 
Galvez-López D, Tardos J D. Bags of Binary Words for Fast Place Recognition in Image Sequences[J]. IEEE Transactions on Robotics, 2012, 28(5):1188-1197.

特征提取与描述
这里主要按照参考论文进行关于词袋的讲解,所以主要以FAST+Brief为主,读者可以根据需要选择ORB、surf等。 
FAST特征点: 
 

FAST特征点的提取比较简单,遍历图像各个像素点,以当前像素点为中心,3为半径选择16个周围像素,依次进行比较,灰度差异值大于给定阈值的就标记一下,若大于12,则当前点为特征点。
论文的特色在于使用了Brief描述子(二进制),可以满足内存、运算速度等实际需要 

最后的描述子是一个256bit的向量,在比较特征点相似性的时候可以使用汉明距离,所以有点比较明显。当然没有具备旋转以及尺度的不变性。在ORB_SLAM2中则使用多尺度的ORB描述子,有兴趣可以去看一下。

言归正传,接下来要进入正题了!!

词袋组成与结构
1、词典生成流程

在目前流行的SLAM过程中,但凡用了回环检测的,基本上都使用了BoW,包括号称鲁棒与效果兼备的ORB_SLAM;使用词袋模型分为两个步骤,产生一个词典,然后利用这个词典,前者是离线生成的,注意是离线生成的(就像小时候看书的时候还没认识那么多字,但是想看书,怎么办,去书店买一本词典吧,一遍读,一遍看;可能这个比方不是很恰当);在后面的步骤中,需要产生一个数据库,用了记录一下查词典时所用到的单词,方便回来看的时候能快速找到,不用辛辛苦苦的再去找一遍。
在实际使用的过程中,第一步我们得训练产生一本词典,就像前面提到的那样,单词就是一些特征聚类的结果。摆在我们面前的可能是几十万甚至几百万张训练的图片,我们需要依次提取特征,这真是个浩大的工程,然后在特征空间中就会有n多个特征信息,接下来我们要用这些特征聚类产生单词了,聚类成多少?这是个问题,这取决于我们选择的树形结构(后面会提到),整个过程就像下面图一样


黑色的就是最原始的,提取到的特征,为了简单,把这些特征放在二维空间了,实际上应该256维的,所以上面这张中,这些特征点和他们在实际图片中的位置信息没有任何关系。 
黑色—>红色—>绿色—>蓝色,这就是聚类的步骤,黑色的特征聚类成红色节点,红色节点聚类成绿色节点,然后绿色节点再聚类成根节点(蓝色) 
 
Vocabulary branch factor:kw 
Vocabulary depth levels :Lw
整个步骤流程如下图 
 
:产生词典树形结构的步骤: 
所有特征描述子分布在特征空间-> 
根据设定好的树形结构参数,进行kmean++聚类,产生叶子结点-> 
对产生的节点依次进行kmean++聚类,直至产生根节点。

结点个数(等比数列):

2、inverse index word 
 
1、逆序索引单词涵盖了所有出现的单词 
2、每一个单词指向包含它的一系列图像 
3、采用投票机制选取候选者,加速搜索

加快搜索示意图 

3、direct index image 
主要用途: 
在回环检测的最后阶段——几何结构验证阶段,可以加速匹配候选图像与当前图像之间的特征点对

结构如下图所示,左图是2011会议论文所采用的存储结构,以word为单位,右图是2012在TRO期刊上使用的存储结构,以node为单元。 


回环检测流程
1、基础知识介绍 
2、数据库查询 
3、组匹配 
4、时间一致性校验 
5、结构一致性校验
1、基础知识介绍 
这时候要要利用了训练之后的词典了。BoW模型主要就是利用了训练词典产生了高度差异型模型,因此每一张图片通过词典检索,都会得到一个独一无二的直方图向量,向量的维度就是词典个数(一般都是100万)。在具体写程序的时候不会产生这么大一个维度的链表,可以有一个等效的模型。

从图像—>BoW向量流程: 
1、输入一张图像I,进行特征检测与特征描述,特征点数量最多不超过约定值(300)。 
2、将每个特征通过树形结构的字典,得到BoW向量v,该向量的维度为特征数量(程序中),论文中认为维度为叶节点(words)数量。

其中向量v的数据单元结构为map—>(index , value)即(word index,weight)

Word index解释如下: 
将每个特征从树形字典的根节点叶节点(words),依次与当前所在节点的子节点进行比较,选取汉明距离最小的节点作为中继节点,以此类推,直到所在节点为叶节点
Weight解释如下: 


每个单词的权重有一个归一化过程,权重的组成由tf和idf两部分构成,对于前者,分子为当前图片中出现单词i的个数,分母为总共包含的单词个数,这是在线得到的;后者是词典的属性,已经离线生成,不会发生改变,分子为生成词典时所包含的训练图片数量,分母为出现单词i的图片个数,这个比重分量主要为了凸显差异型,认为在训练时经常出现的单词差异性较小,权重赋予的小一些,举例:如果一个单词在每一张图片都能出现,那么词典所给予的权重分量应该是0,因为太常见了,所以会忽略它。
在得到了两张图片的BoW向量之后,需要比较两者的相似性: 
给出公式: 


在实际程序中公式如下: 

注:L1-score指的是一范数得分,后面的绝对值也指的是求取一范数,最后得到的是一个标量

实际中不可能存一个100万维的BoW向量,向量是稀疏的,只存下出现某个单词的索引及权重 
论文和实际公式等效: 


一些需要用的基础知识和结构已经介绍完了,接下就是回环检测了
回环检测:数据库查询
查询的数据库就是上述在线更新和维护的inverse index word 
利用inverse index words 数据库简化检索过程;不采用暴力匹配,只匹配包含相同单词的个别图像信息, 加快检索过程。
得到归一化得分函数如下: 


1、防止因分母过小,而引起的得分过大,需要对分母增加条件(有特征点数要求或者得分要求) 
2、需要对最后得分设立阈值,过滤得分较少的候选图像,保留符合要求的候选图像进入组匹配进行校验
回环检测流程——组匹配 
当图像 It,It′It,It′,表示了一个真正的回环,则ItIt 同样也和It±Δt,It±2ΔtIt±Δt,It±2Δt 有着较高的相似性,定义相似得分和函数如下: 
 
其中VTiVTi 表示候选图像所在集合从VtniVtni 到 VtmiVtmi
1、防止连续图像在数据库查询时存在的竞争关系,但是不会考虑同一地点,不同时间的关键帧。 
2、防止误匹配

回环检测流程——时间一致性校验 
在经过组匹配之后,得到了最佳组匹配VT′VT′,此时需要检验该组匹配的时间一致性。 
一般来说,对于组匹配<vt,VT′><vt,VT′> ,与当前帧的前kk 帧图像得到的组匹配<vt,VT1><vt,VT1> , … ,<vt,VT2><vt,VT2> 有着较大的重叠区域。

在经过时间一致性校验之后,只保留一组匹配<vt,vt′><vt,vt′> ,判断标准在所在组得分最高,成为唯一的候选对象,进入结构一致性校验

回环检测流程——结构一致性校验

词袋是一个无序的模型,好比我打了小明,小明打了我这两句话,意思正好相反,但是词袋的模型却是同一个,这就很要命,会带来误匹配。所以需要增加约束,该约束就是几何结构上的约束,即各个特征点在空间中的位置是唯一不变的,以基础矩阵建立约束。 
1、在使用词袋进行回环检测的过程中,并未考虑特征之间的结构约束; 
2、在检测的最后一个流程中,在得到对应特征点的基础上,通过使用RANSAC和基础矩阵解算,计算满足要求的特征点对数目(12)。
过程关键点: 
1、使用direct image index,加速校验前特征点对的获取 
2、同时为了获取足够数量的特征点,不能直接选取words作为匹配 
索引;同时凸显特征之间的区分度,也不能采用采用较高层数 
的节点(词袋树形结构)。 
所需要的结构就是已经介绍过的 


至此,整个回环检测的流程已经结束了
论文还给出了实验评估,评估的标准就是精度—召回曲线,如下: 
 
评价标准 
精度:正确回环检测占总检测回环数目的比率 
召回:正确回环检测占测试样本总回环的比率 

实验评估
这里简单涉及一下,论文中所涉及的参数和实验结果 
参数设置: 
 
数据集(前三个作为训练,后两个作为测试) 

与FAB-MAP 的实验结果比较(貌似Magaga6L的训练集数目不对等) 
 
有兴趣可以去看一下08年的FAB-MAP,程序也是开源的。 
Cummins M, Newman P. FAB-MAP: Probabilistic Localization and Mapping in the Space of Appearance[J]. International Journal of Robotics Research, 2008, 27(6):647-665.
开源代码库DBoW的简单介绍
整个开源的DBoW2程序如下图分布:

整个结构非常紧凑,写的也很好,给用户的选择比较多,可以使用各种特征描述方式,遗憾的是,论文作者并未把所涉及到的算法全部开源,只是框架开源,所以无法重现结果。
demo

程序中有一个简单的demo,可以帮助了解整个框架,包括建立词典到测试词典
demo程序和结果: 

demo数据集 

因为是由四张图片产生的词典(差异度不够),用来测试图片,所以效果并不十分凸显,可以使用ORB_SLAM2开源的词库进行测试。

关于DBoW的总结
1、理解词袋模型: 
在理解论文的基础上,需要结合开源代码,对算法有一个更为深入的了解;需要加强对数据结构的使用和操作,词袋模型大量使用了list、map、vector及自定义的数据结构。

2、需要客观看待: 
在回环准确性和时间开销,需要一个取舍,虽然在文中FAST+Brief取得了一个不错的结果;但是这样的特征检测和描述方式,没有对尺度和旋转的不变性,在平面移动机器人+前置(侧置)摄像头中尚能取得较好的效果。

3、使用开源程序: 
ORB_SLAM2,也同样使用了开源库DBoW2。

整体而言,离线产生的词典对于回环检测时有帮助的,因为有一个差异度足够高的模型,这一点是在线所无法比拟的,但是总有一种作弊的感觉,也有很多关于online visual vocabulary的论文,但是并不十分流行。
--------------------- 
作者:辜鸿铭 
来源:CSDN 
原文:https://blog.csdn.net/qq_24893115/article/details/52629248 
版权声明:本文为博主原创文章,转载请附上博文链接!

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值