工作概括#
输入一张 RGB 图像,在不到 1 秒内,通过一个前馈网络直接预测一个 3DGS 场景,允许从输入视角附近生成清晰的新视图。
输出表示:双层高分辨率 3D Gaussian#
SHARP 没有使用球谐函数来建模视角相关颜色,因为球谐系数会显著增大输出规模。每个高斯只输出一个 RGB 颜色。每个三维高斯由 14 个属性表示:
| 属性 | 维度 | 含义 |
|---|---|---|
| Position | 3 | 三维中心位置 |
| Scale | 3 | 三个方向上的尺度 |
| Rotation | 4 | 四元数旋转 |
| Color | 3 | RGB 颜色 |
| Opacity | 1 | 不透明度 |
| 总计 | 14 | --- |
输入图像会调整为 ,Gaussian 输出分辨率是输入的一半: 每个像素位置输出两层 Gaussian,
也就是每张图片生成约118 万个 Gaussian。
这里的“两层”:
- 第一层主要描述输入图像中直接可见的表面;
- 第二层可以描述部分遮挡区域、边缘后方内容,以及透明、反射等难以由单一深度表达的现象。
模型架构分析#
SHARP 包含 7 个模块,其中 4 个是可学习的模块:
1.预训练的编码器(图中的 Image Encoder),用来做特征提取
2.深度解码器(图中的 Depth Decoder),用来输出两个不同的深度层
3.深度调整模块(图中的 Depth Adjustment)
4.高斯解码器(图中的 Gaussian Decoder),用于优化所有的高斯特征
图中的三个蓝色模块都是可微的,最终渲染图像可以计算损失并做梯度回传。

1. 模块一:Image Encoder#
SHARP 使用预训练的 Depth Pro 作为 Image Encoder,输入图像为:
Image Encoder 输出四个不同分辨率的特征图:
Depth Pro 的编码部分包含两条路径:
低分辨率全图编码器:处理缩小后的完整图像,负责全局场景理解(训练时解冻)。
图像块编码器:处理高分辨率局部 patch,负责细节提取(训练时冻结)。
2. 模块二:Depth Decoder#
SHARP 使用的 Depth Decoder 基于 DPT(Depth Prediction Transformer)。它接收四个多尺度特征:
与普通 Depth Pro 不同,作者复制了最后的输出卷积层,使其输出两个深度通道:
可以写为:
其中:
- :第一层深度,主要表示可见表面;
- :第二层深度,用于补充遮挡边界、次级表面和复杂成像效果。
深度解码器约有 20M 参数,训练时完全解冻。
为什么要搞两层深度,并解冻参数?
作者认为普通单目深度模型的目标与新视图合成并不完全一致。对于玻璃、镜面、反射物体、透明表面、模糊或细小结构等,“物理上的深度”不一定是生成最佳新视图所需要的深度。也就是说,模型学到的不是传统意义上的几何深度,而是更适合将图像转换成可渲染 3D Gaussian 的深度结构。
3. 模块三:Depth Adjustment#
在训练中引入 Depth Adjustment 模块是为了解决这样的问题:
同一张单目图像可能对应多种合理的三维结构。单目深度网络通常倾向于输出某种“平均解”,但平均深度在新视图渲染时可能产生重影、纹理撕裂、边缘错位、浮空等问题。
该模块是一个约 2M 参数的小型 U-Net。训练时,它同时接收:
- 网络预测的逆深度 ;
- 训练数据中的真实逆深度 。
然后预测一个逐像素尺度图:
调整后的双层深度为:
这里可以把 理解为一个空间变化的深度缩放因子。理想情况下:
只有当预测深度中的歧义确实影响新视图合成时,调整模块才应该偏离 1。
该模块只在训练时使用真实深度,因此不会构成推理时的信息泄漏。推理时没有真实深度,因此作者直接将它替换为恒等映射:
它的作用不是成为最终推理流程的一部分,而是帮助网络在训练阶段获得更容易优化的监督信号。论文将这一思想类比为条件 VAE 的后验网络。C-VAE 的后验利用真实答案解释任务中的歧义;SHARP 的调整模块利用真实深度产生一个受限制的尺度图,通过强正则化,迫使这个尺度图只携带“解决歧义所需的最少信息”。最终,主干深度网络会逐渐学会吸收这些修正。
正则化具体如下,作者对尺度图使用两类约束:
1.要求尺度接近 1:
2.要求尺度图在多个尺度上平滑:
所以调整模块不能任意“抄写”真实深度,只能做幅度较小且空间平滑的校正。
4. 模块四:Gaussian Initializer#
深度预测完成后,SHARP 会先通过一个非学习模块 Gaussian Initializer 生成“基础高斯”作为初始化。先把输入图像和双层深度从 降到 ,其中RGB 使用平均池化,深度使用最小池化。然后按下面的规则初始化 Gaussian:
1.位置初始化:将每个深度像素反投影到一个归一化三维空间中。
2.尺度初始化:Gaussian 尺度与深度成正比。
3.颜色初始化:颜色直接来自输入图像。
4.旋转初始化:单位四元数。
5.不透明度初始化
5. 模块五:Gaussian Decoder#
该模块预测残差,用于精修初始化的 Gaussian。
Gaussian Decoder 接收:
- 多尺度图像特征 ;
- 输入图像 ;
- 预测的双层深度 。
输出所有 Gaussian 属性的修正量:
输出形式为:
其中包含:
Gaussian Decoder 采用 DPT 风格的多尺度解码结构,但作者将最后一个上采样模块替换成了专门的高维预测头。该模块约有 7.8M 参数,从头训练。
6. 模块六:Gaussian Composer#
这个模块是解决修正量具体如何作用于基础高斯。作者针对不同属性,先映射到适合优化的无约束空间,再加入残差,最后经过激活函数映射回合法范围:
其中:
- :属性特定的激活函数;
- :将初始化值映射到激活前空间;
- :控制残差幅度的缩放系数。
7. 模块七:Gaussian Renderer#
可微分的高斯渲染器,高速渲染得到图像。
训练#
端到端训练整个网络。先用合成数据训练,然后进行自监督微调。
自监督微调用的方法是“视图交换”:
1.用第一阶段模型从真实图像生成 3D Gaussian;
2.从稍微偏移的视角渲染一个伪新视图;
3.将这个伪新视图作为新的网络输入;
4.把原始真实图像作为目标新视图。