ORB-SLAM2:基于可识别特征的自主导航与地图构建

ORB-SLAM2 :基于可识别特征的自主导航与地图构建

ORB-SLAM: Tracking and Mapping Recognizable Features

翻译:2016年2月24日 Taylor Guo  


写在前面的话:由于上个月开始翻译的时候,没有校译,部分关键词翻译可能不是很恰当,先将就看吧。后面会再更新一版。2016/03/02


更多关于ORB_SLAM2的相关技术资料,请访问我的个人永久博客:qiqitek.com/blog.html


摘要:视觉SLAM可以很好地构建地图,追踪相机。但这些地图不能用于本地化,不同的相机,甚至是同一个相机,但可以从不同的视角观察。这些局限源自于缺乏可以识别的地图容量。我们将介绍一种基于关键帧的SLAM系统,可以让地图复用,用可识别的特征点构建地图。我们的系统在一个不变的视角下实时执行本地化操作和闭环控制。我们也加入了消减机制减少地图中冗余的关键帧。这个系统有足够的能力复用地图,并可以用于识别系统。


1. 简介

        相机的位姿估计和真实世界的几何重构的主要问题是观测问题,这在mono-SLAM中总所周知。单一相机的问题比较麻烦,因为深度图无法获得,而又需要多维几何来解决问题。立体相机和RGB-D相机在某种程度可以提供深度图,但单目技术仍然需要。

        单目SLAM技术已经发展了较长时间,从最初的滤波方法到最近的基于关键帧的SLAM系统。最新的研究表明,基于关键帧的技术比滤波方法更精确。最具代表性的是PTAM,被认为是单目的标志。尽管方案成熟、PTAM算法性能优良,单目SLAM应用也并不广泛。地图很少用来计算相机的位姿,没有用来定位相机的不同视角,也没有用来定位不同的相机。场景不是静止状态的情况下可能更糟糕。我们认为地图识别的作用非常关键,我们发现在类似PTAM的应用中这一块做的不够好。

        在我们之前的工作中,我们在PTAM中集成了一个非常有效的识别系统用于导航和闭环控制。这个识别系统基于ORB特征的二进制数据包,让位于在视角不变情况下实时定位系统的性能。我们实验演示了系统在不同相机和轨迹下的系统复用地图的性能。我们需要提取特别的特征(ORB)用来获取识别的性能。我们用这个方法构建了新的SLAM系统,我们将为ROS发布开源源代码。

        我们的系统使用了大量的视觉信息,在优化位置识别性能中需要较多关键帧信息与加入削减算法减少地图中冗余关键帧上做了大量工作,证明方法富有效率。该系统有3个主要任务:自主导航/追踪、地图构建、闭环控制,在多核系统中并行处理。图 1显示了系统框图。

ORB-SLAM2:基于可识别特征的自主导航与地图构建_第1张图片

2. 地图

        这一章主要介绍地图的存储。

A.    地图特征点或3D ORB

        地图特征点构成真实世界的3D架构。每个特征点都经过不同视角抽象,然后用Bundle Adjustment优化。这里图像中的点是ORB特征点,用角点检测的FAST算法获取。图块的大小和方向取决于FAST算法获取的规模和关键点的方向。每个地图上的特征点和一个图块n关联。单个特征点可能和具有ORB特征的多个关键帧有关,同时有几个特征描述器。如果特征描述器出现特征不匹配的状况,它需要处理不同视角的不同地图特征点。为了加速数据关联,每个地图特征点的描述器为D,它的与其他所有描述器关联。另外,每个地图特征点存储了观察到的最大dmax和最小dmin距离。


B.    关键帧

        关键帧是真实世界的视觉信息的快照。每个关键帧包括了帧内的ORB特征和相机的位姿。在我们的设计中,关键帧并非不可以一帧不少,相反如果一个图像区域能被其它帧完全表示,它就可以被删除。这将在后面详细介绍。


C.    可视化图像

        交互可视化信息在几个任务中都非常有用,它决定了本地地图,位置识别的性能。可视化信息以间接权重图像的方式存储在系统中,那里每个节点是一个关键帧和关键帧之间的边缘,边缘的定义是两个关键帧之间相同的特征点至少是 θ。如果θ越低,相互关联度就越高,图像遍历的代价就越高。Strasdat建议典型的θ值在15到30之间。边缘的权重就是地图相同特征点的数量。


3. 位置识别

        系统里面加入了位置识别侦测闭环和重定位。识别器是基于我们之前的工作,基于效率较高的二进制字典位置识别器DBoW2。与之前的工作相比有2个方面的改进:首先,在位置识别中,如果数据库里有不清楚的匹配,识别器能返回不同的假设条件。其次,我们用可视化信息取代了所有的暂存信息。

        我们介绍一下之前的工作:

