基于稀疏分层隐式神经表示的大规模三维场景建图

作者:马雪奇 | 来源: 深圳大学可视计算研究中心

d1f4273060fcbe2057cf7a87a787fa3a.jpeg

bb9138426fcfca84b137e932b04b82e1.png

2b5b58462f802d18dd8e6e0158548c41.png

‍导读

本文是VCC马雪奇同学对论文 SHINE-Mapping: Large-Scale 3D Mapping Using Sparse Hierarchical Implicit Neural Representations[1] 的解读,该工作来自德国波恩大学摄影测量与机器人实验室,已被机器人领域的顶级会议ICRA 2023收录。

项目主页: 

https://github.com/PRBonn/SHINE_mapping 

该工作提出了一种基于隐式表达的大规模三维建图的方法,它利用分层八叉树的结构来存储可学习的局部特征,并通过共享的浅层MLP将局部特征转换为有符号距离场。相比于以往的工作,该方法能够以更小的资源消耗,重建出更准确、更完整的大规模场景。

注:本文图片与视频均来自原论文与其项目主页。

3aa5354b2d39216ad0127515696d6292.gif

I

 引言 

对移动机器人而言,在大规模的室外场景中进行定位和导航是一项常见的任务。因此,一个精确的三维环境地图变得尤为重要。重建的三维场景地图除了要足够精确,还应该尽可能地减少内存消耗。而目前的建图方法往往采用空间网格来表示三维地图[2][3][4],这种方法很难同时满足精确建图和减少内存的要求。

最近,基于隐式神经网络的表示方法在精确重建网格的同时,还能保持低内存消耗的要求。不过,这类方法通常应用于RGB-D数据构建的三维场景[5][6][7],在LiDAR数据方面应用的不多。此外,这类方法只适用于小型场景,很难应用于大规模的室外场景中。

本次导读论文从Takikawa等人[8] 的工作中得到启发,通过构建稀疏的分层隐式神经网络表示,完成了对大规模场景的增量式重建。该方法利用八叉树的稀疏数据结构来增量式地存储学习到的局部特征,并基于一个浅层的MLP将学习到的局部特征转换为有符号距离场。除此之外,该工作还设计了一个二值交叉熵损失函数,能够高效地实现局部特征优化。并且,该论文采用正则化的方法对特征更新进行约束,有效地缓解了在大规模场景建图过程中遇到的灾难性遗忘问题。实验结果表明:

(1) 在密集点云采样区域,该方法的重建精度优于基于TSDF的方法[4][9] 以及基于体积渲染的隐式神经映射方法[7];

(2) 在稀疏点云采样区域,该方法的重建完整度优于非学习的方法[12];

(3) 相比于基于TSDF的方法,该方法重建的场景内存消耗更小。

II

 技术贡献 

本工作主要贡献如下:

  • 提出了一种新的基于稀疏分层八叉树的大规模场景表示方法。该方法增量式地将学习到的局部特征向量存储在八叉树中,并通过一个浅层的神经网络将学习到的局部特征转换为有符号距离值;

  • 设计了一种二值交叉损失函数,能够实现快速且鲁棒的局部特征值优化;

  • 通过对特征进行正则化,有效避免了灾难性遗忘问题对大规模场景建图的影响。

III

 方法介绍 

SHINE-Mapping以激光雷达点云作为输入,利用稀疏分层八叉树以及全局共享的MLP解码器来隐式地表示连续空间中的有符号距离场。该方法以直接测量的点云作为监督,通过在线优化MLP解码器输出的有符号距离值来捕捉局部场景中的几何信息。最后,该方法利用Marching Cubes[10]将有符号距离场转换为显式的网格信息。

隐式神经地图表示

首先,SHINE-Mapping将三维空间中的局部特征存储在稀疏分层八叉树中,实现了隐式地图表示,有效地减少了建图过程中的内存开销。其次,该方法将八叉树中存储的多层局部特征进行求和,并送入到MLP中进行解码,从而得到三维空间中的有符号距离场。

此外,为了能够快速查找局部空间中的特征信息,SHINE-Mapping将八叉树中每一层特征信息存储在一个哈希表中,并通过独特的莫顿码,将多维数据映射到一维。这样的设计使得该方法能够轻松地扩展地图,而无需事先分配内存,从而有效地提升了建图速度。

14e5a5f9714cb67f1eabf3920900c860.png

图1 SHINE-Mapping整体重建过程

