原文链接:https://arxiv.org/abs/2409.02382
简介:本文提出了GGS,一种可泛化的高斯溅射方法,可在自动驾驶中的大视角变化下进行真实渲染。由于自动驾驶中的图像通常在单一车道上收集,这种有限的训练视角使得模型难以渲染不同车道下的图像(从而难以开发完整的自动驾驶仿真系统)。本文引入虚拟车道生成模块,可在没有多车道数据集的情况下实现高质量的车道切换(生成切换车道后的图像)。此外,还设计了扩散损失监督虚拟车道图像的生成,以解决缺乏虚拟车道数据的问题。最后,提出深度细化模块,优化GGS中的深度估计。
0. 概述
本文方法基于泛化模型进行优化,如图所示。输入4帧图像,在多视图深度细化模块中引入邻域特征,以更好地处理遮挡场景。此外,引入更多的全局信息,使用MVS(多视图立体)优化预测的深度图。在虚拟车道生成模块中,本文引入虚拟车道的概念,通过来回切换来解决无多车道数据的问题,使模型能灵活地切换车道。此外,还提出多车道扩散损失监督新视图合成。
1. 背景——MVSplat
MVSplat是可泛化的3D高斯溅射方法,其使用Transformer结构,利用跨视图注意力为每个输入视角建立代价张量,并使用U-Net为每个像素预测深度和高斯参数。3D高斯参数包括中心位置
x
x
x,尺度
s
s
s,旋转角
q
q
q,不透明度
α
\alpha
α和颜色
c
c
c。给定预测的深度图
D
D
D和相机投影矩阵
P
P
P(其中内参为
K
K
K),像素
p
x
p_x
px可按下式被反投影到3D空间:
x
p
x
=
Π
P
−
1
(
p
x
,
D
)
x_{p_x}=\Pi^{-1}_P(p_x,D)
xpx=ΠP−1(px,D)
其中
Π
\Pi
Π表示反投影操作,
x
p
x
x_{p_x}
xpx为像素对应的3D位置。不透明度
α
\alpha
α由匹配置信度直接表达。剩余的高斯参数由编码的特征解码:
s
p
x
=
S
o
f
t
p
l
u
s
(
h
s
(
Γ
(
p
x
)
)
)
q
p
x
=
N
o
r
m
(
h
q
(
Γ
(
p
x
)
)
)
c
p
x
=
S
i
g
m
o
i
d
(
h
c
(
Γ
(
p
x
)
)
)
s_{p_x}=\mathtt{Softplus}(h_s(\Gamma(p_x)))\\ q_{p_x}=\mathtt{Norm}(h_q(\Gamma(p_x)))\\ c_{p_x}=\mathtt{Sigmoid}(h_c(\Gamma(p_x)))
spx=Softplus(hs(Γ(px)))qpx=Norm(hq(Γ(px)))cpx=Sigmoid(hc(Γ(px)))
其中 Γ \Gamma Γ表示高维特征向量, h s , h q , h c h_s,h_q,h_c hs,hq,hc分别为尺度头、旋转头和色彩头。
2. 多视图深度细化模块
本文使用多视图深度细化模块来增强MVSplat,从而生成更精确的3D高斯。使用邻域帧内通过Agisoft Metashape重建的反投影点云作为输入U-Net的额外颜色特征。邻域特征表达为
F
n
e
i
g
h
b
o
r
i
=
{
F
m
∣
m
∈
[
i
−
k
,
i
+
k
]
}
F_{neighbor_i}=\{F_m|m\in[i-k,i+k]\}
Fneighbori={Fm∣m∈[i−k,i+k]}
其中 i i i为帧序号, F m F_m Fm为第 m m m帧的颜色特征, k k k为邻域距离。
邻域颜色特征与深度特征通过拼接融合,并通过UNet和高斯参数解码器得到高维高斯参数:
d
e
p
r
e
f
=
U
(
F
n
e
i
g
h
b
o
r
i
,
d
e
p
i
)
dep_{ref}=\mathcal U(F_{neighbor_i},dep_i)
depref=U(Fneighbori,depi)
其中 U \mathcal U U表示UNet。这种引入邻域帧颜色特征的方法,可以提升泛化模型在障碍遮挡下的新视图合成能力。
此外,为细化深度,还提出基于置信度的方法。3D高斯的透明度越低,则预测深度的置信度越低。当置信度较低时,通过Agisoft Metashape重建反投影的深度图,修正预测深度:
d
e
p
i
=
{
β
d
e
p
^
i
+
(
1
−
β
)
D
i
若
α
i
<
α
d
e
p
^
i
否则
dep_i=\begin{cases}\beta\hat{dep}_i+(1-\beta)D_i&若\alpha_i<\alpha\\ \hat{dep}_i&否则\end{cases}
depi={βdep^i+(1−β)Didep^i若αi<α否则
其中 D i D_i Di为投影深度图, d e p ^ i \hat {dep}_i dep^i为预测深度, α , β \alpha,\beta α,β分别为透明度阈值和预测深度的权重。
论文中一些变量名(如 d e p r e f dep_{ref} depref)并未得到解释且略为混乱(如 D D D在上一节和本节中均出现但含义不同),且上述基于置信度的深度细化并未画在图中,不清楚该模块的具体位置(从变量名命名来看像是在UNet前,但从写作顺序看又像是在UNet后)。
3. 虚拟车道生成模块
获取3D高斯后,为进一步提高大视角变化下的渲染质量,本文引入虚拟车道方法。
虚拟车道变换器用于选择合适的虚拟车道,随后进行垂直于车道的平移,生成虚拟视角。引入虚拟车道模块后,GGS主要包含两个阶段。
第一阶段输入
N
N
N个图像
I
S
e
t
1
=
{
I
1
,
⋯
,
I
N
}
ISet_1=\{I_1,\cdots,I_N\}
ISet1={I1,⋯,IN}
并输出目标图像
I
^
1
=
G
(
I
S
e
t
1
)
\hat I^1=\mathcal G(ISet_1)
I^1=G(ISet1)
其中
G
\mathcal G
G为GGS模型,
I
S
e
t
1
ISet_1
ISet1为不改变视角的渲染图像(和真值一致)。生成的虚拟车道图像为
I
S
e
t
2
=
{
V
(
I
^
k
1
,
γ
sin
θ
∣
k
f
≤
k
≤
k
l
,
θ
=
ω
k
)
}
ISet_2=\{\mathcal V(\hat I_k^1,\gamma\sin\theta|k_f\leq k\leq k_l,\theta=\omega k)\}
ISet2={V(I^k1,γsinθ∣kf≤k≤kl,θ=ωk)}
其中 V \mathcal V V为虚拟车道变换器, γ \gamma γ为平移系数, k f . k l k_f.k_l kf.kl分别为输入的第一帧和最后一帧的序号。 ω \omega ω为切换周期角(每帧的切换角依次周期性变化)。
第二阶段使用生成的虚拟车道图像为输入,生成真实车道的图像:
I
^
2
=
G
(
I
S
e
t
2
)
\hat I^2=\mathcal G(ISet_2)
I^2=G(ISet2)
4. 多车道扩散损失
由于改变视角会导致原本被遮挡的区域显露出来,本文利用扩散先验知识想象新视图下的颜色信息。
传统的扩散去噪模型直接补全图像,但不能保证帧间一致性。本文计算去噪前后图像的损失,生成扩散监督的新视角。此外,还建立多车道新视图图像,以保证自动驾驶车道在视角变化下仍然可见。
具体来说,本文使用Stable Diffusion,并用变分自编码器(VAE)编码多车道图像,随后将输入文本固定为自动驾驶标签,进行多个去噪步骤。生成的图像作为新视图合成的监督。
5. 损失函数
本文方法主要包括重建损失、深度损失、虚拟车道切换损失和扩散损失:
L
=
L
r
e
c
o
n
+
L
d
e
p
t
h
+
L
s
w
i
t
c
h
+
L
d
i
f
f
u
s
i
o
n
L=L_{recon}+L_{depth}+L_{switch}+L_{diffusion}
L=Lrecon+Ldepth+Lswitch+Ldiffusion
重建损失。比较渲染图像和真实图像的均方误差:
L
r
e
c
o
n
=
1
n
∑
i
=
1
n
(
y
i
−
y
^
i
)
2
L_{recon}=\frac1n\sum_{i=1}^n(y_i-\hat y_i)^2
Lrecon=n1i=1∑n(yi−y^i)2
其中 y i y_i yi表示真实像素的颜色, y ^ i \hat y_i y^i表示渲染像素的颜色。
深度损失。相邻像素的深度应该是平滑的、无突变的。因此深度损失如下:
L
d
e
p
t
h
=
1
n
∑
i
=
1
n
(
d
D
i
d
x
+
d
D
i
d
y
+
λ
(
d
2
D
i
d
x
2
+
d
2
D
i
d
y
2
)
)
L_{depth}=\frac1n\sum_{i=1}^n(\frac{dD_i}{dx}+\frac{dD_i}{dy}+\lambda(\frac{d^2D_i}{dx^2}+\frac{d^2D_i}{dy^2}))
Ldepth=n1i=1∑n(dxdDi+dydDi+λ(dx2d2Di+dy2d2Di))
其中 d D i d x \frac{dD_i}{dx} dxdDi为深度在 x x x方向上的一阶导数(其余项类似), λ \lambda λ为深度平滑调整系数。
车道切换损失:
L
s
w
i
t
c
h
=
1
n
∑
i
=
1
n
(
y
i
−
Ψ
(
Φ
(
y
^
i
)
)
)
2
L_{switch}=\frac1n\sum_{i=1}^n(y_i-\Psi(\Phi(\hat y_i)))^2
Lswitch=n1i=1∑n(yi−Ψ(Φ(y^i)))2
其中 Φ \Phi Φ表示切换到虚拟车道, Ψ \Psi Ψ表示切换回当前车道。
多车道扩散损失:
L
d
i
f
f
u
s
i
o
n
=
E
π
,
t
[
β
(
t
)
(
∥
y
−
y
^
π
∥
1
+
L
l
p
i
p
s
(
y
,
y
^
π
)
)
]
L_{diffusion}=\mathbb E_{\pi,t}[\beta(t)(\|y-\hat y_\pi\|_1+L_{lpips}(y,\hat y_\pi))]
Ldiffusion=Eπ,t[β(t)(∥y−y^π∥1+Llpips(y,y^π))]
其中 π \pi π为选择视图的相机姿态, y y y为多车道图像, y ^ π \hat y_\pi y^π为去噪模型的输出图像, β ( t ) \beta(t) β(t)为与噪声等级相关的加权函数, L l p i p s L_{lpips} Llpips为感知损失。
实验证明了该方法跨数据集的泛化能力(在A数据集上训练,在B数据集上测试),但仅有可视化结果,无定量指标。此外,结论部分提到处理动态场景和复杂场景的能力不足。