0. 前言#
在具身智能的语义感知的文章中,我们在 2.4 节中提到了用高斯方法进行语义表示:
这里我们再具体介绍一下语义场景补全(SSC)的概念和分支。
1. SSC 概念#
SSC(Semantic Scene Completion)的意思是语义场景补全,目的是从不完整的观测数据中重建出完整且具有语义标签的三维场景。简单来说就是给定单帧或多帧的图像,预测出场景的 3D 重建表示已经每一部分的语义分类信息。
近年来,SSC 的主流输入方式是多模态输入,如 RGB 图像、深度图、点云图、体素、TSDF(Truncated Signed Distance Function)表示等。融合不同模态的感知信息有助于弥补单模态下的视角遮挡、几何歧义和语义模糊等问题。
2. MonoScene#
MonoScene 与之前的 SSC 相关工作的区别是,它是第一个不依赖于深度相机或雷达传感器作为输入的模型。MonoScene 只需要输入单帧 RGB 图像,即可实现端到端的 SSC,并且同时支持室内和室外场景。
原论文在这里:《MonoScene: Monocular 3D Semantic Scene Completion》
1. 主体框架#
MonoScene 的主体框架如图所示:

输入为单帧的 RGB 图像,输入到一个 2D Unet 中提取不同分辨率下的图像特征;接着送入 FLoSP(Features Line of Sight Projection)模块,将 2D 特征转换为 3D 特征;接着经过 3D Unet 加强深度维度之间的联系,在其中插入 3D CRP(Context Relation Prior)模块用来提升空间语义的响应能力;最后在补全头(Completion head)中输出 3D 语义。
2. 2D Unet 模块#
这里使用的 2D Unet 是基于 EfficientNet-B7 的预训练模型,目的就是提取原始图片在不同分辨率下的特征(卷积次数不同)。
3. FLoSP 模块#
FLoSP(Features Line of Sight Projection)叫做特征视线投影,是 MonoScene 的核心模块,如图所示:

FLoSP 模块的主要目的就是将 2D 特征变成 3D 特征,但比较容易想到的是从 3D 特征投影到 2D 特征,于是 MonoScene 就寻找了一个 3D 到 2D 的逆过程,具体实现如下:
首先,通过前面的 2D Unet 将原始图像提取成不同分辨率的特征图(例如 2x2 卷积,卷积一次缩小一倍,卷积两次则缩小两倍),不同的分辨率叫做不同的尺度(scale),尺度集合为 \(S={1,2,4,8}\),即原图、\(\frac{1}{2}\)、\(\frac{1}{4}\)、\(\frac{1}{8}\) 下采样。得到的不同尺度 \(s\) 的特征图记为 \(F^s_ {2D} \)。
之后,对于目标 3D 体素网格中的每个体素中心 \(v\),通过相机内参和外参的调节,投影到 2D 图像平面(\(\rho(·)\))。在每个尺度的特征图上,对投影点 \(p\) 进行双线性插值(即 \(x\)、\(y\) 轴分别插值,这里的插值指的是对于投影点左右的相邻像素的特征值进行加权平均),若 \(p\) 超过图像范围,则置零向量。插值后得到体素在特征图上的采样(\(\Phi(·)\))。
对同一个体素,融合所有尺度的采样特征,从而得到该体素的 3D 特征。将所有的体素计算完毕后,即可得到整体环境的 3D 特征。
之所以能够实现 3D 到 2D 的逆过程,是因为选择了不同的尺度,使得分辨率高的尺度能够获取图像的细节,而分辨率低的尺度能够获取图像的语义信息,将各种分辨率的信息融合,则可以还原出比较真实的特征。再将此特征通过投影的反向作用在体素上,则可以还原三维特征。
4. 3D Unet 与 3D CRP 模块#
这个模块的细节如图所示:

这里的 3D Unet 是一个自定义的浅层网络,只有两层。通过使用 3D ASPP 和 Softmax 层的补全头,从 3D Unet 输出的特征处理中获得 SSC 的输出 \(\hat{y}\)。

3D CRP(Context Relation Prior)是 3D 上下文关系先验层,它的作用是解决因遮挡、视野限制和投影歧义导致的空间-语义不一致问题。
传统 3D 卷积的感受野有限,难以捕捉大范围的语义关联,而 3D CRP 通过建立体素间的关系矩阵,学习场景中所有所有体素对的语义相关性,使网络能够基于全局上下文推理遮挡区域的语义。
3D CRP 在 3D Unet 的瓶颈层,因此输入为分辨率较低的特征图。将特征图空间划分为边长为 \(s\) 的超体素(Super Voxel),则每个超体素包含 \(s^3\) 个体素。关系矩阵 \(\hat{A}^m\) 的每个元素都描述当前体素与超体素内其他体素的语义关系,如图所示:

图(a)中表示两个体素间的四种关系:\(f_ s\)(空空相似)、\(f_ d\)(空绿相异)、\(o_ s\)(绿绿相似)、\(o_ d\)(黄绿相异),空指的是空白语义,黄绿是两种不同的语义。
图(b)中表示一个体素与超体素的语义关系,为了降低开销,只预测该体素与超体素中体素有什么关系,既不用表示重复值,也不用管每个体素的具体位置。这相当于一个多标签分类,得到的特征与每个体素原始的特征拼接,即相当于对原始局部信息的全局补充。
这样的过程也可视作一种空间的注意力机制。
5. 网络训练和实验#
网络和代码部分在这里:MonoScene/ at master · astra-vision/MonoScene
标准交叉熵损失(Cross-Entropy Loss,\(L_ {ce}\)):逐个体素优化类别预测概率,约束局部体素的语义准确性
场景类亲和损失(Scene-Class Affinity Loss,\(L_ {scal}\)):解决类别不平衡和全局语义一致性问题
视锥比例损失(Frustums Proportion Loss,\(L_ {fp}\)):解决单视角遮挡的歧义问题,通过约束图像局部区域对应视锥内的类别分布间接监督
关系损失(Relation Loss,\(L_ {rel}\)):监督 3D CRP 模块,学习体素间的空间-语义关系
最终总的损失函数为以上损失函数的加权和。
视锥比例损失的示意图如下:

3. Symphonies#
Symphonies(Scene-from-Insts),意思是从实例(物体)中获取场景。
在它之前的 SSC 方法(如 MonoScene)通常依赖体素级特征聚合和逆透视映射(IPM),而忽略了以实例为中心的语义(instance-centric semantics)和更广泛的上下文(broader context),因此 Symphonies 通过上下文实例查询(Contextual Instance Queries)和串行注意力机制(Serial Instance-Propagated Attentions)实现以实例为中心的 SSC 方法,如图:

原论文在此:《Symphonize 3D Semantic Scene Completion with Contextual Instance Queries》
1. 主体框架#
单独的体素建模很难考虑更广泛的上下文,而 Symphonies 的建模弥补了低级表示与高级语义监督差距,加强了特征从 2D 图像到 3D 场景的迁移。

如图,图像首先输入骨干网络(ResNet-50)用来特征提取,然后输入到实例感知图像编码器(Instance-Aware Image Encoder)中提取多尺度图像特征 \(F^{2D}\),这个 Encoder 是可变形的 Transformer encoder。与 MonoScene 不同的是,实例感知编码器能自适应地聚焦实例区域,而不是固定的尺度。由于进行过 2D 全景分割的预训练,该编码器能够在没有实例级监督的情况下有效获取实例信息。
之后将其输入到 Symphonies Decoder 中,其中包含串行的多个交叉注意力和自注意力机制,最终可以通过实例查询(Instance Queries)建立 2D 到 3D 的网络。
最后将网络接到分割头(Segmentation Head)上输出每个体素的语义信息。
2. Voxel Proposal Layer#
Voxel Proposal Layer 是体素提议层,它的作用是通过深度预测信息(Depth Prediction)来校正初始的体素网格,如图:

体素提议层的输入之一是原始图片经过特征提取后的多尺度图像特征(Multi-Scale Image Feature),这里的多尺度图像特征主要包含不同程度的实例信息。
同时,可学习嵌入被用于稀疏的实例查询(Instance Queries)集合和体素场景表示(Voxels)中,将体素场景表示和多尺度图像特征输入到体素提议层中进行深度校正。体素提议层使用隐式表面上的图像特征初始化建议后体素(Proposed Voxels)。
3. Symphonies Decoder#
Symphonies Decoder 层通过引入串行注意力传播模块(Serial Attention Propagation),在多尺度特征、实例查询和场景特征间建立迭代交互:
- 实例-图像(Instance-Image)交叉注意力
- 场景-实例(Scene-Instance)交叉注意力
- 场景(Scene)自注意力
- 实例-场景(Instance-Scene)交叉注意力
- 实例(Instance)自注意力
这个迭代过程不断地通过实例查询,引导图像特征传播到场景特征,同时从两种模态中聚合实例语义。最后输出到分割头中进行体素的语义分类。
4. 训练过程#
这里选用的损失函数和 MonoScene 类似,数据与代码在这里:hustvl/Symphonies
4. EmbodiedOcc#
EmbodiedOcc 意思是具身占用预测,它的特点是数据输入方式偏具身方式,即是实时连续变化的图像序列,根据连续输入的图像,实时预测空间的占用,如图:

原论文:《EmbodiedOcc: Embodied 3D Occupancy Prediction for Vision-based Online Scene Understanding》
EmbodiedOcc 着眼于室内场景,在此之前的方法基本都是采用单帧或多帧的完整视图进行离线的全景感知,但实际情况中智能体是渐进探索未知环境的,具身任务需要在此条件下实时更新局部观测,因此为了实现在线的具身探索,提出了 EmbodiedOcc 方法。
1. 主体框架#

如图所示,输入是随时间而变化的,每个时间节点的输入都是在上一个节点的基础上移动了一部分,二者之间有联系的部分也有新增的部分,当一个场景被重复探索时,应该对这个场景的预测更加准确,因此需要保证模型具有一定的记忆性。
EmbodiedOcc 的场景表示是继承的 GaussianFormer,因此同样使用 3D 高斯,映射到体素占用时使用的也是 Gaussian Splatting 方法。
具体来说,首先将 \(T\) 时刻的图像输入(\(I_ {mono}\))放入预训练的深度预测模型(Pretrained Depth Model)得到深度图 \(D_ {metric}\),将其和高斯查询向量(Gaussians to Queries)输入到深度预测层(Depth Prediction),使得每个高斯向量与对应的深度感知(Depth Aware)向量拼接,使得 3D 高斯带有深度信息。
同时将 \(I_ {mono}\) 放入 Image Encoder 中提取多尺度特征,这里的多尺度特征也是以实例为主进行的 3D 高斯初始化。经过 Self-Encoding 和 Image Cross-Attention 后,即可得到一组局部的高斯表示。这个过程与 GaussianFormer 中的方法类似。
之后将深度感知查询与局部高斯表示送入可信度细化层(Confidence Refinement)从而更新整体的高斯表示。
2. 深度预测层#
图像输入到深度预测层中会进入一个深度感知分支(Depth-Aware Branch),如图所示:

沿着特定射线,分布在真实深度点前面的高斯可能会对空语义进行建模(如高斯 A);而分布在真实深度点后面但距离太远的高斯需要更多信息来指导它们的更新(如高斯 C);只有紧密分布在真实深度点后面的高斯才可能会对有效语义进行建模(如高斯 B)。
3. 局部高斯表示#
与 GaussianFormer 方法类似,使用单帧或多帧图像可以建立三维场景的完整占用表示,而借用这个框架输入单帧图像,则可以建立局部的高斯表示,如图为 GaussianFormer 的框架:

4. 可信度细化层#
这里引入了可信度,目的是使高斯表示在更新时,能够针对未知的区域进行重点更新,而已有的区域则少些重复更新,如图:

随机高斯区域可信度为 0,而有效高斯区域可信度为 0-1 的数字。当建立了一个局部表示后(图中蓝色点),转一个角度后再建立新的局部表示(图中黄色梯形区域),原来的蓝色点稍微更新(Slightly Updated),而未知区域(绿色点)则有效更新(Efficiently Updated)
5. 训练和实验#
代码和数据在这里:YkiWu/EmbodiedOcc
5. 参考文献#
1.如何搭建Tesla Occupancy Network之MonoScene( Monocular 3D Semantic Scene Completion) - 知乎
3.基于视觉的3D Occupancy论文阅读:MonoScene等最新文章!
4.【论文阅读】Symphonies(Scene-from-Insts) - 知乎
5.CVPR'24开源 | Symphonies:深入自动驾驶中的3D语义场景补全 - 哔哩哔哩
6.腾讯元宝