论文翻译(下):Deep Learning Based Semantic Labelling of 3D Point Cloud in Visual SLAM

本文主要是介绍论文翻译(下):Deep Learning Based Semantic Labelling of 3D Point Cloud in Visual SLAM,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

接上一篇博客https://blog.csdn.net/qq_40574708/article/details/106268897
鸽了好久了。。。

3.基于3D点云语义分割的深度学习

我们的系统基于ORB-SLAM2[15],由3个模块组成:视觉SLAM模块、点云分割模块和语义标注模块。我们使用基于关键帧的更新策略来生成点云数据。当插入关键帧时,我们使用一个定制的深度学习框架来处理它以获得对象标签。此外,我们使用基于图的方法分割点云。最后,我们将图像标签投影到点云片段,以实现点云的语义标记。上面的过程如图1所示。

在这里插入图片描述
Figure 1. Overview of our semantic 3D mapping system

3.1视觉SLAM模块

visual SLAM模块从RGB-D相机生成点云数据,并由点云分割模块进一步处理。visual SLAM模块在三个线程中工作:tracking线程、local mapping线程和loop closing线程。

tracking线程负责从原始RGB图像转换的灰度图中提取和匹配ORB特征,用于摄像机的定位。此外,它还决定何时插入新的关键帧。

local mapping线程的重点是构建局部3D稀疏地图。它通过执行BA来优化局部地图和关键帧姿势。生成点云数据只使用关键帧,而其他帧用于计算相机姿势。点云是通过将深度图像中的三维点从相机坐标系转换到世界坐标系来生成的。我们还在此线程得到了一个粗略的语义图,将在第3.3节中阐述。
loop closing线程检测外观环路,然后通过位姿图优化来校正累积漂移。它是通过在关键帧之间使用词袋(a bag-of-word)方法来实现的。

3.2 点云分割模块

在点云分割模块中,只依赖几何信息对点云进行分割,而点云对应的图像纹理对分割结果没有影响。首先,我们使用超体素方法[34]分割原始点云,如图2所示。这样不仅可以减少计算量,而且可以根据点的相似性将点云转化为曲面块。超体素的结果可以用邻接图G{ν,ε}来表示,其中ν是块,ε连接两个邻接块。
在这里插入图片描述
Figure 2. supervoxels of point clouds

经过体素化处理后,每个曲面片上都有一个质心ci和一个法向量ni。场景分割可以看作是一个图分割问题。如图3所示,节点是曲面块,每个节点都属于一个对象。我们还应该确定边缘是开还是关。

利用欧氏距离[35]和mean-shift算法[36]计算节点的相似度是一种常见的方法。然而,该方法具有较高的计算复杂度。法向量[32]是局部凸性信息的反映,可用于聚类。然而,当点云中的噪声百分比较高时,它就变得不可靠了。因此,我们提出融合support plane来减小这种负面影响。假设在点云中有K个support plane {s1 s2,…,sk},并且在这些support plane上得到了曲面块。定义了一个变量{bi},i范围是[0,K],i=K表示曲面块属于曲面sk。然后我们提取所有对象的面,并将曲面片和它们一一对应。

在这里插入图片描述
Figure 3. graph model of surface patches

在拿到曲面块后,我们使用RANSAC[28]处理这些块来生成候选面PC={pc1,pc2,……,pcm},然后计算曲面块质心ci和面pcm之间的距离d(ci, pcm),并设定一个阈值δ,我们可以得到在距离平面pcm的距离为δ以内的所有块,定义为∏={v| d(ci, pcm)< δ},然后,我们定义:
在这里插入图片描述
D(pcm)是点云中目标可能的面。在实验中,我们设定η=45,δ=4.5cm。然后平面选择问题变为最小化能量函数:
在这里插入图片描述
而我们拟合的能量函数为:
在这里插入图片描述
完成平面提取后,我们得到了大平面L和曲面块K,之后就可以直接使用fast graph-based[37]方法去进行分割了。

