😸2DPASS(
ECCV2022
)主要贡献:
- 提出了二维先验辅助语义分割 2DPASS,该方法利用相机的二维先验信息来辅助三维语义分割。据作者团队所知,2DPASS 是第一个将多模态信息蒸馏后并用于单点云(模态)的语义分割方法
- 利用论文所提出的多尺度融合进行单知识蒸馏(MSFSKD)策略,2DPASS 在 SemanticKITTI 和 NuScenes 这两个大规模基准上取得了显著的性能提升且达到了
SOTA
前言
✍️在自动驾驶领域中,相机可以获取到密集的颜色信息和细粒度纹理却无法得到准确的深度信息且在弱光条件下不可靠,而激光雷达能提供准确的深度信息但只能捕获稀疏和无纹理的数据。因此,相机和激光雷达可捕捉到互补信息,这使得通过多模态数据融合进行语义分割成为了研究热点。
😿尽管使用多模态数据能有效提升模型性能,但基于融合(fusion-based)的方法需要成对的数据(paired data)且存在以下局限性:
- 由于摄像机和激光雷达之间的视野(FOVs)不同,无法为图像平面外的点建立点到像素的映射。通常情况下,激光雷达和相机的 FOVs 仅在一小部分上有重叠(如上图所示,最右边图像上红色部分为 FOVs 重叠部分),这大大限制了基于融合的方法的应用
- 基于融合的方法在运行时同时处理图像和点云(通过多任务或级联方式),从而消耗了更多的计算资源,这给实时应用带来了很大负担
😸因此,论文提出了一种二维先验辅助语义分割(2DPASS)的通用训练方案,以提高在点云上的表示学习(representation learning)能力。论文提出的 2DPASS 在训练过程中充分利用了具有丰富语义信息的二维图像,然后在没有严格的成对数据约束情况下进行语义分割。在实际应用中,2DPASS 通过辅助模态融合(auxiliary modal fusion)和多尺度融合到单知识蒸馏(MSFSKD),从多模态数据中获取更丰富的语义和结构信息,然后将这些信息提取到纯 3D 网络。与基于融合的方法相比,论文的解决方案具有以下更好的特性:
- 通用性:可以在只修改少量的网络结构下轻松地与其他任何 3D 分割模型集成在一起
- 灵活性:融合模块仅在训练期间用于增强 3D 网络,训练后,增强的三维模型可以在没有图像输入的情况下部署
- 有效性:即使只有一小部分重叠的多模态数据,论文提出的方法也可以显著提高性能
🙀实验结果显示,在装备了 2DPASS 之后,论文使用的基线模型(baseline model)在只有点云输入的情况下得到了显著的性能提升。具体来说,它在 SemanticKITTI 和 NuScenes 这两个大规模的公认基准上达到了 SOTA。
网络结构
- 从原始图像中裁剪出一小块图像(
480x320
)作为 2D 输入(由于相机图像非常大,导致将原始图像发送到论文的多模态 pipeline 中是很难处理的),这个步骤加速了训练过程且没有多余的性能下降 - 裁剪后的图像和激光雷达点云分别通过 2D 和 3D 编码器,并行生成多尺度特征
- 对于每个尺度,互补的二维知识通过
MSFSKD
从而有效地转移到三维网络中(即充分利用纹理和颜色感知的二维先验知识,并保留原始的三维特定知识) - 每个尺度上的 2D 和 3D 特征都被用于生成语义分割预测,这些预测由纯 3D 标签监督
✍️在推理过程中,可以丢弃与 2D 相关的分支,与基于融合的方法相比,这有效地避免了实际应用中额外的计算负担。
编码器
论文采用具有二维卷积的 ResNet34
编码器作为 2D 网络,而使用稀疏卷积来构建 3D 网络。具体来说,论文设计了一个分层编码器 SPVCNN
,并在每个尺度上采用 ResNet
瓶颈设计,同时用 LeakyReLU
激活函数代替 ReLU
激活函数。在这两个网络中,我们分别从不同的尺度中提取 L
个特征图,得到二维特征
{
F
l
2
D
}
l
=
1
L
\{F_l^{2D}\}_{l=1}^L
{Fl2D}l=1L 和三维特征
{
F
l
3
D
}
l
=
1
L
\{F_l^{3D}\}_{l=1}^L
{Fl3D}l=1L。
✍️其中,稀疏卷积的一个优点在于它的稀疏性,卷积运算只考虑非空体素
解码器
- 对于 2D 网络,论文采用
FCN
作为解码器对每个编码层的特征进行上采样。具体来说,可以通过对第 ( L − l + 1 ) (L−l + 1) (L−l+1) 编码层的特征图进行上采样来获得第 l l l 解码层的特征图 D l 2 D D_l^{2D} Dl2D,其中所有上采样的特征图将通过元素相加进行合并。最后,将融合后的特征图通过线性分类器(linear classifier)进行 2D 语义分割。 - 对于 3D 网络,论文采用
U-Net
作为解码器。其中,论文将不同尺度的特征上采样到原始大小,并将它们连接在一起,然后将它们输入分类器。论文发现,这种结构可以更好地学习分层信息,同时更有效地获得预测结果。
Point-to-Pixel Correspondence
- 2D 特征生成如上图
(a)
所示(以第 l l l 层特征为例),其首先使用反卷积将二维特征 F l 2 D ∈ R H l × W l × D l F_l^{2D} \in R^{H_l \times W_l \times D_l} Fl2D∈RHl×Wl×Dl 上采样至与原始图像分辨率一致得到特征图 F ~ l 2 D \tilde{F}_l^{2D} F~l2D,然后再将点云投影到图像面片(image patch)上并生成点到像素(P2P)的映射,最后根据P2P
映射将二维特征图 F ~ l 2 D \tilde{F}_l^{2D} F~l2D 转换为逐点二维特征 F ^ l 2 D \hat{F}_l^{2D} F^l2D。其中,点到像素的映射关系如下:
[ u i , v i , 1 ] T = 1 z i × K × T × [ x i , y i , z i , 1 ] T M i m g = { ( ⌊ v i ⌋ , ⌊ u i ⌋ ) } i = 1 N ∈ R N × 2 \begin{aligned} \ [u_i, v_i, 1]^T &= \frac{1}{z_i} \times K \times T \times [x_i, y_i, z_i, 1]^T \\ M^{img} &= \{ (\lfloor v_i \rfloor , \lfloor u_i \rfloor) \}_{i=1}^N \in R^{N \times 2} \end{aligned} [ui,vi,1]TMimg=zi1×K×T×[xi,yi,zi,1]T={(⌊vi⌋,⌊ui⌋)}i=1N∈RN×2
✍️其中, p i = ( x i , y i , z i ) ∈ R 3 p_i=(x_i, y_i, z_i)\in R^3 pi=(xi,yi,zi)∈R3 是点云数据中的一个点, p ^ i = ( u i , v i ) ∈ R 2 \hat{p}_i=(u_i, v_i)\in R^2 p^i=(ui,vi)∈R2 为投影后的像素数据, K ∈ R 3 × 4 K\in R^{3\times 4} K∈R3×4 为相机内参, T ∈ R 4 × 4 T \in R^{4 \times 4} T∈R4×4 为相机外参, ⌊ ⋅ ⌋ \lfloor \cdot \rfloor ⌊⋅⌋ 为下取整。
✍️由于 NuScenes 中激光雷达和相机的工作频率不同,需要通过全局坐标系将时间戳
t
l
t_l
tl 的激光雷达帧转换为时间戳
t
c
t_c
tc 的相机帧。NuScenes 数据集中的外参矩阵
T
T
T 为:
T
=
T
c
a
m
e
r
a
←
e
g
o
t
c
×
T
e
g
o
t
c
←
g
l
o
b
a
l
×
T
g
l
o
b
a
l
←
e
g
o
t
l
×
T
e
g
o
t
l
←
l
i
d
a
r
T = T_{camera} \leftarrow ego_{t_c} \times T_{ego_{t_c}} \leftarrow global \times T_{global} \leftarrow ego_{t_l} \times T_{ego_{t_l}} \leftarrow lidar
T=Tcamera←egotc×Tegotc←global×Tglobal←egotl×Tegotl←lidar
- 3D 特征生成如上图
(b)
所示(以第 l l l 层特征为例),其首先获取点到体素的映射关系 M l v o x e l M_l^{voxel} Mlvoxel,然后给定稀疏卷积层的三维特征 F l 3 D ∈ R N l ′ × D l F_l^{3D} \in R^{N^{'}_l \times D_l} Fl3D∈RNl′×Dl,根据 M l v o x e l M_l^{voxel} Mlvoxel 在原始特征图 F l 3 D F_l^{3D} Fl3D 上进行最接近插值(nearest interpolation)得到逐点三维特征 F ~ l 3 D ∈ R N × D \tilde{F}_l^{3D}\in R^{N \times D} F~l3D∈RN×D,最后再通过丢弃图像视场(FOVs)外的点来过滤相关的点。其相关公式如下:
M l v o x e l = { ( ⌊ x i r l ⌋ , ⌊ y i r l ⌋ , ⌊ z i r l ⌋ ) } i = 1 N ∈ R N × 3 F ^ l 3 D = { f i ∣ f i ∈ F ~ l 3 D , M i , 1 i m g ≤ H , M i , 2 i m g ≤ W } i = 1 N ∈ R N i m g × D l \begin{aligned} M_l^{voxel} &= \{ (\lfloor \frac{x_i}{r_l} \rfloor, \lfloor \frac{y_i}{r_l} \rfloor, \lfloor \frac{z_i}{r_l} \rfloor) \}_{i=1}^N \in R^{N \times 3} \\ \hat{F}_l^{3D} &= \{ f_i | f_i \in \tilde{F}_l^{3D}, M_{i, 1}^{img} \le H, M_{i, 2}^{img} \le W \}_{i=1}^N \in R^{N^{img} \times D_l} \end{aligned} MlvoxelF^l3D={(⌊rlxi⌋,⌊rlyi⌋,⌊rlzi⌋)}i=1N∈RN×3={fi∣fi∈F~l3D,Mi,1img≤H,Mi,2img≤W}i=1N∈RNimg×Dl
✍️其中, P = { ( x i , y i , z i ) } i = 1 N P=\{(x_i, y_i, z_i)\}_{i=1}^N P={(xi,yi,zi)}i=1N 是点云数据, r l r_l rl 为第 l l l 层体素的分辨率, H H H 为图像视场的高, W W W 为图像视场的宽
MSFSKD
如下图所示,MSFSKD 的内部结构包括模态融合和模态保持知识蒸馏。其中 2D 特征和 3D 特征通过 2D Learner
进行融合,并使用两个 MLP
以及非线性映射对特征做逐点相加,然后将输出特征和原 2D 特征进行融合,再结合 classifier(全连接层)获取融合特征分数
S
l
2
D
3
D
S_l^{2D3D}
Sl2D3D。而 3D 部分则通过特征增强,并结合 classifier(全连接层)获取 3D 预测分数
S
l
3
D
S_l^{3D}
Sl3D,并在结果层面上做蒸馏。
- 2D 和 3D 结果融合的表达式如下:
F ^ l 2 D 3 D e = F ^ l 2 D + σ ( M L P ( F ^ l 2 D 3 D ) ) ⨀ F ^ l 2 D 3 D \hat{F}_l^{2D3D_e} = \hat{F}_l^{2D} + \sigma(MLP(\hat{F}_l^{2D3D})) \bigodot \hat{F}_l^{2D3D} F^l2D3De=F^l2D+σ(MLP(F^l2D3D))⨀F^l2D3D
✍️其中, σ \sigma σ 为 sigmoid 激活函数。此外,上图获取 F ^ l 2 D 3 D e \hat{F}_l^{2D3D_e} F^l2D3De 经过 2 个 MLP,而表达式为什么只有一个 MLP?
- 知识蒸馏表达式如下:
L x M = D K L ( S l 2 D 3 D ∥ S l 3 D ) L_{xM} = D_{KL}(S_l^{2D3D}\parallel S_l^{3D}) LxM=DKL(Sl2D3D∥Sl3D)
✍️论文使用 KL 散度作为知识蒸馏的损失函数
😻论文:https://arxiv.org/pdf/2207.04397.pdf
😻代码:https://github.com/yanx27/2DPASS