ScanContext 论文详解 - 用途:Lidar SLAM 回环检测、空间描述符

点击上方“3D视觉工坊”,选择“星标”

干货第一时间送达

00549097314190a7406673726a5a8351.jpeg

点击进入—>3D视觉工坊学习交流群

d3753b2e290908f3f88b9bc266dd07b3.png

Figure 1. 激光雷达沿着方位角(浅蓝)与放射方向(黄)的Bin分割 [1]

0097fb81ca77331eb0995d2eb2c0e455.png

Figure 2. Scan Context示意图 [1]

1

浅读文章

Scan Context,从英文字面理解就是“ 扫描 上下文 ”。类比于我们阅读的时候,需要理解上下文,才能明白其意,LidarSLAM在进行回环检测的时候,也需要将“上下文” (之前的数据)进行比较,方才知道我们是不是又走到了之前的同一个地方( 回环 )。

Scan Context这篇文章由韩国KAIST大学的Giseop Kim和Ayoung Kim所写,它的主要特点是提出了Scan Context这个非直方图的全局描述符 ,来帮助我们对“上下文”(当前/之前的数据)进行更快速、有效地搜索。典型的应用就是在LiDAR SLAM中进行回环检测和Place Recognition。

2

提出的方法

•The representation that preserves absolute location information of a point cloud in each bin (如图2所示)

• Efficient bin encoding function

• Two-step search algorithm

3

算法流程

3.1 Scan Context的创建

(1) 与Shape Context的渊源

Scan Context这个算法其实一开始是由Shape Context [2] 所启发的,而Shape Context是把点云的 local Keypoint 附近的点云形状 encode 进一个图像中。

Scan Context的不同在于,它不仅仅是count the number of points,而是采用了 maximum height of points in each bin(简单来说,就是取每一个bin中的所有point的z轴最高点的value作为这个bin的value)。

(2) 为什么选择Maximum height?

a. The reason for using the height is to efficiently summarize the vertical shape of surrounding structures.

b. In addition, the maximum height says which part of the surrounding structures is visible from the sensor.

c. This egocentric visibility has been a well-known concept in the urban design literature for analyzing an identity of a place

(3) Partition a 3D scan

首先,对每一次Scan进行分割:

• Nr: number of rings (黄色圈圈)

• Ns: number of sectors (浅蓝色/绿色?的格子)

• Lmax: 雷达每一个射线的最远距离

• Radial Gap between rings =  d005140cf87962c92f4b41cf03bb2f43.jpeg

• Sector弧度 =  be58d6ecb8036936964bfdae14fcf4f3.jpeg

• 文章中: Nr=20, Ns=60

ef09395d55bfc6f482336df7a0fd91f0.png

(4) 给每个Bin进行赋值:Bin Encoding

f3dc1c42c2d911f6fb1100c4072d1028.png

公式解读:

b17059fda08fedf611f8a7c1784ec7b5.png 就是指the set of points belonging to the bin where the ith ring and jth sector overlapped。

• z(⋅) 是指 d61662fc0924f37e80311e5cf7852817.jpeg中一个point   的Z坐标。

• 直接使用最大z坐标值 z(p),作为这个bin的value。

(5) Scan Context Matrix

A scan context I is finally represented as a Nr × Ns matrix as:

51d283548df7988cef06b6877436f4b3.png

3.2 Similarity Score的计算

假设我们得到了一对Scan Context的矩阵,我们要计算他们俩(2bb9368d735a1d6f7a88def9cae00765.jpeg)之间的相似度,文章中采用了columnwise (按列) 的距离计算。

5cabcd6fcf6e2a2798fda3967abe30c0.jpeg :Query Point Cloud (简言之,我们当前用来query的点云)

601d31c47723699c971950b27a8fb7af.png :Candidate Point Cloud (咱们的“数据库”中储存的用来匹配的candidate点云)      

57c073ebd4e078b27d5bd737a765fb99.png :Column j of Query Point Cloud (列向量)

f2560a7b65a8b4fed6af963bf427816c.png :Column j of Candidate Point Cloud (列向量)

80f78aea79477fb43ca126b78ccef021.png

小红薯: 且慢,大师兄!

小红薯: 古希腊哲学家赫拉克利特说,“人不能两次踏进同一条河流”。

小红薯: 这样来比较两个点云,而没考虑每次不可能在exactly同一个位置和角度观察,是不是too young, too simple了呢!