3.3 语义标记模块

原始的地图是由ORB-SLAM2得到的,并没有语义信息(如图4(a)),看起来仅仅是毫无规则的无序点。我们借助于深度学习框架在点云中执行语义标记。

我们使用修改的YOLO3[26]框架来对SLAM环节中提取的关键帧进行目标检测。在2D图像中标签的回归边框并不精确(如图4(b)),但是我们可以将2D语义标签投影到3D点云中来构建合理的3D语义地图(如图4(c)所示)。然而,它是一个粗糙的语义地图,使用起来还不够精确。前边说过,我们已经进行了点云分割,然后我们可以融合分割和粗糙语义地图来优化地图。原始标签来源于RGB图像,本文利用二维标签和三维分割结果进行语义分割。最后,点云中的每个对象区域都得到一个特定的语义标签。详述在4.3小节。
在这里插入图片描述
三张图片分别为a)原始点云b)目标检测c)点云融合语义标签
图4 从2D图像到3D点云进行语义标记

4.实验结果

我们使用TUM数据集[38]测试我们的系统。在不训练神经网络的TUM数据集语义标记的情况下,我们只专注于基于几种已知对象来测试我们的3D语义建图方法。

4.1 实验设置

运行环境为一台笔记本电脑,配有Ubuntu14.0464位操作系统、Intel CoreI5-6300HQ(4核@2.3GHZ)CPU、16G DDR4 RAM和GTX690M GPU。我们的视觉SLAM模块能够达到实时性能。在GPU的加速下,YOLO v3能够以每秒8帧的速度检测图像。

4.2 点云分割结果

在本实验中,我们将分割结果与其他现有方法进行比较,定性地评估我们的点云分割方法。Locally Convex Connected Patches (LCCP)方法只利用局部凹凸性进行分割,忽略了全局几何信息。

缺少全局信息可能导致错误的分割结果,如图5(a)所示,LCCP方法无法从室内场景中分割键盘等小对象。

区域生长法通过种子点的曲率值来初始化种子点,然后通过添加邻域点来扩张这些点的区域。但是,该方法对噪声数据敏感。在片段结果中,我们可以看到背景墙和前景桌面是混合的(见图5(b))。

因此,我们使用超体素方法来减少时间开销,然后利用全局信息如支撑平面和局部信息来获得更好的分割性能。我们检查了不同的方法是否可以分割出点云中的对象。如图5(c)所示,我们可以看到我们的方法能够分割这个室内场景中的大多数对象。

此外,我们基于图的分割方法比LCCP和区域生长方法更快。在这个实验中,我们的SLAM系统使用82060个RGB图像和82060个深度图像来构建包含952563个点的三维点云地图。我们的系统能够在5秒内完成分割。这些方法的时间成本如表1所示。
在这里插入图片描述
在这里插入图片描述

4.3 点云语义分割结果

我们的visual SLAM模块使用YOLO v3获取对象标签并将它们投影到点云。点云具有XYZ和RGB信息,这些信息表示欧几里德坐标和每个点的颜色数据(见图6(a))。此外,点云还具有二维图像的语义信息。在点云分割之后,我们还为每个点获取一个段标签(参见图6(b))。然而,这个段标签只是一个没有语义的随机标签。然后,我们可以融合两个点云,将语义信息与段标签结合起来,这样我们就得到了最终的语义点云,如图6(c)所示。
事实上,两个点云有相同的点数,我们可以使用PCL库来融合它们。融合后,不仅可以纠正分割结果,还可以进行语义标注。这样,我们将二维图像标签转换为三维点云标签。顺便说一句,我们的语义标记模块不能达到实时性,但它可以成为一个视觉SLAM系统的有用模块。
在这里插入图片描述
YOLO v3在包含80个类的coco1数据集上进行训练。然而,我们在室内场景中只检测到几个类(杯子、键盘、显示器、鼠标、泰迪熊)作为感兴趣的对象。coco数据集中的大多数类都是户外对象类,这在我们的实验中是不存在的。