A.  图像识别数据库 

 数据库包含了一个反向序数,它指向字典里的每个视图关键字,字典里有关键帧,有关键帧的权重。用检索视图关键字来检索整个数据库,极大地提高了检索的效率。新的关键帧将在闭环任务线程中插入数据库中,当本地的地图构建完成后执行这个操作。

        重定位或者数据库闭环检索后,得到一个相近的分数,在检索图像后,它计算了所有关键帧之间的相同视图关键字。关键帧之间有视图重叠,所以并没有唯一的高分值的关键帧,可能高分值的关键帧有好多个。在这个项目中,我们做了视图集合包含了所有关键帧的分数值,这些关键帧直接与图像关联,关键帧匹配后就有一个高分值。图像会被紧密及时地分组,同一个位置的视图关键帧分值不会被记录,但在不同时间下的同一视图会被插入数据库。我们不仅仅是得到最优的匹配,所有的匹配分数要在最高分数的90%以上。

B.  高效,优化的ORB匹配

        在重定位和闭环控制中,检索完数据库后,我们可以分别算出相机位姿和相似变换,可以用于几何图形验证。首先,我们需要计算2个图像的ORB特征的相似度。如果强制匹配,在某种程度上可能会加速,如果我们只比较字典树的第二层的同一节点的ORB特征,匹配的性能没有明显减少。初始匹配可以通过方向一致性检测来优化。

C.  视觉一致性

        闭环控制的健壮性非常重要,错误的闭环控制将毁坏地图构建。有论文提到短期一致性测试,这样系统就可以等待获取一系列贯序暂时一致性匹配,用于最后形成闭环控制。这里我们建议采用视觉一致性测试,这样如果可视图像存在边缘,就可以采用贯序关键帧匹配。


4. 自主导航/追踪

        地图的初始化是执行一个自动过程,从两帧之间找到单应平面变换或矩阵。初始化完成后,追踪功能就根据每个新进来的图像帧估计相机位姿。我们将详细描述追踪功能的具体步骤。

A.  ORB特征获取 

        第一步获取图像帧里的ORB特征点。开始时,计算图像金字塔,侦测每层的FAST算法关键特征点。但只提取这些关键点的一个子集。考虑以下主要参数:图像 金字塔的层数,不同层之间的比例因子,要获取的ORB特征点的数量(关键点描述),侦测的阈值,最重要的是保留和描述关键点的子集的规则。这些参数直接影响特征的规模的不变性,任务的计算成本(字典包,数据关联,等),图像上的关键点分布。我们提取了基于比例因子1.2的8层1000个ORB特征点。为了最大程度地分散图像上的关键点,我们将图像分成网格,使每个网格里的关键点数量一样。如果有网格里没有足够的关键点,剩下的网格就要获取更多的关键点。

B.  追踪之前的图像帧

        如果上一帧图像追踪成功,我们可以从上一帧中估计第一个的相机位姿。上一帧图像中的每个ORB,与地图上的点关联,都会搜索并匹配上一位置发生变动的局部区域。如果没有发现足够的匹配,比如相机快速移动,匹配过程就会在更大的范围内再搜索一遍。方向一致性测试将对最初的匹配优化。此时,我们就有了一组3D到2D的一一对应关系,我们就可以计算相机位姿、解决RANSAC迭代中的PnP问题。


C.  重定位:从划除帧中再追踪

        如果追踪失效的话,我们将帧转换成关键字的包,然后检索关键帧数据库用于重定位。如果几个地方的图像对于当前帧相似,将会有几个候选帧用于重定位。对于每个候选关键帧都要计算ORB特征匹配一致性,即当然帧和ORB特征点关联的地图点的关键帧,如第3节B小节里解释的。这样我们就有了每个候选关键帧的一组2D到3D的一一对应关系。现在对每个候选帧执行RANSAC迭代算法,计算出相机的位姿解决每次迭代的PnP问题。如果我们获得了相机位姿,我们就可以继续执行追踪功能。


D.  追踪本地地图

        现在有了真实环境中的相机的位姿,我们就可以将地图投影到图像帧上并搜索更多地图点进行对应。我们并不像PTAM那样映射所有的地图点,我们使用与Strasdat的论文里相同的方法,投射本地地图。这个本地地图包含一组关键帧K1,形成当前帧的地图点;K2是邻近的关键帧组。在紧密关联的地图中,像K2这样的集合可能非常多,我们限制它们的数量。本地地图也有一个参考关键帧Kref,属于K1,它包含了当前帧的大部分地图点。所有的地图点都在关键帧K中,K=K1∪K2,从这些帧里面按照如下方法搜索本地地图:

1.    计算当前帧的地图云点映射x。去掉图像外面的云点。

2.    计算角度:视线v和地图点n的法线的夹角。去掉v.n<cos(45度)的云点。(ORB里每个地图点有法线这一说,如果视线角和它的法线相差太大,它的外观通常会有变化)

3.    计算地图云点和相机中心的距离d。去掉地图云点相同尺寸区域以外的点,即d不属于[dmin, dmax]之间的点。

4.    计算帧内的比值d/dmin。

5.    比较地图云点描述器D和图像帧内ORB特征点,其大小是否接近x。

6.    关联地图云点获取最优匹配。


E.  最终的位姿优化

        追踪的最后一步是优化相机位姿,具体是使用4.B或4.C里面描述的方法估计初始位姿,用帧里的ORB特征点与本地地图里的云点一一匹配。这样优化尽可能避免了映射错误,保持了地图云点的位置。我们使用g2o 列文伯格-马夸尔特非线性最小二乘算法和Huber估计器。


F.  新的关键帧的取舍

        如果追踪成功,我们就要决定是否插入新的关键帧。插入新的关键帧需要满足如下条件:

1.    在最近一次重定位中,超过20个帧被略过。

2.    当前帧追踪了至少50个云点。

3.    当前帧追踪的地图云点少于Kref的90%。

4.    本地地图构建处理完上一关键帧后,至少10帧从上一关键帧插入动作后被略过。或者本地地图构建完成了本地偏差调整后,至少20个帧被略过。

        我们没有像PTAM那样采用与其他帧距离上的条件限制,这里标准更合理,如视角变换(条件3),尽可能快地插入帧(条件4)。第1个条件确保获得一个较好地重定位。条件2 确保一个良好的追踪。


5. 本地地图构建

        本地地图构建线程处理新的帧,更新优化它们的本地邻近的帧。追踪任务插入的新的关键帧存储在一个队列里,包含了最近一次插入的关键帧。
        当本地地图构建从队列中取出最后一个关键帧时,要执行以下步骤:

A.  字典 

        第一步是将关键帧转换成关键字包表示。这会返回一个关键字向量,用于后面的闭环控制,也用于将ORB特征点与字典树里的第二个节点关联,这个字典树用于下一步的数据关联。

B.  确定新的地图云点

        通过三角化不同关键帧的ORB特征点可以构建新的地图云点。PTAM用最邻近的关键帧三角化这些点,这些帧的视差非常小;我们用相邻的N个关键帧来三角化这些点,这些帧具有很多相同的图像点。我们需要约束关键帧的数量,由于地图间高度关联,计算代价会很大。我们搜索当前关键帧里的ORB与其他关键帧中的进行匹配,只是比较描述器。我们比较字典第二层下相同节点里的ORB,去掉不能满足极化约束条件的匹配。一旦ORB匹配成功,它们就被三角化了。如果地图点视差小于1度,也要被去掉。开始时,地图点只能在前两个关键帧里看到,但其他关键帧里也有,所以地图点投射到其他关键帧里供追踪算法使用,如第4节D小节所示。

C.  更新局部区域

        在后面的3个关键帧建立后,要确认地图点云是否出错,需要满足如下2个条件:

1.)追踪功能要能找到那些地图点,这些点在超过25%的帧里;

2.)如果在地图点建立后丢掉一个关键帧,这个关键帧必须在3个关键帧中出现过;

关键帧里的地图点有新的观测方法,关键帧里的关联图像的边缘需要重新计算。另外,每个地图点的描述器D也要重新计算。

D.  局部偏差调整

        与PTAM类似,局部偏差调整优化当前处理的关键帧,这些关键帧与图像关联,这些关键帧能看到这些图像点。其他能看到这些点的关键帧,但不是当前的关键帧也要优化。为了解决非线性优化问题,我们使用g2o里面的列文伯格-马夸尔特非线性最小二乘算法,Huber估计器。经过优化后,我们可以再次计算n, 尺度不变距离dnin,dmax。


E.  祛除冗余关键帧

        为了去掉地图中冗余的关键帧,以防止关键帧的数量急速变大,我们去掉其他相同或更好的关键帧中90%的地图点已经被观测到过的关键帧。这个祛除的过程如图2所示。

ORB-SLAM2:基于可识别特征的自主导航与地图构建_第2张图片


6. 闭环控制

        闭环控制用来侦测地图的闭环状况,如果发现闭环,将执行闭环控制以保持全局地图的一致性。局部地图构建后,闭环控制获取了最后一个处理的关键帧Ki,除此之外,闭环控制还执行了如下任务。

A.  闭环侦测 

        我们先计算关键字包的关键字向量Ki与其邻近的相关图像的相似性,留下最低分值Smin。然后,闭环控制检索关键帧数据库,去掉那些分值低于Smin的关键帧。另外,最后所有直接与Ki关联的关键帧都去掉。为了增加控制器的鲁棒性,我们必须侦测3个连续的闭环侦测器,它们的图像相互关联保持一致,如第3节C里面所示。当闭环侦测的关键帧通过了图像关联一致性测试,下一步就要计算相似变换。


B.  计算相似变换

        在单目SLAM中,有7个自由度,地图可能偏移,3种改变,3种旋转,1个尺寸因子。为了闭合回路,我们需要计算从当前关键帧Ki到回路关键帧Kl的相似变换,回路中的关键帧Kl提供了回路的累积误差。这个相似变换也用来作为回路的几何验证。
在重定位的过程中,如果对于当前帧有几个地方的场景相似,就可能有好几个回路。这样,我们首先计算ORB特征点的一致性,即与地图点关联的ORB的当前帧与回路中的关键帧,按照第3节B中的过程执行。现在,对每个回环,我们有了3D到3D的一一对应关系。我们对每个回环执行RANSAC迭代,计算相似变换。如果相似度Sil有足够的有效数据,第1个回环就成功了。

C.  与局部地图构建线程同步

        在修正回路之前,当闭环控制完成当前操作后它就会停止运行,发送一个信号给本地地图构建线程。一旦本地地图构建线程停止,闭环控制就要修正回路。这个过程非常必要,2个线程都可能会修改关键帧的位姿,地图云点(地图点里面可能造成混淆,导致地图构建失败)。


D.  回路融合

        回路修正的第一步就是融合重复的地图点,插入闭环控制的关联视觉地图。开始的时候,用相似变换Sil来修正Tiw关键帧的位姿,这种修正方法可以复制到Ki相邻的关键帧上,然后串联执行所有的相似变换,这样回环的两端就可以有效对齐。回路的关键帧可以看到所有的地图点,与它邻近的点都投影到Ki上,这些投影的点在一个狭小的局部区域进行搜索匹配。所有匹配的地图点和Sil中的有效数据融合。融合过程中的所有有效的关键帧将更新关联图像中的边缘,产生的新的边缘用于闭环控制。

E.  关联视图位姿图像优化

        为了闭合回路,修正累积误差,我们将执行一个全局优化。当执行误差调整时,有必要使用鲁棒成本计算函数,我们需要先算出一个最初的方案供优化器收敛功能使用。这个方案由相互关联图像的位姿优化后的结果组成,而闭环边缘上的误差分布在整个图像中。图像位姿优化器通过相似变换修正尺度偏移。这个方法比我们之前的方法更通用,之前的方法中,图像的位姿只是连接关键帧形成一个圈,其他的都一样,优化过程也一样,这里就不在讲了。

F.  全局偏差调整

        整个地图最后会通过单点的图像位姿优化完成。优化过程和第5节D里面所说的局部偏差调整一样,不过这里所有的关键帧和地图点都会被优化。优化后,局部地图构建会再次发出。



7. 上机调试

我们做了两个实验,用来演示系统的优势 。第一个是手持相机在实验室顺序完成一个回路,环境闭塞、相机剧烈移动。第二个是一段视频在更大场景下测试这个系统。系统被集成到ROS里面,我们用录制的视频模拟相机的运动,图像帧率都一样。附录1中的视频是和PTAM系统的对比。

A.  实验室视频 

        这个视频是30fps,752x480分辨率的。如图3所示。重定位有一些难度,如图4所示。所有的追踪时间如图5所示。90%的帧追踪都少于40毫秒。在实际步骤中,追踪时间会稍微增加,因为关联图像之间的关联程度更大,局部地图更大。闭环侦测花了5毫秒从关键帧数据库中取回回路,关键帧数据库包含86个关键帧,计算相似度和融合回路花了173毫秒,图像位姿优化花了187毫秒优化图像里面的1692个边缘。最后,全局误差调整花了518毫秒。

ORB-SLAM2:基于可识别特征的自主导航与地图构建_第3张图片


ORB-SLAM2:基于可识别特征的自主导航与地图构建_第4张图片

我们用同样的步骤也比较了PTAM。开始时,尝试了20多次来初始化。PTAM在后续好几步都跟丢了,我们的系统没有,在重定位中的失效是由于缺少不变的视角。


B.  NewCollege

        这个实验室一个立体视频,我们只处理左边的图像,是20fps,512x384分辨率下拍摄的。图6显示了不同时间的地图重构,图7显示了最后的重构,包含690个关键帧,33000个点。图5显示了每帧所有的处理时间,90%的图像帧都少于50毫秒。图6显示了在中间部分机器人重新跑了大的回路,局部地图大于探测到的地方,所以追踪花了更多的时间。回路检测花了7毫秒在280关键帧的数据库中检测回路。回路融合花了333毫秒,位姿优化花了2.07秒优化10831个边缘的图像。我们非常清楚地看到,在一个大的回路中优化所有相互关联的图像复杂度太大,所以并不需要优化所有的边缘,这个方法我们将在后续工作中进行。

ORB-SLAM2:基于可识别特征的自主导航与地图构建_第5张图片


ORB-SLAM2:基于可识别特征的自主导航与地图构建_第6张图片


ORB-SLAM2:基于可识别特征的自主导航与地图构建_第7张图片

8. 结论

我们构建了一个新的视觉SLAM系统构建可识别的地图。不需要对所有的特征点采用SLAM算法,只需要追踪相机的当前位姿,我们映射地图用于识别位置和物体。这有效地扩展了地图的复用性。与PTAM在小型地图的应用对比后,前段的复杂度大,在相机重定位上有巨大的改进。后端可以执行大尺度的地图构建,包括有效可靠的闭环控制。我们目前在研究地图的初始化,由于时间空间限制我们在这里就忽略了,稀疏的图像位姿可以通过闭环控制优化。我们将会发布源代码,大家就可以从中受益。


感谢

本项目得到了西班牙xxx项目的支持,xxx奖学金支持。(抱歉,完全看不懂西班牙文,西班牙式英语的翻译难度也是看得人醉了。)


参考文献

[1] D. G´alvez-L´opez and J. D. Tard´os. Bags of binary words for fast place recognition in image sequences. IEEE Transactions on Robotics, 28(5):1188–1197, 2012.
[2] G. Klein and D. Murray. Parallel tracking and mapping for small AR workspaces. In International Symposium on Mixed and Augmented Reality (ISMAR), 2007.
[3] R. Kuemmerle, G. Grisetti, H. Strasdat, K. Konolige, and W. Burgard. g2o: A general framework for graph optimization. In IEEE International Conference on Robotics and Automation (ICRA), 2011.
[4] V. Lepetit, F. Moreno-Noguer, and P. Fua. EPnP: An accurate O(n) solution to the PnP problem. International Journal of Computer Vision, 81(2):155–166, 2009.
[5] R. Mur-Artal and J. D. Tard´os. Fast relocalisation and loop closing in keyframe-based SLAM. In IEEE International Conference on Robotics and Automation (ICRA), 2014.
[6] E. Rublee, V. Rabaud, K. Konolige, and G. Bradski. ORB: an efficient alternative to SIFT or SURF. In IEEE International Conference on Computer Vision (ICCV),
2011.
[7] M. Smith, I. Baldwin, W. Churchill, R. Paul, and P. Newman. The new college vision and laser data set. The International Journal of Robotics Research, 28(5):595–
599, 2009.
[8] H. Strasdat, J. M. M. Montiel, and A. J. Davison. Scale drift-aware large scale monocular SLAM. In Robotics:Science and Systems (RSS), 2010.
[9] H. Strasdat, A. J. Davison, J. M. M. Montiel, and K. Konolige. Double window optimisation for constant time visual SLAM. In IEEE International Conference on Computer Vision (ICCV), 2011.
[10] H. Strasdat, J. M. M. Montiel, and A. J. Davison. Visual SLAM: Why filter? Image and Vision Computing, 30(2): 65–77, 2012.

翻译过程中参考资料:

随机抽样一致 RANSAC(转)

http://www.cnblogs.com/cfantaisie/archive/2011/06/09/2076864.html

Bundle Adjustment到底是什么?

http://www.zhihu.com/question/29082659


--------2016年2月26日---翻译初稿完成---17:50-------------------------------------------------------------------------------

--------感谢麒麒、敏敏这两天的陪伴和容忍------------------------------------------------------------------------------------


词袋模型在图像序列中快速位置识别的应用

Bags of Binary Words for Fast Place Recognition in Image Sequences

翻译:2016年3月2日 Taylor Guo  


关键词:词袋模型(Bag-of-Word)  特征向量(descriptor)

闭环检测目前多采用词袋模型(Bag-of-Word),源自于计算机视觉理论。
它实质上是一个检测观测数据相似性的问题。
词袋模型中,提取每张图像中的特征,把它们的特征向量(descriptor)进行聚类,建立类别数据库。
比如说,眼睛、鼻子、耳朵、嘴等等(实际应用中基本上是一些边缘和角)。
假设有10000个类。然后,对于每一个图像,可以分析它含有数据库中哪几个类。以1表示有,以0表示没有。那么,这个图像就可用10000维的一个向量来表达。而不同的图像,只要比较它们的向量即可。

图像词袋模型也是一种基于图像局部特征的标分类算法,它只考虑目标的局部区域的表面特征,而忽略他们之间的空间关系,对目标的整体形状不加限制,这样建立的目标模型就有很大的灵活性,不会局限于某一种形状的特征,可以处理类内目标的形状变化。

图像与文本对比: 

文本

文集

(Corpus)

文档

(Document)

单词

(Word)

字典

(Vocabulary)

图像

图像集

(Image set)

图像

(Image)

视觉单词

(Visual Word)

视觉字典

(Visual Vocabulary)

 图像词袋模型的基本结构:

 

所谓词袋,就是包含一组数据的打包或封装。在一个词袋中往往包含了若干幅图的基本特征元素。在一个完整的词袋中,一般有若干幅图的局部特征,包括形状、结构、颜色等具有鲁棒性,不变性的特征。由于词袋具有一类或多类图像的全部特征,故而当我们提取出词袋中的元素时,就可以对相近类图像进行描述,同时也可以用作不同类别图像的分类。词袋模型在图像描述中的应用是近年的研究热点。

词袋模型的原理非常简单,词袋模型是文本的简化描述模型。在此模型中,文本被表达成无序的单词组合,不去考虑语法与词序。以文本为例,如果一个文本X表示一连串有顺序的词的排列,那么机器对于X的识别其实就是计算出X在所有文本词语中出现的可能,也就是概率多个词语概率的相乘p(X)=p(X1)p(X2|X1)…p(Xn|Xn-1)其中P(x1)表示第一个词出现的概率,p(X2|X1)表示在第一个词出现的前提下第二个次出现的概率,而词袋模型就是这种文本模型的特例,即Xk出现的概率与前面的X无关,故有p(X)=p(X1)p(X2)…p(Xn)成立。

主要利用词袋模型的特点,根据已知的图像对未知的(机器未能识别的)图像进行描述,以达到对待描述图像的一个机器性认知,主要步骤分为三步:特征提取、特征码本的聚类、数据分析及统计,条形图显示。Visual words的撷取大致上是将图像的SIFT features,在keypoint feature space上做K-means clustering的结果,以histogram来表示,是一种bag-of-features。除了可用于retrieval外,visual words也被用于image classification。

 

