OccFlowNet: Towards Self-supervised Occupancy Estimation via Differentiable Rendering and Occupancy Flow
原文链接:https://arxiv.org/abs/2402.12792
1. 引言
自动驾驶需要对无法预料的物体进行检测,这需要通用表达,如3D占用。但目前的3D占用估计方法需要大量有3D体素标签的数据。
本文提出OccFlowNet,仅使用2D监督进行3D占用估计的方法。本文仅需要图像和语义激光雷达点,使用NeRF中的可微渲染训练网络。渲染深度图与2D语义图后,使用获取自激光雷达扫描的2D标签监督。存在3D标签时,也可使用之以获取更高的性能。为获取更多监督,还渲染了时间上相邻的帧。最后,还引入占用流,在3D边界框标注存在时处理动态物体。
3. 方法
3.1 问题定义
给定当前时刻的 N N N视图图像 I = { I 1 , ⋯ , I N } I=\{I^1,\cdots,I^N\} I={I1,⋯,IN},占用预测的目标是在预定义的网格中估计语义体素 V = { c 0 , c 1 , ⋯ , c C } X × Y × Z V=\{c_0,c_1,\cdots,c_C\}^{X\times Y\times Z} V={c0,c1,⋯,cC}X×Y×Z,其中 C C C为语义类别数, c 0 c_0 c0代表未被占用。使用模型 M M M预测占用: V ^ = M ( I ) \hat V=M(I) V^=M(I)。
3.2 模型结构
如上图所示,使用BEVStereo的方法将图像特征转化为3D体素特征(其余方法也可)。然后3D解码器(3D CNN+MLP)预测每个体素的密度概率和语义分数。可使用3D体素监督,或使用2D标签通过体渲染进行监督。
2D到3D的特征编码器:BEVStereo的编码器使用当前帧多视图图像与部分过去帧获取3D特征。具体来说,首先使用预训练的主干
B
B
B提取图像特征,然后类似LSS的方法利用深度投影到3D空间,并使用体素池化
P
P
P得到3D体素特征
F
t
F_t
Ft:
F
t
=
P
(
L
S
S
(
B
(
I
)
)
)
F_t=P(LSS(B(I)))
Ft=P(LSS(B(I)))
3D解码器:使用3D解码器
Θ
\Theta
Θ(由3D卷积、BN、ReLU和跳跃连接组成)聚合
F
t
F_t
Ft的局部特征,然后使用两个MLP
Φ
σ
\Phi_\sigma
Φσ与
Φ
s
\Phi_s
Φs预测占用概率(或体密度)
V
^
σ
\hat V_\sigma
V^σ和
C
C
C类语义分数
V
^
s
\hat V_s
V^s。使用sigmoid函数
ψ
\psi
ψ将密度分数转化为概率:
V
^
s
=
Φ
s
(
Θ
(
F
t
)
)
∈
R
X
×
Y
×
Z
×
C
V
^
σ
=
ψ
(
Φ
σ
(
Θ
(
F
t
)
)
)
∈
[
0
,
1
]
X
×
Y
×
Z
\hat V_s=\Phi_s(\Theta(F_t))\in\mathbb R^{X\times Y\times Z\times C}\\ \hat V_\sigma=\psi(\Phi_\sigma(\Theta(F_t)))\in[0,1]^{X\times Y\times Z}
V^s=Φs(Θ(Ft))∈RX×Y×Z×CV^σ=ψ(Φσ(Θ(Ft)))∈[0,1]X×Y×Z
推断时,可给定置信度阈值
τ
\tau
τ,组合上述结果得到最终的语义预测
V
^
\hat V
V^:
V
^
(
x
,
y
,
z
)
=
{
arg max
c
V
^
s
(
x
,
y
,
z
)
V
^
σ
(
x
,
y
,
z
)
≥
τ
c
0
V
^
σ
(
x
,
y
,
z
)
<
τ
\hat V(x,y,z)=\left\{\begin{matrix}\argmax_c \hat V_s(x,y,z)&\hat V_\sigma(x,y,z)\geq\tau\\ c_0&\hat V_\sigma(x,y,z)<\tau\end{matrix}\right.
V^(x,y,z)={argmaxcV^s(x,y,z)c0V^σ(x,y,z)≥τV^σ(x,y,z)<τ
3.3 3D监督
可分别使用3D密度损失(二元交叉熵)和3D语义损失(交叉熵)监督MLP的输出。给定3D语义占用标签
V
=
{
c
0
,
c
1
,
⋯
,
c
C
}
X
×
Y
×
Z
V=\{c_0,c_1,\cdots,c_C\}^{X\times Y\times Z}
V={c0,c1,⋯,cC}X×Y×Z,占用概率与语义标签真值如下:
V
σ
(
x
,
y
,
z
)
=
{
0
V
(
x
,
y
,
z
)
=
c
0
1
否则
V
s
(
x
,
y
,
z
)
=
{
V
(
x
,
y
,
z
)
V
(
x
,
y
,
z
)
≠
c
0
忽略
否则
V_\sigma(x,y,z)=\left\{\begin{matrix}0&V(x,y,z)=c_0\\ 1&否则\end{matrix}\right.\\ V_s(x,y,z)=\left\{\begin{matrix}V(x,y,z)&V(x,y,z)\neq c_0\\ 忽略&否则\end{matrix}\right.
Vσ(x,y,z)={01V(x,y,z)=c0否则Vs(x,y,z)={V(x,y,z)忽略V(x,y,z)=c0否则
3.4 2D渲染监督
当3D标签不可获取时,使用可微体渲染和2D标签训练。本文以可微方式渲染预测的体素 V ^ \hat V V^以获取估计的深度与语义图,并计算与2D真值之间的损失。
射线生成:给定相机
i
i
i的外参
E
i
E_i
Ei和内参
K
i
K_i
Ki,建立射线集合
R
R
R,其每条射线
r
r
r从相机原点出发指向像素。对像素
(
u
,
v
)
i
(u,v)_i
(u,v)i,射线原点
o
i
(
u
,
v
)
o_i(u,v)
oi(u,v)和射线方向
d
i
(
u
,
v
)
d_i(u,v)
di(u,v)按下式获取:
o
i
(
u
,
v
)
=
E
i
,
d
i
(
u
,
v
)
=
E
i
K
i
−
1
[
u
,
v
,
1
]
o_i(u,v)=E_i,d_i(u,v)=E_iK_i^{-1}[u,v,1]
oi(u,v)=Ei,di(u,v)=EiKi−1[u,v,1]
训练时,只对有真实深度和语义的像素建立射线。从射线 r = o + t d r=o+td r=o+td上不同距离 t t t处采样,并使用体渲染计算深度 D ^ ( r ) \hat D(r) D^(r)与语义 S ^ ( r ) \hat S(r) S^(r)。本文使用从粗到细的采样方法,以决定采样距离 t t t。
体采样:通过三线性插值从 V ^ σ \hat V_\sigma V^σ与 V ^ s \hat V_s V^s中得到采样点的占用概率 σ ( r ( t ) ) \sigma(r(t)) σ(r(t))和语义分数 s ( r ( t ) ) s(r(t)) s(r(t))。
体渲染:渲染权重
w
(
r
(
t
)
)
w(r(t))
w(r(t))可通过沿射线积累密度得到:
w
(
r
(
t
)
)
=
T
(
r
(
t
)
)
(
1
−
exp
(
−
σ
(
r
(
t
)
)
δ
t
)
)
,
T
(
r
(
t
)
)
=
exp
(
−
∑
j
=
1
t
−
1
σ
(
r
(
j
)
)
δ
j
)
w(r(t))=T(r(t))(1-\exp(-\sigma(r(t))\delta_t)),\\ T(r(t))=\exp(-\sum_{j=1}^{t-1}\sigma(r(j))\delta_j)
w(r(t))=T(r(t))(1−exp(−σ(r(t))δt)),T(r(t))=exp(−j=1∑t−1σ(r(j))δj)
其中
T
(
r
(
t
)
)
T(r(t))
T(r(t))为沿射线的、距离
t
t
t处的累积透射率,
δ
t
=
r
(
t
+
1
)
−
r
(
t
)
\delta_t=r(t+1)-r(t)
δt=r(t+1)−r(t)为采样点之间的距离。最后,可通过加权求和计算渲染深度与语义图:
D
^
(
r
)
=
∑
t
=
1
N
w
(
r
(
t
)
)
t
S
^
(
r
)
=
∑
t
=
1
N
w
(
r
(
t
)
)
s
(
r
(
t
)
)
\hat D(r)=\sum_{t=1}^Nw(r(t))t\\ \hat S(r)=\sum_{t=1}^Nw(r(t))s(r(t))
D^(r)=t=1∑Nw(r(t))tS^(r)=t=1∑Nw(r(t))s(r(t))
损失:使用均方误差作为深度损失,交叉熵损失作为语义损失。为获取真值,可将标注的激光雷达点云投影到图像平面,获取 ( u , v ) (u,v) (u,v)位置和相应的深度与语义标签。
3.5 时间渲染
为增加体素被使用的总次数并增加监督,从时间上相邻的帧(简称时间帧)生成额外的射线。训练时,从时间范围 T = { t ∣ t ∈ Z , − O ≤ t ≤ O } T=\{t|t\in\mathbb Z,-O\leq t\leq O\} T={t∣t∈Z,−O≤t≤O}内读取的过去帧与未来帧,组成帧集 D t e m p = { I t ∣ t ∈ T } D_{temp}=\{I_t|t\in T\} Dtemp={It∣t∈T}。对帧 I t I_t It,其激光雷达点云 P t P_t Pt被投影到图像上以获取深度与语义真值。然后从所有时间帧中生成射线,并通过相机和自车姿态转换到当前帧下。
由于场景中存在动态物体,本文提出两种过滤技术,保证时间帧的渲染正确性;还提出损失加权以抵消类别不平衡问题。
动态射线过滤:在每个
t
≠
0
t\neq 0
t=0的时间帧中,所有来自动态物体的激光雷达点被移除【不用于生成2D真值】,因此仅渲染与当前帧一致的静态物体。需要生成对应射线的点云集合为:
D
P
=
{
P
t
c
∣
t
=
0
或
(
t
≠
0
且
c
∈
C
s
t
a
t
i
c
)
}
D_P=\{P_t^c|t=0或(t\neq0且c\in C_{static})\}
DP={Ptc∣t=0或(t=0且c∈Cstatic)}
其中 P t c P_t^c Ptc为 t t t时刻的、类别为 c c c的激光雷达点, C s t a t i c C_{static} Cstatic为静态类别标签集合。
去遮挡:由于运动的物体在未来帧可能会显露出当前帧被遮挡的部分。本文将时间帧中动态物体【动态体素】的密度设置为0,从而可为被显现的背景进行预测。
损失加权:动态物体相比静态物体在场景中更少出现,但对自动驾驶非常重要。在时间帧中过滤掉动态物体进一步加大其稀疏性。本文基于类别在数据集中的出现频率,缩放每个射线对应的损失。对属于类别
c
c
c的射线,其权重
w
w
w为:
w
(
c
)
=
log
(
∑
k
=
0
C
N
k
N
c
)
w(c)=\log(\frac{\sum_{k=0}^CN_k}{N_c})
w(c)=log(Nc∑k=0CNk)
其中 N i N_i Ni为标签为 i i i的点在数据集中的数量。
3.6 占用流
为进一步处理动静态类别不平衡问题,本文引入占用流,基于3D边界框对每个动态体素预测场景流。根据体素流,可将动态体素移动到时间帧的正确位置,从而无需动态物体过滤而进行渲染。
训练时,将正确预测且在边界框内的体素,进行流变换以转换到时间帧的目标位置,然后使用基于距离倒数的加权插值对齐网格。具体来说,给定流变换后点的位置
x
x
x【对应的密度与分数为
σ
(
v
)
,
s
(
v
)
\sigma(v),s(v)
σ(v),s(v)】,选择其最近的8个体素
v
i
v_i
vi(中心为
x
i
x_i
xi),并按下式计算权重:
w
i
(
x
)
=
1
∣
x
−
x
i
∣
w_i(x)=\frac1{|x-x_i|}
wi(x)=∣x−xi∣1
网格的语义分数
s
s
s会按照下式更新:
s
(
v
i
)
=
w
i
(
x
)
∑
p
=
1
P
w
p
(
x
)
s
(
v
)
+
(
1
−
w
i
(
x
)
∑
p
=
1
P
w
p
(
x
)
)
s
(
v
i
)
s(v_i)=\frac{w_i(x)}{\sum_{p=1}^Pw_p(x)}s(v)+(1-\frac{w_i(x)}{\sum_{p=1}^Pw_p(x)})s(v_i)
s(vi)=∑p=1Pwp(x)wi(x)s(v)+(1−∑p=1Pwp(x)wi(x))s(vi)
其中 p p p索引选择的相邻体素中心。密度概率 σ \sigma σ的更新类似。
这样,可得到 ∣ T ∣ |T| ∣T∣个语义与密度场 V ˉ s ∈ R ∣ T ∣ × X × Y × Z × C , V ˉ σ ∈ [ 0 , 1 ] ∣ T ∣ × X × Y × Z \bar V_s\in\mathbb R^{|T|\times X\times Y\times Z\times C},\bar V_\sigma\in\mathbb [0,1]^{|T|\times X\times Y\times Z} Vˉs∈R∣T∣×X×Y×Z×C,Vˉσ∈[0,1]∣T∣×X×Y×Z,表达时间帧上场景的状态,从而可在相应帧的占用场内进行体渲染。
4. 实验
4.1 数据集
使用Occ3D-nuScenes数据集,占用流真值由nuScenes的3D边界框标注计算。
4.3 3D占用预测结果
本文使用2D监督、不含占用流的模型能超过部分3D监督方法的性能(其余方法仅有略高的性能)。这说明2D监督对3D占用预测来说是足够的。此外,能超过所有其余2D监督方法的性能。
加入占用流时,性能能进一步提升,超过绝大部分3D监督方法的性能。性能的提升主要在动态物体上,因为时间帧的渲染会引入时间误差。虽然过滤射线和去遮挡有一定作用,但占用流能通过增加监督(避免过滤射线)进一步减小这一误差。
添加3D标签后,本文方法的性能能大幅超过现有方法。
4.4 消融研究
组件:相比仅使用语义监督,增加深度监督能大幅提高性能;进一步增加时间渲染(不进行动态物体过滤和损失加权)能进一步增加性能。最后,加入动态物体过滤和损失加权,能达到最优的性能。
时间范围:增加时间渲染的时间范围能提高性能,但进一步增加会降低性能。这可能是因为间隔太长时间的相机太远,视锥相交太少,从而使监督无效。
5. 结论
局限性:本文需要依赖激光雷达数据训练(可通过强大的基石模型获取深度与语义标签);需要依赖3D边界框标注来引入占用流(可通过网络估计占用流并通过体渲染优化)。
补充材料
B. 细节:动态射线过滤
将非当前帧中的、所属类别为动态物体的激光雷达点移除,然后为每个剩下的激光雷达点生成对应帧下的射线。
C. 细节:占用流
首先计算帧间边界框的变换,以将估计的动态占用变换到目标时刻的位置。此时无需动态射线过滤,因为时间帧内的动态物体已经位于正确的位置。这样,可以生成更多的动态物体射线,从而极大地提高其性能。