大师兄: 恩,这是个好问题。 假设咱们回到同一个地方,那有可能是沿着相反的方向回来的,那咱们的Viewpoint就发生了变化,这个Scan Context矩阵就会发生偏移! 这样就会导致Column顺序发生变化。

大师兄: 所幸的是,只要location是在同一个地方,不管你的方向朝着哪里,至少row order不会发生太大变化。 咱们只需要关心column shift这个问题。

在文章中,上面大师兄和小红薯对话中的问题,如下图所示:

60b86995b78efe27f369309c66a312a4.png

Figure 3. Column Shift示意图 [1]

咱们可以看到在column方向发生了水平位移,但是竖着的row方向没有变化。

为了解决这个问题,文中采用了一个“地球人都能想到的方法”,那就是不断尝试各种角度的column shift。注意的是,旋转candidate point cloud有个resolution,那就是之前提到的f70569f9f49879249ff50741546b4d83.png

我们使用公式(7)进行最佳shift的选择,找到最好的 n∗后,用公式(6)进行distance计算。

480f4bc0686edbe2e96bc575f3084632.png

注意:这里咱们通过找最好的 n∗,还有一个意想不到的好处,那就是可以给ICP提供一个Good initial rotation value! (就是ICP代码中的predicted pose)

3.3 Two-phase Search Algorithm

文中提到,有三种主流的Place Recognition的Search Algorithm:

• Pairwise Similarity Scoring

• Nearest Neighbor Search搜索

• Sparse Optimization

本文中采用了pairwise scoring和nearest search来实现有效的Hierarchical Search。

(1) Ring Key

在3.2节中我们提到的公式(6)进行最短距离计算时,要先找到最佳旋转 n∗ ,计算量很大,所以在本文中提出了一种" Two-phase Search ",并提出了 Ring key 这个Descriptor(描述子)来进行匹配搜索:

Ring key is a rotation-invariant descriptor, which is extracted from a scan context. Each row of a scan context, r, is encoded into a single real value via ring encoding function . The first element of the vector k is from the nearest circle from a sensor, and following elements are from the next rings in order as illustrated in Fig. 4

7220f5cfbd4a302eb4405146d199764b.png

Figure 4. Ring key示意图 [1]

由内而外,一圈一圈的ring key通过对Scan Context Matrix的每一行row r 进行ψ ( ⋅ )的encoding就变成了一个N r 维度的Vector k:

14910e5c27332f8257fe628445bec0df.png

The ring encoding function ψ \psi ψ is a occupancy ratio using L0 norm:

3c13d81c781e3071a6d04f6c09c99e95.png

小红薯: 大师兄,这里的r0是什么意思呢?

大师兄: 这是L0 norm(范数)的意思,其实L0 norm并不是一个真正的norm,它就是the total number of non-zero elements in a vector 。 比如,(2,0,1,0,9)这个vector的 L0 norm就是3,因为有3个非零数。

大师兄: 这样一来,咱们统计每一圈的row中有多少个非零数值,那这就和rotation没啥关系啦(也就是原文中所说的rotation invariance)! 这样就能够达到快速的search。

(2) KD-Tree

• 在得到ring key向量 k 之后,文章用了 k 构建KD Tree。

• 用ring key of the query到这个KD Tree中搜索K个最相似的scan indexex(K是个heuristic number)

• 得到最相似的K个scan后,用上文中公式(6)进行Similarity Score计算.

• 满足条件的最近的candidate c∗这个位置被选为revisited place,也就是loop的地方:

d58bbf473884b050c4aa97cee2a26dd8.png

4

Scan Context算法延伸

4.1 ICP Initial Value中的应用

由上文3.2节的公式(7)需要找到一个n ∗  旋转,使得两个点云之间的距离最小。这里其实也可以作为ICP的一个初始值,即predicted pose,来加快converge的过程。

文章的Experiment部分对此进行了试验,发现用Scan Context进行ICP初始化效果确实更好:

45ccfecfb4904c05aff10c3adfdfb6e5.pngbed66ef3fd7a1e07ed049bbd06efcc30.png

Figure 5. SC在ICP初始化中的应用 [1]

4.2 ScanContext在全局重定位中的应用

在深蓝学院第四章作业中,我们应用了ScanContext在全局重定位中的效果。

