原文链接:https://arxiv.org/abs/2303.10076

1. 引言

本文提出基于环视图像进行3D占用估计的简单框架,探索了网络设计、优化和评估。网络设计方面,虽然输出形式与单目深度估计和立体匹配不同,但网络结构与立体匹配网络相似(如下图所示),可以使用立体匹配的经验设计网络。优化方面,可以基于渲染深度图和点级分类标签,使用监督学习或自监督学习。评估方面,受体积渲染启发,引入基于距离的占用评估指标,这比其余指标更加公平;此外该指标只需要点云作为真值。

3. 方法

3.1 准备知识

本节介绍了NeRF的体积渲染公式,见神经辐射场的简单介绍。

3.2 模型设计

如上图所示为本文的端到端占用预测网络

Q

:

(

I

1

,

I

2

,

,

I

n

)

V

X

×

Y

×

Z

Q: (I^1,I^2,\cdots,I^n)\rightarrow V^{X\times Y\times Z}

Q:(I1,I2,⋯,In)→VX×Y×Z。

编码器:使用预训练ResNet。

图像特征到3D体素:使用Simple-BEV的方法,即定义3D点并投影回图像,通过双线性插值采样特征。对于出现在多个视图中的点使用采样特征的均值。

3D体素空间学习:由于上述无参数变换导致沿图像射线的点特征相同,需要进行进一步处理。使用基于沙漏结构的3D CNN,但仅取单一尺度输出,因为多尺度输出需要更多计算资源,且不会带来性能提升。

占用概率:使用体素特征预测密度

σ

\sigma

σ后,通过Sigmoid函数得到占用概率。

有符号距离函数:之前的工作发现,体积渲染的密度不是可靠的几何表达,本文使用有符号距离函数(SDF),将SDF值

s

s

s转化为密度

σ

\sigma

σ用于体积渲染:

σ

β

(

s

)

=

