论文阅读 —— 语义激光SLAM

news2024/10/7 0:52:25

文章目录

  • 点云语义分割算法
    • 1 基于点的方法
    • 2 基于网格的方法
    • 3 基于投影的方法
  • 一、SLOAM
    • 1.1 语义部分
    • 1.2 SLAM部分
      • 1.2.1 树的残差
      • 1.2.2 地面的残差
      • 1.2.3匹配过程
  • 二、SSC: Semantic Scan Context for Large-Scale Place Recognition
    • 2.1 两步全局语义ICP
      • 2.1.1 快速偏航角计算
      • 2.1.2 快速语义ICP
    • 2.2 语义结合的Scan Context


点云语义分割算法

因此,除了物体检测以外,自动驾驶的环境感知还包括另外一个重要的组成部分,那就是语义分割。准确的说,这部分有三个不同的任务:语义分割(semantic segmentation),实例分割(instance segmentation)和全景分割(panoramic segmentation)。语义分割的任务是给场景中的每个位置(图像中的每个像素,或者点云中的每个点)指定一个类别标签,比如车辆,行人,道路,建筑物等。实例分割的任务类似于物体检测,但输出的不是物体框,而是每个点的类别标签和实例标签。全景分割任务则是语义分割和实例分割的结合。算法需要区分物体上的点(前景点)和非物体上的点(背景点),对于前景点还需要区分不同的实例。

本文暂时只考虑语义分割(semantic segmentation

按照输入数据的不同组织形式,语义分割的方法也可以分为
1 基于点的方法
2 基于网格的方法
3 基于投影的方法

1 基于点的方法

对于直接处理点的方法来说,PointNet和PointNet++是最具有代表性的。

2 基于网格的方法

在3D物体检测领域的经典方法VoxelNet中,点云被量化为均匀的3D网格(voxel)。配合上3D卷积,图像语义分割中的全卷积网络结构就可以用来处理3D的voxel数据。

3 基于投影的方法

点云是存在于3D空间的,具有完整的空间信息,因此可以将其投影到不同的二维视图上。比如,我们可以假设3D空间中存在多个虚拟的摄像头,每个摄像头所看到的点云形成一幅2D图像,图像的特征可以包括深度和颜色(如果通过RGB-D设备采集)等信息。对这些2D图像进行语义分割,然后再将分割结果投影回3D空间,我们就得到了点云的分割结果。这个基于多视图的方法缺点在于非常依赖于虚拟视角的选择,无法充分的利用空间和结构信息,而且物体间会相互遮挡。
参考博客,巫婆塔里的工程师

一、SLOAM

参考博客
基于物体”的森林语义SLAM
摘要:
This paper describes an end-to-end pipeline for tree diameter estimation based on semantic segmentation and lidar odometry and mapping.
提出了一个端到端的树木直径预测pipeline,其基于语义分割(SS)和SLAM。

1.1 语义部分

1、为了标注数据集方便,作者团队开发了一套vr数据标注工具。
在这里插入图片描述
树的语义点云:
论文将2D的深度图作为网络的输入,这个2D的深度图是通过点云投影而成的,网络部分使用简易版的ERFNET进行语义分割,得到的结果原文说是一个2D的mask,其实也可以看作一个2D的语义图,利用这个mask反向投影回3D的点云空间,就可以得到点云的语义信息标签。
然后将同一棵树的点凑到一起,论文使用了一个trellis graph的方法,如图:
在这里插入图片描述

地面点:
启发式的方法。
具体来说首先将已经通过神经网络打上树木标签的点去掉,剩下的点就是地面点和灌木等障碍的点,考虑到一般地面点都在其它点的下面,所以将剩余点划分为环形的网格,每个网格中选择高度最低的点,这些点就被作为地面点,网格的大小是超参数,需要人为设置。通过这种方法,点变少了但是也变准确了。

1.2 SLAM部分

树木提供的则是xy方向的限制地面特征提供了z轴上的限制

1.2.1 树的残差

对于一个树木个体,其需要一个五参数的向量来表示树木所代表的圆柱体:
在这里插入图片描述
这种距离计算方法在曲率下降的时候会出现问题,所以论文还给出了一种当曲率变小的时候的距离计算方法:
在这里插入图片描述
那么现在对于新来的一帧,经过了前面提到的提取,一棵树的点已经可以凑到一起,那么就可以用最小二乘法,得到一个圆柱体的最优表示:
在这里插入图片描述
需要一组最好的参数使得特征点到圆柱体的距离最小。

1.2.2 地面的残差

点到平面的距离论文写为:
在这里插入图片描述
残差的整合
在这里插入图片描述
点到圆柱的距离+点到地面的距离

1.2.3匹配过程

如果找到当前帧的树点云和上一帧对应的树点云?最近邻搜索,按照点的标签来找。

二、SSC: Semantic Scan Context for Large-Scale Place Recognition

参考博客
结合语义的描述子编码方法,主要是对A-LOAM增加回环检测。快速的语义结合的相似度检测方法
贡献在于:
1、提出了两步全局语义ICP
2、语义的Scan Context描述子
注意:论文没有提用的什么网络来获取语义信息,默认点云的语义信息已经知悉。

全局语义ICP为两部分:快速偏航角计算以及快速的语义ICP匹配
对于单帧点云:用三维坐标加上语义标签(车、地面、栏杆)四个量来表示其中的每个点
对于是否回环的检测:首先利用两帧点云计算全局旋转角,将两帧点云角度对齐,再利用ICP的方法计算平面偏移,得到的平面偏移将点云做叠加。最后再用描述子做匹配,得到的相似度分数就用来判断是不是真的出现了回环。

2.1 两步全局语义ICP

ICP本身是一个迭代优化的过程,一旦陷入局部最优值就很难迭代出来,并且合适的初值也很重要。
针对于初值和局部最优值的问题,这篇论文提出了全局语义ICP的解决方法,这个方法分为两步:快速偏航角计算以及快速语义ICP计算。

2.1.1 快速偏航角计算

传统的Scan Context描述子因为它环形的编码方法,不具有旋转不变性,这导致编码出来的二维矩阵在匹配时,必须要不断调整列来找出最优的角度,可以说是开销大而且有些暴力。在这篇论文中,论文没有提用的什么网络来获取语义信息,默认点云的语义信息已经知道了。对于两帧点云P1P2,我们从中筛选出具有语义代表性的点,比如建筑物、交通标志等内容,其余的点则忽略不计。
对于其中的每个点,将它们向二维平面上投影以激光雷达为中心,计算其极坐标和平面坐标
在这里插入图片描述
注:pi=[极坐标,平面坐标,语义标签]

之后依然是按照角度划分扇形区域,在传统的Scan Context编码中,在每个扇区内还要沿径向在继续划分格子,这里就不需要这一步了。每个扇区内,只保留径向上离圆心最近的点,如果一共划分N个扇区,那么经过这一步的处理,就可以用一个N维向量来表示。
在这里插入图片描述
之后我们就利用这个N维向量来快速计算角度,这一步很像是图像匹配里面的全局旋转角计算,只不过这里使用的是最近点的径向距离。
在这里插入图片描述

这篇论文通过这种类似于角度直方图的方法,将点云角度上进行了一个对齐操作,相当于给原始的Scan Context补上了一个旋转不变性。
但是降维的方法有些太直接了?直接是取了每个径向上的最小值,也可能是个人理解错了,对于普通的道路来说,取最小值的方法难道不是直接扫描到地面上吗,那这样子到哪里都是扫到地面,角度对齐的意义不就没了。

2.1.2 快速语义ICP

上一步得到了两帧点云之间的角度偏差,我们可以利用这个角度偏差,将点云旋转到同一个方向上:
在这里插入图片描述
移动的是二维坐标xy
转换之后,点云的角度实际上是对齐了的,那么区别就只在于点云的位置了,由于使用的是投影之后的结果,所以差距就是Δx和Δy,可以利用下面的式子进行优化:
在这里插入图片描述
第二行就是一个ICP的变式,将ICP计算位姿换为了求Δx和Δy。
关键在于第一行最后的这个函数是用来衡量两个标签是否相同的二值函数,如果相同返回值是1,如果不同,返回值是0。即考虑最近点语义相同的情况下,用ICP找一个最近距离从而优化出Δx和Δy。
但如果找到了一个Δx和Δy让所有点的语义标签都不一样,这个式子的结果是0,必然是目标函数的最小值,也就是说式子将一个完全错误的Δx和Δy认为是最优值,虽然可能性不是很大,但不排除有这种可能,博主感觉式子写法上应该加一个标签相同的点的数量的比例,用这个来衡量语义一致性的程度。

2.2 语义结合的Scan Context

上面的部分提供了一种快速的语义结合的相似度检测方法,除此之外,论文还对Scan Context进行了改进,将语义信息引入了进去,依然是使用原始的划分网格的方法,这次我们直接统计落入网格内标签的情况:

在这里插入图片描述
Bij为第(i,j)个网格内标签的集合。
之后对于每个网格,根据语义标签的统计信息来进行编码,即选取网格内最有意义的语义标签作为编码
在这里插入图片描述

这里的E是一个函数,论文里面没有给出具体的写法,只提到这是一个用于衡量代表性的函数,标签出现的次数越少就认为其代表性越高,就选择这个标签作为这个网格的编码,由此可以得到一个基于语义的二维矩阵编码。
那么我们就可以在上面对齐之后的点云的基础上做进一步的编码,用这个方法得到一个语义、位置结合在一起的编码,并且由于点云已经对齐,所以不需要在匹配时额外考虑列寻找的事情,直接对对应位置做匹配就可以:
在这里插入图片描述

最后的相似度计算公式相当于是一个相同标签的网格占全体网格的比例,用这个值来衡量两帧点云的相似程度。

参考博客:
https://blog.csdn.net/weixin_43849505/article/details/125506147
https://blog.csdn.net/weixin_43849505/article/details/126764425
https://blog.csdn.net/weixin_43849505/article/details/126668935

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

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

相关文章

【已解决---ChatGPT学术优化下载安装问题集锦】

文章目录 问题1:关于配置完项目后关闭,如何再次打开快速启动。问题2:项目链接打不开,是404。问题3:出现关于API的报错。问题4:[Local Message] Request timeout. Network error. Please check proxy settings in confi…

8.Ansible Variables介绍

什么是Ansible Variables? 就像任何其他脚本或编程语言一样,变量用于存储变化的值。例如, 假设我们要尝试执行相同的操作, 将修补程序应用于数百台服务器。我们只需要一个playbook就可以满足所有100台服务器的需求。但是,…

chatgpt赋能python:Python中提取指定元素——一个简单而精细的方法

Python中提取指定元素——一个简单而精细的方法 在网页抓取中,经常需要提取特定元素,例如标题、段落、图片等,以便于后续的数据处理与分析。而Python则是许多工程师在此领域中的首选语言,其灵活的语法和强大的第三方库给爬虫和数…

idea怎么搭建springboot

一般来说,用IDEA创建SpringBoot项目有两种方式。其一是Spring官网提供了一个快速生成SpringBoot项目的网站,可以在官网直接下载后,再导入IDEA中。另外一种是直接用IDEA创建一个SpringBoot项目,一般开发也是用的这种方式进行创建。…

为什么串行接口速率比并行接口快?

串行接口的速率会比并行快,可以从下面四个方面考虑: ①高速串口不需要时钟信号来同步数据流,也就没有时钟周期性的边沿,频谱不会集中,所以噪声干扰少很多。 以PCIE和SATA为例,时钟信息通过8b/10b编码已经集…

正运动技术运动控制器如何快速实现单轴/多轴同步跟随功能?

本文主要介绍如何使用MOVESYNC指令快速实现单轴/多轴同步跟随功能,适用于XYZ(R)、SCARA、DELTA等常见机械结构,在流水线点胶、流水线产品分拣、流水线产品搬运等场景中广泛应用。 阅读本文,学习同步跟随的原理和实现方…

抖音seo源码系统开发服务商选择

“账号矩阵”是一种账号运营的高阶玩法,指一个运营主体同时开设多个平台多个账号利用品牌联动的形式来实现账号之间的相关引流,以账号组的形式实现企业营销价值最大化。那么运营多个账号,短视频平台内容是核心,势必要招募多个剪辑…

RK平台使用IO指令

简介 RK平台开发过程经常要用到IO指令,主要是用来读写CPU各个模块寄存器的值,从而实现在线调试。 RK平台的SDK默认有包含IO指令的源码,如果执行的时候找不到指令,可能是没有编译进去,找到对应的编译脚本编译进去即可。…

Dream音频芯片开发虚拟环绕声算法概论

1 项目需求 2 开发平台介绍 Dream S.A.S France公司网站:https://www.dream.fr Dream全系列的芯片包含SAM2000 series ICs、SAM3000 series ICs以及SAM5000 series ICs。 SAM5000 series ICs包括 sam5504、sam5704、sam5708、sam5808、sam5716、sam5916。 目前drea…

为什么电源纹波那么大?

某用户在用500MHz带宽的示波器对其开关电源输出5V信号的纹波进行测试时&#xff0c;发现纹波和噪声的峰峰值达到了900多mV&#xff08;如下图所示&#xff09;&#xff0c;而其开关电源标称的纹波的峰峰值<20mv。虽然用户电路板上后级还有LDO对开关电源的这个输出再进行稳压…

出学校干了 5 年外包,已经废了

如果不是女朋友和我提分手&#xff0c;我估计现在还没醒悟 本科大专&#xff0c;17年通过校招进入某软件公司做测试&#xff0c;干了接近5年的功能。 今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落&#xff01;而我已经…

Spring面向切面编程(AOP)

Spring面向切面编程&#xff08;AOP&#xff09; 概念 AOP&#xff08;Aspect Oriented Programming&#xff09;&#xff0c;即面向切面编程&#xff0c;利用一种称为"横切"的技术&#xff0c;剖开封装的对象内部&#xff0c;并将那些影响了多个类的公共行为封装到…

DICOM笔记-CT图像的边界

常见CT图像在有效范围内都是有效CT值。 对CT值的处理也就仅限于做斜率和截距的线性处理&#xff1b; 可参加常用的DICOM标签信息&#xff1a; DICOM笔记-DICOM常用Tag标签汇总_dicom tag列表_黑山老妖的博客的博客-CSDN博客文件引言MetaInfoGroupElementTag Description中文解…

尚无忧货运物流app系统享集运转运uniapp系统

物流货运app系统 找货源 找车源 查找货源 开通会员 开创性的物流货运管理云系统&#xff0c;将货运环节中的制造商、承运商、司机和收货方链接在同一平台&#xff0c;轻松管理运输。 <template> <diy ref"diy" v-if"isDiy"></diy&…

vue——antd+elementUi——table表格实现滚动加载(分页滚动加载)——技能提升

今天遇到一个需求&#xff0c;就是要实现表格的滚动加载。 通常我们经常实现的效果是&#xff1a;下图中带分页的表格 如果要实现滚动分页加载的话&#xff0c;则需要保证的一点就是数据量不能过大&#xff0c;过多的数据量会导致页面的卡顿。 下面来介绍滚动分页加载的实现…

jmeter的使用

一、jmeter介绍和下载 1.1 jmeter介绍 Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试&#xff0c;它最初被设计用于Web应用测试&#xff0c;但后来扩展到其他测试领域。 JMeter 可以用于对服务器、网络或对象模拟巨大的负载&#xff0c;来自不…

【Python】FastAPI 配置日志即 logging 模块使用

目录 1. 日志 2. FastAPI 示例 1. 日志 日志是对软件执行时所发生事件的一种追踪方式。软件开发人员对他们的代码添加日志调用&#xff0c;借此来指示某事件的发生。一个事件通过一些包含变量数据的描述信息来描述&#xff08;比如&#xff1a;每个事件发生时的数据都是不同的…

Python之并发编程多线程理论

一、什么是线程 在传统操作系统中&#xff0c;每个进程有一个地址空间&#xff0c;而且默认就有一个控制线程 线程顾名思义&#xff0c;就是一条流水线工作的过程&#xff0c;一条流水线必须属于一个车间&#xff0c;一个车间的工作过程是一个进程 车间负责把资源整合到一起…

项目开发中异常处理需要注意的问题(详细!!)

文章目录 1、各层在对异常处理时需要注意的问题2、业务代码层面对于异常的处理姿势3、错误的异常处理方式&#xff1a;1、丢弃异常2、丢失异常的原始信息3、抛出异常时不指定任何信息 4、线程池处理异常方法 1、各层在对异常处理时需要注意的问题 这是日常开发中请求的处理过程…

springcloud-alibaba (05)Seata实现分布式事务-个人笔记

前言 本文将介绍如何使用Seata实现分布式事务。将覆盖以下主题&#xff1a; seata下载与安装如何配置和启动Seata服务器如何编写应用程序以使用Seata如何解决常见问题 本文只是我个人seata学习笔记&#xff0c;不是什么学习教程 如果你是一名Java开发人员&#xff0c;那么你…