之前了解了很多BEV的相关操作,但是基本上要么是激光和视觉结合,要么是纯视觉完成的2D激光投影这两种,而那种3D Occupancy方法可以利用栅格的方法完成纯视觉占据栅格的生成。《VoxFormer: Sparse Voxel Transformer for Camera-based 3D Semantic Scene Completion》就是这种方法对于被遮挡的物体和场景,人们可以很容易地联想出其完整的3D几何结构,这种吸引人的能力对于AI系统来说是一个至关重要的。为了应对这种挑战,语义场景补全(SSC)任务应运而生,以往的SSC通常以3D点云作为输入,或以密集特征投影将2D图像作为输入来得到3D语义补全结果。但是论文提出了VoxFromer,一个基于Transformer的语义场景补全 (SSC,Semantic Scene Completion) 框架,可以仅从二维图像中预测空间中的体素占据和类别。
VoxFromer的框架采用两阶段设计,首先从深度估计得到一组稀疏的可见和占据的体素 query proposals,然后从稀疏体素生成密集的三维体素。相关的代码已经在Github上开源了。
图1. (a) VoxFormer的示意图,用于基于相机的语义场景补全,仅通过2D图像预测完整的3D几何和语义信息。在根据深度获取体素查询提案后,VoxFormer通过类似MAE的架构生成语义体素[3]。(b) 在SemanticKITTI [5]数据集上与最先进的MonoScene [4]进行不同范围的比较。VoxFormer在安全关键的短距离区域表现更好,而MonoScene在三个距离上表现不佳。相对增益用红色标记。被遮挡区域进一步支持了这一任务的完成。
现有的基于视觉方案的SSC,如MonoScence,使用密集特征投影将2D图像输入提升为3D空间。
然而,这样的投影不可避免地会将可见区域的2D特征分配给空的或被遮挡的体素。例如,被汽车遮挡的空体素仍将获得汽车的视觉特征。结果,生成的3D特征包含许多歧义,无法用于后续的几何补全和语义分割,导致性能不尽如人意。
与 MonoScene 不同,VoxFormer考虑3D到2D交叉注意力来表示 sparse query。所提出的设计受到以下启发:
遮挡区域场景推断:以重建的可见区域作为起点,可以更好地完成不可见区域的三维信息;
稀疏三维空间表示:由于三维空间大量的体素通常是不被占用的,使用稀疏表示而不是密集表示肯定更有效和可伸缩;
VoxFormer的主要贡献如下:
一种新颖的两阶段框架,将图像提升到一个完整的3D体素化语义场景
一种基于2D卷积的新型查询提议(query proposal)网络,可以从图像深度生成可靠的查询
一种新的 Transformer 类似于 sparse-to-dense MAE-like 的结构,产生完整的3D场景表示
VoxFormer 在 SemanticKITTI 的SCC任务上取得SOTA
我们的目标是在车辆前方的一定体积内,仅通过RGB图像来预测一个密集的语义场景。具体而言,我们使用当前和之前的图像作为输入,表示为 I t = { I t , I t ? 1 , … } I_t = \{I_t, I_{t?1}, …\} It?={It?,It?1?,…},并使用输出为一个在时间戳 t t t处以车辆为坐标系定义的体素网格 Y t ∈ { c 0 , c 1 , … , c M } H × W × Z Y_t ∈ \{c_0, c_1, …, c_M\}^{H×W×Z} Yt?∈{c0?,c1?,…,cM?}H×W×Z,其中每个体素要么为空(用 c 0 c_0 c0?表示),要么被某个语义类别(在 { c 1 , c m , … , c M } \{c_1, c_m, …, c_M\} {c1?,cm?,…,cM?}中)占据。这里 M M M 表示感兴趣的类别总数, H 、 W 、 Z H、W、Z H、W、Z 分别表示体素网格的长度、宽度和高度。总之,总体目标是学习一个神经网络 Θ Θ Θ,使得生成的语义体素 Y t = Θ ( I t ) Y_t = Θ(I_t) Yt?=Θ(It?)尽可能接近真实值 Y ^ t \hat{Y}_t Y^t?。需要注意的是,之前的SSC工作通常考虑3D输入[2]。与我们最相关的工作[4]考虑的是单个图像作为输入,这是我们的特殊情况。
受到重建-幻觉和3D空间稀疏性的启发,我们构建了一个两阶段的框架:基于CNN的第一阶段提出了一组稀疏的体素查询,从图像深度中关注可见和占据的体素,而不是不可见和空的体素;基于Transformer的第二阶段使用类似MAE的架构,通过体素到图像的交叉注意力来加强所提出体素的特征化,然后使用自注意力处理整个体素集合,以实现体素之间的交互。
我们基于Transformer从2D图像中学习SSC的3D体素特征,如图2所示:我们的架构从RGB图像中提取2D特征,然后使用一组稀疏的3D体素查询来索引这些2D特征,通过相机投影矩阵将3D位置与图像流链接起来。具体而言,体素查询是一种3D网格形状的可学习参数,通过注意机制[67]从图像中查询3D体积内的特征。我们的框架是一个由类别不可知的提议和类别特定分割组成的两阶段级联,类似于[68]:第一阶段生成类别不可知的查询提议,第二阶段使用类似于MAE的架构将信息传播到所有体素。最终,体素特征将被上采样用于语义分割。
图2. VoxFormer的整体框架。给定RGB图像,通过ResNet50 [61]提取2D特征,并通过现成的深度预测器估计深度。校正后的估计深度使得类别无关的查询提议阶段成为可能:位于占用位置的查询将被选中与图像特征进行可变形交叉注意力。随后,通过可变形自注意力添加掩码标记以完成体素特征。经过改进的体素特征将被上采样并投影到输出空间进行逐体素语义分割。请注意,我们的框架支持单个或多个图像的输入。
具体步骤如下:
我们预定义了一共 N q N_q Nq?个体素查询,作为一个3D网格形状可学习参数 Q ∈ R h × w × z × d ( N q = h × w × z ) Q ∈ \mathbb{R}^{h×w×z×d}(N_q = h × w × z) Q∈Rh×w×z×d(Nq?=h×w×z),如图2左下角所示,其中 h × w × z h × w × z h×w×z 是其空间分辨率,低于输出分辨率 H × W × Z H × W × Z H×W×Z 以节省计算资源。注意, d d d表示特征维度,与图像特征的维度相同。更具体地说, Q Q Q中位于 ( i , j , k ) (i, j, k) (i,j,k)位置的单个体素查询 q ∈ R d q ∈ \mathbb{R}^d q∈Rd负责对应的体素。每个体素对应于现实世界中的一个尺寸为 a a a的体素。同时,体素查询是在自车坐标系中定义的,并且在注意力阶段中将添加可学习的位置嵌入到体素查询中,遵循现有的2D BEV特征学习方法[65]。
虽然一些体素查询被选择用于关注图像,但剩余的体素将与另一个可学习参数相关联,以完成3D体素特征。为了简洁起见,我们将这种可学习参数称为掩码标记[3],因为从 Q Q Q中未选择的体素类似于从 Q Q Q中掩码。具体而言,每个掩码标记 m ∈ R d m ∈ \mathbb{R}^d m∈Rd是一个可学习的向量,表示要预测的缺失体素的存在。位置嵌入也被添加以帮助掩码标记意识到它们的3D位置。
我们的第一阶段根据深度确定要查询的体素:占据的体素值得仔细关注,而空的体素可以与群体分离。给定一个2D的RGB观测,我们首先根据深度估计获得场景的2.5D表示。然后,我们通过占据预测获取3D查询位置,帮助纠正不准确的图像深度。
我们利用现成的深度估计模型,如单目深度[69]或立体深度[70],直接预测每个图像像素 ( u , v ) (u, v) (u,v)的深度 Z ( u , v ) Z(u, v) Z(u,v)。然后,深度图 Z Z Z将被反投影为一个3D点云:一个像素 ( u , v ) (u, v) (u,v)将通过以下方式转换为3D中的 ( x , y , z ) (x, y, z) (x,y,z):