5 结论

本文提出了一种结合二维目标标签和三维点云分割的视觉SLAM三维语义映射方法。提出了一种基于图的三维点云分割方法。本文的另一个贡献是融合了二维和三维信息,构建了一个稠密的语义图。我们在github2上共享源代码。此外,一个视频演示可以在网上找到。

这篇关于论文翻译(下):Deep Learning Based Semantic Labelling of 3D Point Cloud in Visual SLAM的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/284301

相关文章

Spring Cloud LoadBalancer 负载均衡详解

《SpringCloudLoadBalancer负载均衡详解》本文介绍了如何在SpringCloud中使用SpringCloudLoadBalancer实现客户端负载均衡,并详细讲解了轮询策略和... 目录1. 在 idea 上运行多个服务2. 问题引入3. 负载均衡4. Spring Cloud Load

Sentinel 断路器在Spring Cloud使用详解

《Sentinel断路器在SpringCloud使用详解》Sentinel是阿里巴巴开源的一款微服务流量控制组件,主要以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、... 目录Sentinel 介绍同类对比Hystrix:Sentinel:微服务雪崩问题问题原因问题解决方案请

vue解决子组件样式覆盖问题scoped deep

《vue解决子组件样式覆盖问题scopeddeep》文章主要介绍了在Vue项目中处理全局样式和局部样式的方法,包括使用scoped属性和深度选择器(/deep/)来覆盖子组件的样式,作者建议所有组件... 目录前言scoped分析deep分析使用总结所有组件必须加scoped父组件覆盖子组件使用deep前言

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

Retrieval-based-Voice-Conversion-WebUI模型构建指南

一、模型介绍 Retrieval-based-Voice-Conversion-WebUI(简称 RVC)模型是一个基于 VITS(Variational Inference with adversarial learning for end-to-end Text-to-Speech)的简单易用的语音转换框架。 具有以下特点 简单易用:RVC 模型通过简单易用的网页界面,使得用户无需深入了

AI hospital 论文Idea

一、Benchmarking Large Language Models on Communicative Medical Coaching: A Dataset and a Novel System论文地址含代码 大多数现有模型和工具主要迎合以患者为中心的服务。这项工作深入探讨了LLMs在提高医疗专业人员的沟通能力。目标是构建一个模拟实践环境,人类医生(即医学学习者)可以在其中与患者代理进行医学

如何在Visual Studio中调试.NET源码

今天偶然在看别人代码时,发现在他的代码里使用了Any判断List<T>是否为空。 我一般的做法是先判断是否为null,再判断Count。 看了一下Count的源码如下: 1 [__DynamicallyInvokable]2 public int Count3 {4 [__DynamicallyInvokable]5 get

论文翻译:arxiv-2024 Benchmark Data Contamination of Large Language Models: A Survey

Benchmark Data Contamination of Large Language Models: A Survey https://arxiv.org/abs/2406.04244 大规模语言模型的基准数据污染:一项综述 文章目录 大规模语言模型的基准数据污染:一项综述摘要1 引言 摘要 大规模语言模型(LLMs),如GPT-4、Claude-3和Gemini的快

论文阅读笔记: Segment Anything

文章目录 Segment Anything摘要引言任务模型数据引擎数据集负责任的人工智能 Segment Anything Model图像编码器提示编码器mask解码器解决歧义损失和训练 Segment Anything 论文地址: https://arxiv.org/abs/2304.02643 代码地址:https://github.com/facebookresear

MiniGPT-3D, 首个高效的3D点云大语言模型,仅需一张RTX3090显卡,训练一天时间,已开源

项目主页:https://tangyuan96.github.io/minigpt_3d_project_page/ 代码:https://github.com/TangYuan96/MiniGPT-3D 论文:https://arxiv.org/pdf/2405.01413 MiniGPT-3D在多个任务上取得了SoTA,被ACM MM2024接收,只拥有47.8M的可训练参数,在一张RTX