Visual words (简称VWs) 近年来在image retrieval领域被大量使用,其motivation其实是从text retrieval领域而来,是基于文字上的textual words,套用在影像上的模拟。如同于一篇文章是由许多文字(textual words) 组合而成,若我们也能将一张影像表示成由许多 “visual words”组合而成,就能将过去在text retrieval领域的技巧直接利用于imageretrieval;而以文字搜寻系统现今的效率,将影像的表示法「文字化」也有助于large-scale影像搜寻系统的效率。在文献 [1]  “Video Google: A Text Retrieval Approach to Object Matching in Videos,” Proc.  IEEE International Conference on Computer Vision, 2003有提到motivation of visual words的细节。首先我们先回顾textretrieval的过程:1. 一篇文章被parse成许多文字,2. 每个文字是由它的「主干(stem)」来表示的。例如以 ‘walk’ 这个字来说,‘walk’、‘walking’、‘walks’ 等variants同属于 ‘walk’ 这个主干,在text retrieval system里被视为同一个字。3. 排除掉每篇文章都有的极端常见字,例如 ‘the’ 和 ‘an’。4. 一篇文章文章的表示法,即以每个字出现频率的histogram vector来表示。5. 在此histogram中,对于每个字其实都有给一个某种形式weight,例如Google利用PageRank [2] 的方式来做weighting。6. 在执行文字搜寻时,回传和此query vector最接近(以角度衡量)的文章。

步骤1:侦测影像中的SIFT keypoints,并计算keypoint descriptors。例如在原始SIFT文献 [3] 使用Difference of Gaussians (DoG) 来侦测keypoints,而以一个128-D的向量作为descriptor。侦测keypoints的动作相当于上一节所说的1. 将文章parse成一个一个的文字。

步骤2:将所有训练影像的所有keypoint descriptors,散布于一个128-D的keypoint feature space中,再执行一个clustering algorithm,例如K-means或是这学期教过的EM。在image retrieval领域中,cluster数 K 常订为104 ~ 106。同一个cluster里的keypoints,相当于是同一个 “visual word stem” 的variants,在retrieval / classification系统中被视为同一个VW,因此K也被称为系统里的 “vocabulary size”。clustering后的结果相当于上一节所说的2. 同一个word stem下有许多的variants。

步骤3:最后,一张影像可看成由许多VW(原先是keypoints)组成。因为在retrieval领域,我们并不在意文字的排列顺序,只在意文章中文字的出现频率,同样的道理,一张影像中我们只在乎每个VW stem的出现频率。以这种概念构成的特征被称为 “Bag-of-features”,只在乎袋子里有什么物品,而不是物品的排列顺序。因此影像特征的表示法为根据VW出现频率的 “visual word histogram”。这种概念与上一节4.的文字出现频率histogram相同。

结论:Visual words可看作是将影像中local的keypoint descriptors,套上clustering algorithm后,变成整张影像的global feature。

Visual words 除了大量用于image retrieval外,也可以直接作为features用于image classification。本专题的目的就是将visual words作为影像特征,并套用于multi-class image classification。


 

 

摘要:

    我们采用视觉词袋模型,通过FAST+BRIEF特征提出一种位姿识别方法,通过构造词汇树生成二进制特征向量描述器空间,使用树形结构加速几何验证和匹配。整个过程,包括特征提取,共26300张图像序列,每帧22ms,比之前的方法要快很多。

一简介

视觉SLAM的一个最重要要求是要具有良好鲁棒性的位姿识别,在自主导航过程中,未观测到的区域需要重新观测时,一般的匹配算法就会失效。如果观测数据有效,闭环控制就可以提供正确的数据关联,从而获得完整的地图。在机器人的应用中,由于视觉模糊、突然运动、移动阻塞或定位失效后,也可以采用这种方法。这种方法在一个小范围的环境中,用图像构建地图,性能优良;但在大范围的环境中,从图像到图像的FAB-MAP构建地图的方法更好。这种方法通过机器人在线获取图像,构建数据库,其新获取的图像与之前的那副图像非常相似,相似的图像序列形成一个闭环回路。最近几年的图像匹配算法都是基于词袋模型中的数字向量比较的方法。词袋模型产生了有效地、快速地图像匹配,但如果图像失真,对闭环回路却不是一个好方法。那么,我们就需要验证图像的视觉匹配,进行特征匹配。闭环回路控制算法的瓶颈是特征提取,这一步骤的算法复杂度是其他步骤的10倍左右。这就要求SLAM算法同时运行在两个无耦合关系的线程上:一个执行SLAM功能;另一个用作闭环回路控制,如文章5《CI-Graph SLAM for 3D Reconstruction of Large and ComplexEnvironments using a Multicamera System》所述。

在本文中将采用常用CPU和单目相机提出一种算法用于闭环回路侦测,实时构建云点匹配。这个方法基于图像词袋模型和几何特征验证,提出优化算法。主要通过基于FAST关键点的BRIEF特征向量描述器提高速度,在第三节里会具体解释。BRIEF特征向量描述器是一个二进制向量,每一个位上的值是由关键点附近指定的两个像素的亮度比较得到的结果。尽管BRIEF特征向量描述器在尺度和旋转上不变,我们的实验表明在运动机器人上针对相机平面运动闭环回路鲁棒性非常好,在运算时间和算法特性上取得很好的平衡。

本文使用存储于二进制空间上的词袋模型,讨论了顺序索引和逆序索引,如第四章所述。据我们所知,这是第一次采用二进制字典用于闭环回路检测。逆序方法用于提取与给定图像相似的图像。顺序索引有效地获取图像间的云点匹配,加快回路确认中的几何特征检验。

第五节详细讲述了闭合回路检测算法的细节。为了检验回路是否闭合,我们验证当前图像匹配的一致性。本文方法针对同一位姿的相似图像,避免数据库检索时重复计算。在处理图像匹配时,我们将表示同一位姿的相似图像进行分组来解决这一问题。

第六节对实验进行了评估,分析了算法不同部分的优点。对比了BRIEF和SURF特征算法的效率,提出了用于闭合回路控制的特征向量描述器。还分析了闭环回路验证中实时几何特征一致性测试程序的性能。最后提供了在5种公共数据集0.7-4米轨迹下的测试结果。完成了整个闭环回路的检测过程,包括特征提取,26300张图像,其中最长处理时间52毫秒,平均处理时间22毫秒,明显强于之前的方法。

这个工作的早期版本如《Real-timeloop detection with bags of binary words》所示,在本文中我们增强了顺序检索方法,加强了该实验的评估方法,在最新的数据集上提供了实验结果,与FAB-MAP2.0算法进行了对比。

二  相关工作

由于其优良性能,基于图像的位姿识别在机器人领域备受重视。例如采用全向相机的闭环回路检测系统FAB-MAP。FAB-MAP采用词袋模型表示图像,使用Chow-Liu树获取关键字的视图相关概率。FAB-MAP已经成为闭环回路检测的标准方法,但当相机长时间提供的图像具有相似的内容结构时,其鲁棒性会降低。在文章4《Fast and incremental method forloop-closure detection using bags of visual words》中,提出了用于创建增量式在线视觉字典,存储图像和颜色。两个词袋模型用于贝叶斯滤波器的输入,贝叶斯滤波器基于上一匹配的概率估计出两幅图像的匹配概率。与概率方法不同的是,我们采用实时一致性检验增强检测的可靠性。这种方法在之前的工作中《CI-Graph SLAM for 3D Reconstruction of Large and ComplexEnvironments using a Multicamera System》和《Robust PlaceRecognition With Stereo Sequences》证明是有效的。本文第一次采用了词袋模型避免了匹配过程中相似图像间的重复运算,可以使系统在更高的频率上工作。

为了确认闭合回路,通常采用几何特征检验。我们采用极值约束获取最优匹配,采用顺序索引更快地计算相似点匹配。文章《View-basedmaps》使用立体相机视觉里程方法实时构建视觉地图,采用词袋模型检验闭合回路。几何特征测试是计算用于图像匹配的空间变换。然而,他们并未考虑图像匹配的一致性问题,这需要采用几何测试寻找闭合回路。

大多数的闭环回路工作,使用SIFT或SURF提取特征,这种方法对于亮度、尺度和旋转变换具有不变的特征,在视角较小的变化情况下性能良好。但特征提取往往需要计算100-700毫秒,如果不使用GPU,采用近似SIFT特征向量描述器,或者减小尺度,来减小特征提取的计算时间,文章《View-based maps》提出了一种压缩随机树方法,该方法计算了一个图像区块和其他已经离线训练的区块的相似度,链接这些相似度的值形成区块特征向量,使用随机正射投影减小尺寸,这种方法提供了快速特征向量的描述器,适合实时应用。我们的工作和这篇文章中类似,使用富有效率的特征提取方法降低处理时间,BRIEF特征向量描述器,或BRISK,或ORB(ORB: An Efficient Alternative to SIFTor SURF)都是采用二进制,计算速度快。一个主要的优势是信息量精简,使用了更少的内存,更快地进行比较,词袋模型的运算速度也就更快。

 

三  二进制特征向量

局部特征提取(主要是关键点和它们的特征描述向量)的计算代价巨大,在比较图像,实时场景计算中,这是一个瓶颈。为了解决这个问题,我们采用FAST关键点和最新的BRIEF特征向量描述。FAST关键点采用Bresenham点画圆算法,比较半径为3像素以内的灰度值来检测角点,只有很少的一部分像素用来对比,角点的获取速度非常快,适用于实时应用的系统中。

         针对每个FAST关键点,我们在它们周围都画了一个方形区块计算BRIEF特征向量。每个图像区块BRIEF特征向量描述器是一个二进制特征向量。每个位是图像区块中两个像素之间亮度比较的结果的值。这些区块已经经过高斯核函数滤除噪声进行过平滑处理。给定图像区块尺寸Sb,待测像素对是在离线状态下随机选择的。除Sb外,我们还必须设置参数Lb:待测试的数量(比如特征向量的长度)。对于图像中的点P,其BRIEF特征向量B(P)表示为:

Bi(p)是特征向量第i位;I(.)是平滑后像素点的亮度;ai和bi是2维平面上相对于测试点i的距离,值为。特征向量不需要训练,只是离线状态下,随机选择的像素点,几乎不消耗时间。最初的BRIEF特征向量描述器根据常态分布选择测试点ai,bi的坐标。我们发现用相邻的一对点的测试效果更好,通过采样分布和选择配对的点的坐标。关于特征向量的长度和区块的大小,我们选Lb=256,Sb=48,这在特征描述和运算时间上取得较好的平衡。

         BRIEF特征向量描述器的优势是运算和比较速度非常快(Lb=256个位时,每个关键点是17.3微秒)。这些描述器只是特征向量的一个位,测量两个向量之间的距离可以通过计算它们之间不同位的数量来解决,也就是用汉明距离计算两个向量对应位置的不同字符的个数,(换句话说,它就是将一个字符串变换成另外一个字符串所需要替换的字符个数),通过执行xor异或操作就可以了。这种方法比SIFT或SURF更适合这个应用,在SIFT或SURF特征向量描述中,计算欧氏距离使用的是浮点运算。

 

四  图像数据库

         由具有层次结构的词袋模型、顺序索引和逆序索引组成图像数据库,如图1所示,这个图像数据库用于侦测之前访问过的地方。

         词袋模型是使用视觉字典将一副图像转换成离散数字向量,用于管理图像的数据集。视觉字典通过将视觉单词W用向量描述空间存储,在离线状态下创建而成。与SIFT或SURF特征向量不同,我们采用二进制向量描述空间,创建一个精简的字典。在层级架构词袋模型上,字典组织成一个树状结构。通过训练图像提取具有丰富数据的一组特征,这与那些稍后在线创建的独立开来。采用K-medians聚类算法(数据挖掘,机器学习的重要分支)[k-means++: The advantages of carefulseeding]先将提取的特征向量分成kw二进制聚类。并将产生的非二进制值直接转换成0。这些聚类形成字典树里的第一层节点。其他层的节点通过同样的方法计算出来,直到Lw层。最后,我们得到一个有W个叶子的树,也就是W个单词的字典。每个单词根据其在训练文集库中的相关性分配权重,减小那些经常使用的单词的权重,这样他们的区别就不明显。我们通过[Video Google: A text retrievalapproach to object matching in videos]文章中的方法,采用使用频率反向分类(tf-idf: term frequency-inverse document frequency)方法进行处理。然后,将图像It,在时间t内,转换成词袋向量Vt∈Rw,特征的二进制描述器遍历字典树,选择每层的中间节点使得汉明距离最小化。

         为了检验两个词袋向量v1和v2的相似度,我们计算L1的值s(v1,v2),这个值的在0到1之间[0…1]:

     (2)

   图像词袋由逆序指针指示。这个结构用于存储视觉单词wi,视觉单词组成视觉字典,视觉字典形成图像It。这样当检索图像,作比较操作时,就不会对比图像中那些一样的视觉单词,这对检索数据库非常有用。我们用逆序指针指向一对数据<It, vti>,可以快速获取图像上的视觉单词的权重。当新的图像It加入到数据库中的时候,逆序指针就会更新,指针也方便在数据库中查找图像。搜索图像时,词袋模型中的两种结构(词袋和逆序指针)只有一种会经常用到。在常用的方法中,我们用顺序指针可以方便地存储每幅图像的特征。我们通过以下方法将字典中的节点分层,假如树一共有l层,从叶子开始为0层,即l=0,到根结束,l=Lw。对于每幅图像It,我们将l层的节点存储在顺序指针中,而l层是图像It的视觉单词的父节点,局部特征ftj与节点关联。我们用顺序指针和词袋模型树估算BRIEF向量描述器中的最邻近的节点。对于特征相同的单词或具有共同l层父节点的单词,当我们计算特征的相关性时,这些顺序指针可以加快几何验证过程。当获取一个将要匹配的候选特征时,几何验证非常必要,新的图像加进数据库,顺序指针就会更新。

 

五  闭合回路检测算法

   我们基于之前的工作《CI-Graph SLAM for 3D Reconstruction of Large and ComplexEnvironments using a Multicamera System》和《Robust PlaceRecognition With Stereo Sequences》,提出检测闭合回路的算法。具体步骤如下面四步所示:

A.  数据库查询

   我们用图像数据库存储和查询任何一副给定的图像。当图像It被转换成词袋向量Vt时,在数据库中查找Vt,查询到一系列的匹配的候选向量对<Vt, Vt1>,<Vt, Vt2>,… ,和与它们关联的相似度值S(Vt, Vtj)。这个相似度的值与图像和图像上视觉单词的分布相关。我们将相似度值进行排列,希望向量Vt顺序排列,通过文章《Robust place recognition with stereo sequences》中的工作规范化相似度值η:

我们通过s(Vt, Vt-Δt)计算Vt的值,Vt-Δt是前一幅图像的词袋向量。s(Vt, Vt-Δt)很小时,比如机器人在转弯的时候,会错误地造成高数值。这样,我们就忽略没有到达最小值的图像,或者指定特征的数量。这个最小值会去掉一些图像,这些图像可能有被用于正确地侦测闭环回路的相似度值η。那么,我们就用一个比较小的值来防止有效的图像被丢弃。我们去掉那些图像,它们的η(Vt,Vtj)小于这个最小的阈值

你可能感兴趣的:(算法,Slam)