图1为SHINE-Mapping重建隐式表示地图的整体过程。为了便于理解,上图中仅描述了两个层级的特征,绿色和蓝色。该方法的流程为:对于任意的查询点  首先从最底层(第0层)开始,对  的空间位置进行三线性插值,从而得到第0层的特征。然后以此类推,获得第1层的特征信息。接着,该方法通过对多层的特征信息进行求和,得到合并后的特征,并将合并后的特征送入到MLP中,从而获得  位置点的有符号距离值。由于整个过程是可微的,因此可以通过反向传播的方式对特征向量和MLP参数进行联合优化。

训练与损失函数

因为LiDAR能够提供准确的三维空间测距结果,因此该方法直接以LiDAR作为真值,以二值交叉熵  作为损失函数来对特征向量和MLP参数进行监督训练。除此之外,由于该方法的网络输出是有符号距离值,为了能够得到准确的输出结果,该方法在损失函数中添加了一个Eikonal项[11]:  

其中  为网络模型的输出,  为网络模型的参数,  为网络模型的输入。

得到的损失函数如下: 其中,  为超参数,其表示  的权重。

增量式重建

在增量式重建工程中,由于每次重建只聚焦于当前的局部区域,忽略了之前重建区域的信息,往往会导致最终的全局重建性能下降。为了避免这种问题对重建结果的影响SHINE-Mapping在损失函数中添加了正则化项  用于约束参数更新: 其中,  为权重,表示先前训练数据的Loss对于参数变化的敏感性。  为当前的参数值,  为之前数据训练收敛之后的参数值。增量式重建的损失函数如下:  其中,  为超参数,表示  的权重。

IV

 部分结果展示 

接下来我们首先以虚拟场景数据集MaiCity dataset为例,展示SHINE-Mapping与之前方法 Voxblox、VDBFusion、Puma[12] 以及添加可微渲染 (Differentiable Rendering: DR) 的SHINE-Mapping的重建结果对比。第一行展示的是重建后的网格结果,其中,黑色线框部分为街道两旁的“树”;第二行展示的是重建结果的误差图,从蓝色到红色的颜色图表示从-5cm到5cm的有符号重建误差。

81f195d98cb1d258ab589f76bb19a010.png

图2 在MaiCity数据集上,不同方法的重建结果对比

表1为不同方法在MaiCity数据集上的重建质量评价结果。可以看出,SHINE-Mapping与先前的大规模室外场景建图方法相比,在完整性误差,准确性误差、Chamfer-L1误差、完整度、F-score上均表现 SOTA。

913110f9edb0dc7cbe96ca9a73a15409.png

表1 不同方法在MaiCity数据集上的重建质量对比

bb4ad05d8b3a56e5ff7be05f9d706927.gif

图3 在MaiCity数据集上,SHINE-Mapping增量式重建过程

接下来是SHINE-Mapping在真实场景数据集Newer College dataset上的重建结果。第一行展示的是不同方法重建的Newer College网格结果,黑色线框部分为“树”;第二行展示的是重建结果的误差图,从蓝色到红色的颜色图表示从-50cm到50cm的有符号重建误差。

abe88798997544611dddafd84b5332b0.png

图4 在Newer College数据集上,不同方法的重建结果对比

c3bc569ac05663e7386fcd25b651b182.gif

‍图5 在Newer College数据集上,SHINE-Mapping的重建结果

表2为不同方法在Newer College dataset上的重建质量评价结果。可以看到,在真实场景数据集上,相比于其他方法,SHINE-Mapping的重建质量也是最好的。

035731eaa0e91cc773c7367d8c8b3e49.png

表2 不同方法在Newer College数据集上的重建质量对比

下图描述了在MaiCity dataset与Newer College dataset两个数据集实验中,内存消耗与建图质量之间的关系,地图的分辨率从100cm到10cm。从对比结果可以看出,SHINE-Mapping方法可以使用更小的内存资源来重建出质量更高的室外地图。

6754c2cb6d8249dc8b271723cb525943.png

图6 不同方法在内存效率与重建误差上的表现

下图为SHINE-Mapping在KITTI dataset上的重建过程。可以看到,即使是大规模的实际复杂街道场景,该方法依然可以精确地重建出道路的真实样貌。

c3c589a52b0775e78f0a1ae8b762c95c.gif

图7 SHINE-Mapping在KITTI数据集上的重建过程

V

 总结与展望 