如果初始化不在原点,且没有全局重定位,效果如下:

cc661d366d71a22a79768b180fb2cf15.jpeg

如果加入ScanContext进行全局重定位,效果如下图:

bbf30b69b9fbfb612c2388e36a03f6f8.jpeg

4.3 Future Works

在文章最后,作者提到可以使用更好的bin encoding function (eg., a bin’s segmantic information)来提升性能,目前咱们只是用了一个很简单的max Z(p)来找Z轴高度上的最高点。

对于有梦想的读者,也期待你的贡献!

参考文献

[1] G. Kim and A. Kim, “Scan Context: Egocentric Spatial Descriptor for Place Recognition Within 3D Point Cloud Map,” 2018 IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS), Madrid, 2018, pp. 4802-4809, doi: 10.1109/IROS.2018.8593953.

[2] S. Belongie, J. Malik, and J. Puzicha, “Shape matching and object recognition using shape contexts,” IEEE Trans. Pattern Analysis and Machine Intell., vol. 24, no. 4, pp. 509–522, 2002.

本文仅做学术分享,如有侵权,请联系删文。

点击进入—>3D视觉工坊学习交流群

干货下载与学习

后台回复:巴塞罗自治大学课件,即可下载国外大学沉淀数年3D Vison精品课件

后台回复:计算机视觉书籍,即可下载3D视觉领域经典书籍pdf

后台回复:3D视觉课程,即可学习3D视觉领域精品课程

3D视觉工坊精品课程官网:3dcver.com

1.面向自动驾驶领域的3D点云目标检测全栈学习路线!(单模态+多模态/数据+代码)
2.彻底搞透视觉三维重建:原理剖析、代码讲解、及优化改进
3.国内首个面向工业级实战的点云处理课程
4.激光-视觉-IMU-GPS融合SLAM算法梳理和代码讲解
5.彻底搞懂视觉-惯性SLAM:基于VINS-Fusion正式开课啦
6.彻底搞懂基于LOAM框架的3D激光SLAM: 源码剖析到算法优化
7.彻底剖析室内、室外激光SLAM关键算法原理、代码和实战(cartographer+LOAM +LIO-SAM)

8.从零搭建一套结构光3D重建系统[理论+源码+实践]

9.单目深度估计方法:算法梳理与代码实现

10.自动驾驶中的深度学习模型部署实战

11.相机模型与标定(单目+双目+鱼眼)

12.重磅!四旋翼飞行器:算法与实战

13.ROS2从入门到精通:理论与实战

14.国内首个3D缺陷检测教程:理论、源码与实战

15.基于Open3D的点云处理入门与实战教程

16.透彻理解视觉ORB-SLAM3:理论基础+代码解析+算法改进

重磅!粉丝学习交流群已成立

交流群主要有3D视觉、CV&深度学习、SLAM、三维重建、点云后处理、自动驾驶、多传感器融合、CV入门、三维测量、VR/AR、3D人脸识别、医疗影像、缺陷检测、行人重识别、目标跟踪、视觉产品落地、视觉竞赛、车牌识别、硬件选型、ORB-SLAM系列源码交流、深度估计、TOF、求职交流等方向。

扫描以下二维码,添加小助理微信(dddvisiona),一定要备注:研究方向+学校/公司+昵称,例如:”3D视觉 + 上海交大 + 静静“。请按照格式备注,可快速被通过且邀请进群。原创投稿也请联系。

1429902ce5dd4ea6b4be160d63fa3912.jpeg

▲长按加微信群或投稿,微信号:dddvisiona

3D视觉从入门到精通知识星球:针对3D视觉领域的视频课(三维重建系列、三维点云系列、结构光系列、手眼标定、相机标定、激光/视觉SLAM、自动驾驶等)源码分享、知识点汇总、入门进阶学习路线、最新paper分享、疑问解答等进行深耕,更有各类大厂的算法工程人员进行技术指导。与此同时,星球将联合知名企业发布3D视觉相关算法开发岗位以及项目对接信息,打造成集技术与就业为一体的铁杆粉丝聚集区,6000+星球成员为创造更好的AI世界共同进步,知识星球入口:

学习3D视觉核心技术,扫描查看,3天内无条件退款

890835cba69ee1ef1d68866e2ba662ec.jpeg

高质量教程资料、答疑解惑、助你高效解决问题

觉得有用,麻烦给个赞和在看~  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值