这篇文章对标的方法主要是传统的基于规则的Next-Best-View (NBV) 策略和现有的基于学习的NBV策略。现有方法的缺点包括:
- 基于规则的NBV策略:依赖于经验设计的视角选择标准和手工制作的动作空间,如半球形空间,这限制了其对未见场景的泛化能力。
- 基于学习的NBV策略:虽然有一些工作尝试通过学习来改进NBV策略,但它们通常局限于不切实际的设置,如以物体为中心的捕捉和有限的动作空间,导致3D重建不完整。
这篇文章解决了如何设计一个能够在任何空间中探索并且能够泛化到未见建筑尺度几何体的NBV策略的问题。创新点包括:
- 扩展动作空间:将传统的有限动作空间(如半球形空间)扩展到5D自由空间,包括一个大约20m×20m×10m的位置子空间和一个全方位的方向子空间。
5D自由空间是指无人机或机器人可以在三维空间中自由移动,并且可以在任意方向上旋转。
5D包括:
位置:在三维空间中的位置,通常用三个坐标表示(x, y, z)。
方向:在三维空间中的方向,通常用两个角度表示(偏航角yaw和俯仰角pitch)。
方向子空间:
偏航角(yaw):绕垂直轴(z轴)旋转的角度。
俯仰角(pitch):绕水平轴(x轴或y轴)旋转的角度。
20米×20米×10米的位置子空间
指无人机可以在一个20米长、20米宽、10米高的空间内自由移动。这个空间的大小是根据常见的建筑尺度来设定的,确保无人机可以覆盖大多数建筑物的表面。越大的空间计算复杂度越高,这个尺寸是一个折中的选择,既可以覆盖大多数建筑物,又不会显著增加计算复杂度。
- 多源状态嵌入:提出了一种新的多源状态嵌入,包括几何、语义和动作表示,以提高跨数据集的泛化能力。包括三个部分,将它们输入MLP中:
- 几何表示:从深度图生成的概率性3D网格,记录每个3D体素被扫描到的概率。
- 语义表示:从RGB图像提取的语义信息,帮助无人机理解环境中的物体。
- 动作表示:编码的历史动作序列,帮助策略理解当前的扫描进度。
概率性3D网格是一种3D表示方法,其中每个体素(3D空间中的一个小立方体)都有一个概率值,表示该体素被扫描到的可能性。与简单的二值3D网格(每个体素要么被占据,要么空闲)不同,概率性3D网格可以表示不确定性,即某些体素可能已经被扫描到,但还有一些体素尚未被扫描到。
通过深度图生成概率性3D网格的过程如下:
从深度图生成3D点云:使用深度图、相机内参和相机姿态,将2D像素反投影到3D空间,生成3D点云。
体素化:将生成的3D点云体素化,即将3D空间划分为小的立方体(体素),并记录每个体素的占据状态。
更新概率性3D网格:使用Bresenham线算法,计算相机视角和3D点云端点之间的射线路径,并根据射线通过的体素更新其占据概率。具体来说,使用对数几率(log-odds)表示法来更新每个体素的占据概率。
生成概率性3D网格的作用主要有以下几点:
表示扫描进度:概率性3D网格可以准确地表示当前的扫描进度,哪些区域已经被扫描到,哪些区域尚未被扫描到。
指导策略:通过概率性3D网格,策略可以更好地理解当前的扫描状态,从而更准确地预测下一个最佳视角。
处理不确定性:概率性3D网格可以处理不确定性,即某些体素可能已经被扫描到,但还有一些体素尚未被扫描到,这有助于策略在扫描过程中做出更合理的决策。
历史动作嵌入的主要作用是帮助策略理解当前的扫描进度。具体来说,它提供了以下信息:
扫描路径:通过历史动作嵌入,策略可以知道无人机已经扫描过哪些区域,从而避免重复扫描。
扫描进度:策略可以估计当前的扫描进度,即已经覆盖了多少区域,还有多少区域需要扫描。
未来预测:基于历史动作嵌入,策略可以预测未来的扫描路径,从而更高效地规划下一个最佳视角。
具体步骤:
记录历史动作:在每个时间步(即每次无人机移动到一个新的视角),记录当前的动作(位置和方向)
序列化动作:将这些动作按时间顺序排列成一个序列。
编码动作序列:使用一个线性层将动作序列编码成一个固定长度的向量。这个向量就是历史动作嵌入(Action Embedding)。
- 通用奖励函数和分布式训练过程:设计了通用的奖励函数,并开发了分布式训练过程,以提高泛化能力。
通用的奖励函数是指一种设计用于优化NBV策略的奖励机制,它能够在不同的场景和数据集上通用,而不需要针对每个特定场景进行调整。这种奖励函数的设计目标是鼓励策略在有限的决策预算内最大化3D重建的覆盖率和效率。
实验结果表明,该策略在未见建筑尺度物体上的覆盖率分别达到了98.26%和97.12%,优于现有解决方案。
模型的输入输出
输入:
- RGB图像
- 深度图
- 相机姿态(包括位置和方向)
输出:
- 下一个最佳视角的位置和方向
模型结构
模型结构主要包括以下几个部分:
-
观察空间:
- RGB图像
- 深度图
- 相机姿态(位置和方向)
-
动作空间:
- 相机位置(x, y, z)
- 相机角度(偏航角和俯仰角)
-
状态嵌入:
- 几何表示:从深度图生成的概率性3D网格
- 语义表示:从RGB图像提取的语义信息
- 动作表示:编码的历史动作序列
-
策略网络:
- 输入:状态嵌入
- 输出:参数化动作空间的正态分布
-
奖励函数:
- 覆盖率的变化
- 碰撞惩罚
- 路径效率惩罚
通用的奖励函数的设计
通用的奖励函数主要包括以下几个部分:
-
覆盖率的变化:
- 定义:覆盖率(Coverage Ratio, CR)是指在3D重建过程中,已经被扫描到的体素(voxel)占所有需要扫描的体素的比例。
- 奖励:奖励函数的主要部分是覆盖率的变化。具体来说,每次无人机移动到新的视角并进行扫描后,计算新的覆盖率,然后计算覆盖率的变化量作为奖励。公式如下:
其中, 是当前时间步的覆盖率, 是前一个时间步的覆盖率。
-
碰撞惩罚:
- 定义:在自由空间探索中,无人机可能会发生碰撞。为了避免这种情况,奖励函数中添加了碰撞惩罚。
- 惩罚:如果无人机发生碰撞,奖励函数会返回一个负的奖励值,并且终止当前的扫描任务。
-
路径效率惩罚:
- 定义:为了提高扫描效率,奖励函数还考虑了路径效率。如果无人机在扫描过程中采集了过多的关键帧(keyframe),超过了某个经验阈值,奖励函数会返回一个负的奖励值。
- 惩罚:具体来说,如果采集的关键帧数量超过了某个阈值,奖励函数会返回一个负的奖励值,以鼓励策略更高效地完成扫描任务。
奖励函数的优化
为了优化这个通用的奖励函数,研究人员使用了**近端策略优化(Proximal Policy Optimization, PPO)**算法。PPO是一种常用的强化学习算法,能够在并行环境中高效地进行策略优化。
总结
通用的奖励函数的设计目标是鼓励策略在有限的决策预算内最大化3D重建的覆盖率和效率。它通过覆盖率的变化、碰撞惩罚和路径效率惩罚来实现这一目标。这种设计使得奖励函数能够在不同的场景和数据集上通用,而不需要针对每个特定场景进行调整。
实现全过程
-
数据预处理:
- 从RGB图像和深度图生成几何表示(概率性3D网格)。
- 从RGB图像提取语义表示。
- 编码历史动作序列。
-
状态嵌入生成:
- 使用3D卷积网络对几何表示进行编码。
- 使用2D卷积网络对语义表示进行编码。
- 将几何嵌入、语义嵌入和动作嵌入拼接在一起,生成最终的状态嵌入。
-
策略网络:
- 使用多层感知机(MLP)网络对状态嵌入进行处理,输出动作空间的正态分布参数。
- 从策略网络输出的分布中采样下一个动作。
-
奖励计算:
- 计算覆盖率的变化作为主要奖励。
- 添加碰撞惩罚和路径效率惩罚。
-
训练过程:
- 使用近端策略优化(PPO)算法进行训练。
- 在NVIDIA Isaac Gym模拟器中进行训练,使用Houses3K数据集进行训练和评估。
-
评估:
- 在Houses3K测试集和OmniObject3D数据集上进行评估,计算覆盖率、AUC和重建精度。
实验结果
实验结果表明,该策略在未见建筑尺度物体上的覆盖率分别达到了98.26%和97.12%,优于现有解决方案。具体结果如下:
-
Houses3K测试集:
- 平均AUC:91.19%
- 最终覆盖率:98.26%
- 重建精度:0.37 cm
-
OmniObject3D数据集:
- 平均AUC:88.63%
- 最终覆盖率:97.12%
- 重建精度:0.33 cm
此外,该策略在非建筑类别(如动物、卡车、恐龙)和室内场景上也表现出色,展示了其强大的泛化能力。