本次导读的论文提出了一种基于LiDAR的大规模三维场景建图方法。与基于TSDF的方法不同,SHINE-Mapping方法使用基于八叉树的隐式表示法,将学习到的隐式特征存储在哈希表中,大大缩短了处理时间。其次,该方法将学习到的特征通过一个MLP转换为有符号距离值,并通过Marching Cubes进行显式化网格重建。除此之外,该方法通过对损失函数进行调整,并添加相应的正则化,避免了增量式重建过程中遇到的灾难性遗忘问题。实验结果表明,该方法能够以较小的内存重建出更为准确和完整的三维地图。

VI

 思考与讨论 

Q: SHINE-Mapping方法将局部特征信息存放入八叉树中时,使用了其中的几层呢?又是如何实现快速查找对应的特征信息的呢? 

A: 如下图所示,假设八叉树为11层,SHINE-Mapping方法将最低的三层作为局部特征存放层,即第0,1,2层(分别对应图中的红色、绿色、蓝色方格)。为了能够加速建图速度,SHINE-Mapping将八叉树中第 0,1,2层的局部特征信息存储在哈希表中,并且每一层对应一个哈希表。当需要查询指定点的局部特征时,使用哈希表可以很快得到相应的特征信息。

791bba8f7d9c3faa446833ccc3069386.png

图8 SHINE-Mapping对空间进行网格划分,并得到局部特征信息

Q: 在增量式重建过程中,是否可以使用预训练的MLP作为解码器来得到相应的有符号距离值? 

A: 是的,虽然本文提出的方法可以在训练过程中联合优化八叉树中的局部特征信息以及MLP中的参数,但是在实际增量式重建过程中,作者采用的是预训练的MLP来得到对应位置的有符号距离值,一方面这样可以加快重建的速度,另外一方面,在实验过程中,使用预训练的MLP可以得到更好的重建效果。 

以下是开放性问题,欢迎读者朋友留言讨论: 

Q: SHINE-Mapping在增量式重建的过程中,实际上是增量式地更新空间中的局部特征信息,并在更新完整个地图之后,使用MLP将局部特征信息转换为有符号距离值,然后使用Marching Cubes来显式的构建网格。因此,如果想在建图的过程中,实时地查看重建的网格信息,则需要不断地调用MLP和Marching Cubes,这将会导致实时的计算效率非常低。那么应该如何改进这一方法,或者是否可以使用其他的网格构建方法,使得在快速建图过程中,能够实时地查看重建效果呢?

-- End--

导 读 | 马雪奇

审 核 | 黄惠

编 辑 | 申金

参考文献

[1] Xingguang Zhong, Yue Pan, Jens Behley, Cyrill Stachniss. SHINE-Mapping: Large-scale 3d mapping using sparse hierarchical implicit neural representations. In Proc. of the IEEE Intl. Conf. on Robotics & Automation (ICRA), 2023.

[2] Armin Hornung, Kai M. Wurm, Maren Bennewitz, Cyrill Stachniss, Wolfram Burgard. OctoMap: An efficient probabilistic 3d mapping framework based on octrees. Autonomous Robots, 34:189–206, 2013.

[3] Yue Pan, Yves Kompis, Luca Bartolomei, Ruben Mascaro, Cyrill Stachniss, Margarita Chli. Voxfield: Non-projective signed distance fields for online planning and 3d reconstruction. In Proc. of the IEEE/RSJ Intl. Conf. on Intelligent Robots and Systems (IROS), 2022.

[4] Ignacio Vizzo, Tiziano Guadagnino, Jens Behley, Cyrill Stachniss. Vdbfusion: Flexible and efficient tsdf integration of range sensor data. Sensors, 22(3):1296, 2022.

[5] Dejan Azinović, Ricardo Martin-Brualla, Dan B Goldman, Matthias Nießner, Justus Thies. Neural rgb-d surface reconstruction. In Proc. of the IEEE/CVF Conf. on Computer Vision and Pattern Recognition (CVPR), 2022.

[6] Edgar Sucar, Shikun Liu, Joseph Ortiz, Andrew J. Davison. imap: Implicit mapping and positioning in real-time. In Proc. of the IEEE/CVF Intl. Conf. on Computer Vision (ICCV), 2021.

[7] Zihan Zhu, Songyou Peng, Viktor Larsson, Weiwei Xu, Hujun Bao, Zhaopeng Cui, Martin R. Oswald, Marc Pollefeys. Nice-slam: Neural implicit scalable encoding for slam. In Proc. of the IEEE/CVF Conf. on Computer Vision and Pattern Recognition (CVPR), 2022.

[8] Towaki Takikawa, Joey Litalien, Kangxue Yin, Karsten Kreis, Charles Loop, Derek Nowrouzezahrai, Alec Jacobson, Morgan McGuire, Sanja Fidler. Neural geometric level of detail: Real-time rendering with implicit 3d shapes. In Proc. of the IEEE/CVF Conf. on Computer Vision and Pattern Recognition (CVPR), 2021.

[9] Helen Oleynikova, Zachary Taylor, Marius Fehr, Roland Siegwart, Juan Nieto. Voxblox: Incremental 3d euclidean signed distance fields for on-board mav planning. In Proc. of the IEEE/RSJ Intl. Conf. on Intelligent Robots and Systems (IROS), 2017.

[10] William E. Lorensen, Harvey E. Cline. Marching Cubes: A high resolution 3d surface construction algorithm. In Proc. of the Intl. Conf. on Computer Graphics and Interactive Techniques (SIGGRAPH), pages 163–169, 1987.

[11] Joseph Ortiz, Alexander Clegg, Jing Dong, Edgar Sucar, David Novotny, Michael Zollhoefer, Mustafa Mukadam. isdf: Real-time neural signed distance fields for robot perception. In Proc. of Robotics: Science and Systems (RSS), 2022.

[12] Ignacio Vizzo, Xieyuanli Chen, Nived Chebrolu, Jens Behley, Cyrill Stachniss. Poisson surface reconstruction for LiDAR odometry and mapping. In Proc. of the IEEE Intl. Conf. on Robotics & Automation (ICRA), 2021.

—END—

高效学习3D视觉三部曲

第一步 加入行业交流群,保持技术的先进性

目前工坊已经建立了3D视觉方向多个社群,包括SLAM、工业3D视觉、自动驾驶方向,细分群包括:[工业方向]三维点云、结构光、机械臂、缺陷检测、三维测量、TOF、相机标定、综合群;[SLAM方向]多传感器融合、ORB-SLAM、激光SLAM、机器人导航、RTK|GPS|UWB等传感器交流群、SLAM综合讨论群;[自动驾驶方向]深度估计、Transformer、毫米波|激光雷达|视觉摄像头传感器讨论群、多传感器标定、自动驾驶综合群等。[三维重建方向]NeRF、colmap、OpenMVS等。除了这些,还有求职、硬件选型、视觉产品落地等交流群。大家可以添加小助理微信: cv3d007,备注:加群+方向+学校|公司, 小助理会拉你入群。

f398dc8f212fedf746c1a0b744c1fdd2.jpeg
添加小助理微信:  cv3d007,拉你入群
第二步 加入知识星球,问题及时得到解答

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

学习3D视觉核心技术,扫描查看,3天内无条件退款 1d479dbca79c42b30e5ae75019ce2172.jpeg
高质量教程资料、答疑解惑、助你高效解决问题
第三步 系统学习3D视觉,对模块知识体系,深刻理解并运行

如果大家对3D视觉某一个细分方向想系统学习[从理论、代码到实战],推荐3D视觉精品课程学习网址:www.3dcver.com

基础课程:

[1]面向三维视觉算法的C++重要模块精讲:从零基础入门到进阶

[2]如何学习相机模型与标定?(代码+实战)

[3]ROS2从入门到精通:理论与实战

工业3D视觉方向课程:

[1]机械臂抓取从入门到实战课程(理论+源码)

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

[3]三维点云处理:算法与实战汇总

[4]彻底搞懂基于Open3D的点云处理教程!

[5]3D视觉缺陷检测教程:理论与实战!

SLAM方向课程:

[1]如何高效学习基于LeGo-LOAM框架的激光SLAM?

[1]彻底剖析激光-视觉-IMU-GPS融合SLAM算法:理论推导、代码讲解和实战

[2](第二期)彻底搞懂基于LOAM框架的3D激光SLAM:源码剖析到算法优化

[3]彻底搞懂视觉-惯性SLAM:VINS-Fusion原理精讲与源码剖析

[4]彻底剖析室内、室外激光SLAM关键算法和实战(cartographer+LOAM+LIO-SAM)

[5]ORB-SLAM3理论讲解与代码精析(第2期)

视觉三维重建

[1]彻底搞透视觉三维重建:原理剖析、代码讲解、及优化改进)

自动驾驶方向课程:

[1]目标检测中的视觉Transformer

[2]单目深度估计方法:算法梳理与代码实现

[3]面向自动驾驶领域的3D点云目标检测全栈学习路线!(单模态+多模态/数据+代码)

[4]如何将深度学习模型部署到实际工程中?(分类+检测+分割)

<think>嗯,用户想了解如何构完整的结构或形数据,特别是形数据结构的实现方法。首先,我需要明确“结构”在这里指的是计算机科学中的数据结构,还是形泛基因组中的结构。根据用户提供的引用内容,里面提到了Minigraph-Cactus、Cactus、vg Giraffe等工具,这些是用于构形泛基因组的,所以可能用户的问题更偏向生物信息学中的结构构,但也不排除需要一般性的数据结构知识。 接下来,我需要分解问题。用户的问题分为两部分:完整方法和形数据结构的实现。首先,我需要分别回答这两个部分,同时结合引用中的相关信息。对于形泛基因组的构,可能需要详细说明Minigraph-Cactus等工具的使用流程,而对于一般数据结构,需要讲解邻接矩阵、邻接表等实现方。 然后,考虑到用户可能对两种结构都有兴趣,需要区分清楚。引用中的方法属于特定领域的,而数据结构中的是通用的。需要确保回答中涵盖这两个方面,但可能用户更关注引用中提到的生物信息学方法,所以需要详细说明构形泛基因组的步骤,同时补充一般数据结构的实现。 另外,用户提到“完整”,需要确认是否指完全(每个节点都连接)还是完整的构流程。根据上下文,可能是指后者,即如何完整地构一个结构,无论是生物信息学中的基因组还是一般的数据结构。 在回答时,需要结构清晰,分步骤说明构方法,例如数据准备、模型设计、存储结构、算法实现等。对于形泛基因组,需要引用文献中的工具和流程,比如使用Minigraph-Cactus进行比对和构,Cactus进行多序列比对,vg Giraffe进行形处理,并输出GFA和VCF格。同时,要确保使用正确的LaTeX格,比如变量用$...$,公用$$...$$。 可能还需要比较不同结构的实现方的优缺点,比如邻接矩阵适合稠密,邻接表适合稀疏。在生物信息学中,结构可能更复杂,涉及路径和变异信息,所以需要特定的存储格和算法。 最后,生成相关问题时要覆盖两个方向,比如性能优化、应用场景,以及生物学中的具体应用和工具选择。需要检查LaTeX语法是否正确,例如积分符号用$\int$,变量用斜体,确保引用标识正确添加。</think>### 结构构方法与数据结构实现 #### 一、完整方法 1. **生物信息学中的形泛基因组构** - **数据准备**: 收集多组基因组序列作为输入数据,通常以FASTA格存储[^1]。 - **序列比对**: 使用工具如Minigraph-Cactus进行初始比对,识别共享和特异的序列区域。 - **构模型**: - 通过Cactus工具执行多序列比对,将序列间的差异(如单核苷酸多态性、插入/缺失)表示的节点和边。 - 使用公描述路径权重: $$ w(e_{ij}) = \sum_{k=1}^n \log \frac{p_k(s_i, s_j)}{p_0} $$ 其中$p_k$为序列$s_i$和$s_j$在位置$k$的匹配概率,$p_0$为随机匹配概率[^1]。 - **存储与优化**: 输出为GFA(Graphical Fragment Assembly)或VCF格,支持后续分析工具(如vg Giraffe)进行路径查询和可视化。 2. **通用数据结构构** - **邻接矩阵**: 使用二维数组$A_{n \times n}$存储节点连接关系,适用于稠密,时间复杂度为$O(n^2)$。 - **邻接表**: 通过链表或动态数组存储每个节点的邻居,适用于稀疏,空间复杂度优化至$O(n + m)$($m$为边数)。 - ****: 在路径规划等场景中,通过函数动态生成边关系,例如$f(x) = \{ y \mid y \text{可达自} x \}$。 #### 二、形数据结构的代码实现(Python示例) ```python # 邻接表实现 class Graph: def __init__(self): self.adj_list = {} def add_node(self, node): if node not in self.adj_list: self.adj_list[node] = [] def add_edge(self, u, v, weight=None): self.adj_list[u].append((v, weight)) # 无向需添加反向边 self.adj_list[v].append((u, weight)) # 使用示例 g = Graph() g.add_node('A') g.add_node('B') g.add_edge('A', 'B', weight=3) ``` #### 三、关键技术与挑战 1. **生物信息学** - **复杂性管理**: 基因组结构包含大量重复区域和结构变异,需通过分层聚类降低计算复杂度。 - **分布计算**: 使用Apache Spark或Hadoop处理大规模序列数据,例如比对任务的并行化。 2. **通用结构优化** - **压缩存储**: 对稀疏使用CSR(Compressed Sparse Row)格,减少内存占用。 - **动态更新**: 增量添加节点和边时需平衡查询效率,例如使用跳表(Skip List)替代普通链表。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值