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

news2024/10/6 10:35:17

深蓝学院(深蓝学院 - 专注人工智能与自动驾驶的学习平台)是专注于人工智能的在线教育平台,已有数万名伙伴在深蓝学院平台学习,很多都来自于国内外知名院校,比如清华、北大等。​

来源: “深蓝前沿教育”

了解更多内容

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

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 =  

• Sector弧度 =  

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

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

公式解读:

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

• z(⋅) 是指 

中一个point   的Z坐标。

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

(5) Scan Context Matrix

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

3.2 Similarity Score的计算

假设我们得到了一对Scan Context的矩阵,我们要计算他们俩(

)之间的相似度,文章中采用了columnwise (按列) 的距离计算。

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

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

 :Column j of Query Point Cloud (列向量)

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

小红薯: 且慢,大师兄!

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

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

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

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

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

Figure 3. Column Shift示意图 [1]

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

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

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

注意: 这里咱们通过找最好的 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

Figure 4. Ring key示意图 [1]

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

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

小红薯: 大师兄,这里的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的地方:

4

Scan Context算法延伸

4.1 ICP Initial Value中的应用

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

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

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

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

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

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

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

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.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/14276.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

汽车以太网线束测试及如何破局

今日,AEM联合维信仪器在深圳国际会展中心参加了第二十四届中国国际高新技术成果交易会https://baike.baidu.com/item/%E7%AC%AC%E4%BA%8C%E5%8D%81%E5%9B%9B%E5%B1%8A%E4%B8%AD%E5%9B%BD%E5%9B%BD%E9%99%85%E9%AB%98%E6%96%B0%E6%8A%80%E6%9C%AF%E6%88%90%E6%9E%9C%…

【自然语言处理(NLP)】基于注意力机制的中-英机器翻译

【自然语言处理(NLP)】基于注意力机制的中-英机器翻译 作者简介:在校大学生一枚,华为云享专家,阿里云专家博主,腾云先锋(TDP)成员,云曦智划项目总负责人,全国…

Java常用类和对象---尚硅谷Java入门视频学习

1.Object 常用方法: toString() 将对象转换成字符串。 toString默认打印的就是对象的内存地址,所以,为了能够更直观理解对象的内容,可以重写这个方法 hashCode() 获取对象的内存地址 equals() 判断两个对象是否相等, 如果相等&…

Netty-RPC

RPC:(Remote Procedure Call)-- 远程过程调用 (1)一个计算机通信协议。该协议允许运行与A计算机的程序调用运行于另一台计算机的子程序,而程序员无需额外滴为这个交互作用编程。 (2&#xff09…

华为机试 - 考古学家

目录 题目描述 输入描述 输出描述 用例 题目解析 算法源码 题目描述 有一个考古学家发现一个石碑,但是很可惜,发现时其已经断成多段,原地发现n个断口整齐的石碑碎片。为了破解石碑内容,考古学家希望有程序能帮忙计算复原后…

[附源码]java毕业设计旅游管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

[数据结构]二叉树之堆的实现

🥁作者: 华丞臧. 📕​​​​专栏:【数据结构】 各位读者老爷如果觉得博主写的不错,请诸位多多支持(点赞收藏关注)。如果有错误的地方,欢迎在评论区指出。 推荐一款刷题网站 👉 LeetCode刷题网站…

各种信息收集

谷歌hack语法 site: baidu.com 搜索关于baidu.com的相关子域名网站 黑客 site:baidu.com 搜索关于baidu.com的子域名网站中有关字符“黑客”的网页 inurl: admin/login.php 搜索含有"admin/login.php"的url inurl: login site:baidu.com …

ATF SMC处理

文章目录ATF SMC上下文结构体SMC handler实现ATF SMC上下文结构体 ATF在处理SMC的时候会把CPU的寄存器保存起来,退出SMC的时候恢复现场。使用qemu_v8.mk编译出来的ATF没有定义CTX_INCLUDE_EL2_REGS,CTX_INCLUDE_FPREGS和CTX_INCLUDE_PAUTH_REGS。 lib/c…

Pytorch的grid_sample是如何实现对grid求导的?(源码解读)

Pytorch的grid_sample是如何实现对grid求导的?(源码解读) 这里本人的参考源码是grid_sample的CPU内核的CPP实现:https://github.com/pytorch/pytorch/blob/b039a715ce4e9cca82ae3bf72cb84652957b2844/aten/src/ATen/native/cpu/G…

【Detectron2】代码库学习-4. LazyConfig 配置文件

目录1. 配置文件2. LazyConfig 导入导出3. 递归实例化4. 基于LazyConfig的训练步骤4.1 导入依赖库4.2 日志初始化4.3 训练4.4 评估4.5 训练流程4.6 主函数入口5. TipsDetectron2是Facebook AI Research(FAIR)推出的基于Pytorch的视觉算法开源框架,主要聚焦于目标检测…

力扣160 - 相交链表【双指针妙解】

链表也能相交~一、题目描述二、思路分析与罗列三、整体代码展示四、总结与提炼一、题目描述 原题传送门 示例 1: 输入:intersectVal 8, listA [4,1,8,4,5], listB [5,6,1,8,4,5], skipA 2, skipB 3 输出:Intersected at ‘8’ 解释&…

MySQL索引

索引索引的相关概念索引分类索引的底层数据结构及其原理主键索引&二级索引聚集和非聚集索引哈西索引&&自适应哈西索引索引和慢查询日志索引优化索引的相关概念 什么是索引?索引其实就是一个数据结构。当表中的数据量到达几十万甚至上百万的时候&#x…

每个 Flutter 开发者都应该知道的一些原则

“仅仅让代码起作用是不够的。有效的代码经常被严重破坏。仅满足于工作代码的程序员表现得不专业。他们可能担心没有时间改进代码的结构和设计,但我不同意。没有什么比糟糕的代码对开发项目产生更深远、更长期的影响了。” ― Robert C. Martin,Clean Code:敏捷软件工艺手册…

fpga nvme 寄存器

图1所示的NVMe多队列,每个队列支持64K命令,最多支持64K队列。这些队列的设计使得IO命令和对命令的处理不仅可以在同一处理器内核上运行,也可以充分利用多核处理器的并行处理能力。每个应用程序或线程可以有自己的独立队列,因此不需…

基于Nacos的注册中心与配置中心

基于Nacos的注册中心与配置中心 Nacos简介 概述 Nacos全称是动态命名和配置服务,Nacos是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。Nacos主要用于发现、配置和管理微服务。 什么是Nacos Nacos支持几乎所有主流类型的服务的发现、配置和…

同花顺_代码解析_技术指标_A

本文通过对同花顺中现成代码进行解析,用以了解同花顺相关策略设计的思想 目录 ABI AD ADL ADR ADTM ADVOL AMV ARBR ARMS ASI ATR ABI 绝对幅度指标 算法:上涨家数减去下跌家数所得的差的绝对值。 该指标只适用于大盘日线。 行号 1 aa…

题目7飞机票订票系统

题目7飞机票订票系统问题描述:某公司每天有10航班(航班号、价格),每个航班的飞机,共有80个座位, 20排,每排4个位子。编号为A,BCD。如座位号:10D表示10排D座。 运行界面如下: 1)能从键盘录入订票信息:乘客的…

[Games 101] Lecture 13-16 Ray Tracing

Ray Tracing Why Ray Tracing 光栅化不能得到很好的全局光照效果 软阴影光线弹射超过一次(间接光照) 光栅化是一个快速的近似,但是质量较低 光线追踪是准确的,但是较慢 Rasterization: real-time, ray tracing: offline生成一帧…

狗屎一样的面试官,你遇到过几个?

做了几年软件开发,我们都或多或少面试过别人,或者被别人面试过。大家最常吐槽的就是面试造火箭,进厂拧螺丝。今天就来吐槽一下那些奇葩(gou)一样的面试官 A 那是在我刚工作1年的时候,出去面试前端开发。 那…