{

1

2

β

exp

(

s

β

)

s

0

1

β

(

1

1

2

exp

(

s

β

)

)

s

>

0

\sigma_\beta(s)=\left\{\begin{matrix}\frac{1}{2\beta}\exp(\frac{s}{\beta})&s\leq 0\\\frac{1}{\beta}(1-\frac{1}{2}\exp(-\frac{s}{\beta}))&s>0\end{matrix}\right.

σβ​(s)={2β1​exp(βs​)β1​(1−21​exp(−βs​))​s≤0s>0​

其中

β

\beta

β为可学习的参数。

网络的输出可以是密度、占用概率或SDF。使用SDF输出时,训练时将其转化为密度后进行体积渲染。测试时,占用概率接近1的/SDF值接近0的位置表示被占用,需要设置具体的阈值决定。

3.3 模型评估

本文使用现有的数据集,以类似深度估计的方式进行3D占用估计,但需要注意:

使用点云作为真值标签是稀疏的;只能确定激光雷达中心到点云之间的空间;3D占用是离散表达,不可避免存在量化误差。

本文使用两种评估指标:分类指标和离散深度指标,且两种指标与两种监督训练方式相关。

占用标签生成:使用分层抽样策略得到空空间的标签:在各激光雷达射线均匀采样固定数量的点。占用空间通过体素化点云得到。

激光雷达点云生成的占用标签和激光雷达投影得到的稀疏深度图会作为不同的监督。

分类指标:使用二元分类指标进行评估,但该指标只能评估已知区域。如下图所示,情况2比情况1的估计更准确,但分类指标表示出情况1的性能更好。 离散深度指标:若一条射线上所有点都预测为空,则设置最后一个点作为第一个预测占用点。离散深度误差即为第一个占用预测点到激光雷达点的距离。类似深度估计评估,可以使用Abs Rel、Sq Rel、RMSE、RMSE log和

δ

<

t

\delta

δ

3.4 模型优化

3.4.1 监督学习

两种不同的训练方式:一种使用深度损失,即使用体渲染得到的深度图受真实深度图监督;另一种直接计算已知空间内的二元分类损失,包括交叉熵损失和L1损失。

深度图损失:使用尺度不变对数(SILog)损失:

L

d

e

p

t

h

=

α

1

M

i

Δ

d

i

2

λ

M

2

(

i

Δ

d

i

)

2

\mathcal{L}_{depth}=\alpha\sqrt{\frac{1}{M}\sum_i\Delta d^2_i-\frac{\lambda}{M^2}(\sum_i\Delta d_i)^2}

Ldepth​=αM1​i∑​Δdi2​−M2λ​(i∑​Δdi​)2

其中

Δ

d

i

=

log

d

^

i

log

d

i

\Delta d_i=\log \hat{d}_i-\log d_i^*

Δdi​=logd^i​−logdi∗​,

M

M

M为有效像素数量;

α

\alpha

α与

λ

\lambda

λ为超参数。

分类损失:除二元交叉熵外,对采样点使用L1损失:

L

L

1

=

1

N

i

=

1

N

L

1

(

1

p

i

)

+

1

K

ω

j

=

1

K

L

1

(

0

p

j

)

\mathcal{L}_{L1}=\frac{1}{N}\sum_{i=1}^NL_1(1-p_i)+\frac{1}{K}\omega\sum_{j=1}^KL_1(0-p_j)

LL1​=N1​i=1∑N​L1​(1−pi​)+K1​ωj=1∑K​L1​(0−pj​)

其中

p

i

p_i

pi​为点云位置的预测概率,

p

j

p_j

pj​为空空间采样点位置的预测概率;

N

N

N为有效点数,

K

K

K为空空间的采样点数;

ω

\omega

ω为超参数。

3.4.2 自监督学习

对渲染合成图像使用光度一致性损失:

L

s

e

l

f

(

I

t

,

I

^

t

)

=

β

1

SSIM

(

I

t

,

I

^

t

)

2

+

(

1

β

)

I

t

I

^

t

\mathcal{L}_{self}(I_t,\hat{I}_t)=\beta\frac{1-\text{SSIM}(I_t,\hat{I}_t)}{2}+(1-\beta)\|I_t-\hat{I}_t\|

Lself​(It​,I^t​)=β21−SSIM(It​,I^t​)​+(1−β)∥It​−I^t​∥

注意此处需要相机内参和外参。

4. 实验

4.3 有监督损失和网络结构的消融研究

有监督损失函数分析:实验表明,深度损失与离散深度损失均优于分类损失。分类损失容易在天空区域产生漂浮物,因为损失无法处理未知区域(无点云区域)。而深度损失能防止这一现象,因为渲染会从整条射线采样,从而隐式地优化这些区域。深度损失会在前景与背景的交界处产生长尾假阳性预测。联合使用深度损失和分类损失不如仅使用深度损失。

网络设计:实验表明,使用更大的图像编码器和预训练均能提高性能。对于反投影方法,改为使用LSS或基于查询(交叉注意力)的方法,性能会降低。

4.4 自监督学习和3D重建

自监督学习与监督学习之间有较大的差距。SDF表达在离散距离指标下性能更优,但在深度指标下略低。这是由于概率与密度表达优化更灵活,而有符号距离值的优化更困难。但这种灵活性可能不利于网孔提取。对3D重建而言,SDF表达是更优的。

4.5 深度估计基准

与监督和自监督单目/环视深度估计网络相比,本文的方法有相当的性能。对自监督学习,本文的方法在误差指标上更优而在精度指标上更差,这可能是由于体积渲染和编码器-解码器结构的差异。

本文方法的缺点是比单目深度估计方法需要更长的推断时间,主要在3D特征提取和渲染上。但对于占用估计任务来说,无需渲染。

4.6 语义3D占用估计的讨论

本文框架下的SurroundOcc:使用与SurroundOcc相同的损失和相似的训练策略。实验表明,本文方法在性能和速度上均更优。此外在自监督下,SurroundOcc优化困难,性能较差。

SurroundOcc的预训练策略:本文使用点级训练策略,而现有方法使用体素级训练策略。点级训练能产生更细粒度的预测。为证明这一点,使用本文方法进行预训练,即使用本文的采样方法生成点级语义标签,并使用体素级语义标签微调。实验表明这样做能有效提高性能。可视化表明,使用稀疏点级标签训练的模型除了在天空区域会错误分类为植被或人造物以外,场景其余部分的估计都很合理。这说明这种方法可以作为后续微调的有效初始化。

5. 局限性和未来工作

引入序列数据;更细的分辨率;使用MLP回归最终几何并引入额外正则化损失(如eikonal损失)。

推荐文章

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: