题目:xMUDA:跨模态 无监督 域自适应的 3D 语义分割
来源:2020 CVPR
重点和自己的理解(加粗)表示,如有不对欢迎探讨,其余主要是翻译~
无监督域适应 (UDA) 对于解决新域中缺少注释的问题至关重要。有许多多模态数据集,但大多数 UDA 方法都是单模态的。在这项工作中,我们探索如何从多模态中学习并提出跨模态 UDA (xMUDA),我们假设存在用于 3D 语义分割的 2D 图像和 3D 点云。这是具有挑战性的,因为两个输入空间是异构的,并且可能受到域转移的不同影响。在 xMUDA 中,模态通过相互模仿相互学习,从分割目标中分离出来,以防止更强的模态从较弱的模态中采用错误的预测。我们评估新的 UDA 场景,包括白天到晚上、国家到国家和数据集到数据集,利用最近的自动驾驶数据集。 xMUDA 在所有测试场景中对单模态 UDA 进行了重大改进,并且是对最先进的 UDA 技术的补充。代码可在 https://github.com/valeoai/xmuda 获得。
许多应用都需要三维场景理解,特别是机器人、自动驾驶和虚拟现实。在所关注的不同任务中,随着新数据集的发布 [1、5、6],3D 语义分割正获得越来越多的关注。与其他感知任务一样,3D 语义分割可能会遇到监督训练和测试时间之间的域转换问题,例如白天和黑夜、不同国家或数据集之间。域适应旨在解决这一差距,但现有工作主要涉及 2D 语义分割 [11、16、28、34],很少涉及 3D [32]。我们还观察到,以前的域适应工作侧重于单一模态,而 3D 数据集通常是多模态的,由 3D 点云和 2D 图像组成。虽然这两种模式之间的互补性已经被人类注释者和学习模型利用来定位 3D 场景中的对象 [18、21],但我们从一个新的角度考虑它,提出一个问题:如果 3D 和 2D 数据在源域和目标域,我们能否利用多模态来解决无监督域适应 (UDA)?
我们将我们的方法称为跨模式 UDA,简称为“xMUDA”,并考虑 3 种:具有不同光照条件(白天到夜晚)、环境(国家到国家)和传感器设置(不同的数据集)。由于各种原因,这是一项具有挑战性的任务。异构输入空间(2D 和 3D)使管道变得复杂,因为它意味着要使用异构网络架构和 2D-3D 投影。在融合中,如果两个传感器记录了同一个场景,则两者之间存在共享信息,但每个传感器也有私有(或专有)信息。由于后者,一种模式在特定情况下可能比另一种模式更强,但在另一种模式下可能相反,这取决于类别、上下文、分辨率等。这使得根据先验选择“最佳”传感器知识不可行。此外,每种模态都会受到领域转移的不同影响。例如,相机受昼夜域变化的影响很深,而激光雷达对其具有相对鲁棒性,如图 1 所示。
为了应对这些挑战,我们提出了一个跨模式 UDA(‘xMUDA’)框架,其中可以在 2D 和 3D 之间交换信息,以便为 UDA 相互学习(见图 1 右侧)。我们使用分离的双流架构来分别解决每种模式中的领域差距。我们的学习方案允许跨模态和分割目标的稳健平衡。此外,xMUDA 可以与现有的单模态 UDA 技术相结合。在这项工作中,我们展示了使用伪标签进行自我训练的互补性。最后,在有多种模态可用时,监督学习中使用特征融合(例如,早期或晚期融合)是一种常见的做法 [8、18、27]:我们的框架可以扩展到融合,同时保持分离的交叉模态目标。
我们的贡献可以总结如下:
• 我们定义了新的UDA 场景,并对最近发布的2D-3D 数据集提出了相应的拆分建议。
• 我们设计了一种架构,通过分离2D 和3D 中的私有和共享信息来实现跨模态学习。
• 我们提出了一种新颖的UDA 学习方案,其中模式可以在与主要目标保持平衡的情况下相互学习。它可以应用于最先进的自我训练技术之上,以提高性能。
• 我们展示了我们的框架如何扩展到后期融合并产生卓越的结果。
在不同的基准测试中,我们的表现明显优于单模态最先进的 UDA 技术。因此,我们表明,针对 UDA 的多模态开发是一个强大的工具,可以使广泛的多传感器应用受益。
在本节中,我们不是彻底浏览文献,而是回顾每个焦点的代表作品。
无监督领域适应。在过去的几年里,人们对用于复杂感知任务(如对象检测和语义分割)的无监督域自适应技术越来越感兴趣。在这些方法的背后是学习领域不变表示的相同精神,即来自不同领域的特征应该引入无关紧要的差异。一些作品促进对抗训练以最小化源目标分布偏移,无论是在像素 [11]、特征 [12] 或输出空间 [26、28] 上。回顾半监督学习 [14],使用伪标签进行自我训练最近也被证明对 UDA 有效 [16、34]。
虽然大多数现有作品都考虑2D世界中的UDA ,但很少有作品会处理3D对应的问题。 Wu等[32]在LiDAR点云的3D分割中对UDA采用了激活相关对齐[20]。 在这项工作中,我们调查了相同的任务,但方式不同:我们的系统在多模式输入数据上运行,即RGB + LiDAR。
据我们所知,在多模态场景的 2D/3D 语义分割方面,以前没有 UDA 作品。只有一些人考虑额外的方式,例如深度,仅在源域的训练时可用,并利用此类特权信息来提高适应性能 [15, 29]。否则,我们在这里假设所有模态在训练和测试时都可以在源域和目标域上使用。
多模态学习。在监督设置中,通过融合来自多个来源的特性,性能自然可以得到提高。几何上最简单的情况是RGBDepth融合与密集的像素对像素对应用于二维分割[8,27]。很难将3D点云与2D图像融合,因为它们位于不同的度量空间中。一种解决方案是将2D和3D特征投影到“鸟瞰视图”[17,18]或“LiDAR前视图”[19]中,用于目标检测任务。另一种可能是将多视点图像中的二维特征提取到三维点云中,进行联合二维-三维处理,实现三维语义分割[3,13,24]。我们更接近上一个系列的作品:我们的目标都是3D语义分割。然而,我们专注于如何利用多模态的UDA而不是监督学习,并且只使用单视图图像及其对应的点云。
用于语义分割的 3D 网络。虽然图像是密集张量,但 3D 点云可以以多种方式表示,这导致了并行发展的竞争网络系列。体素与像素非常相似,但由于它们中的大多数都是空的,因此内存非常大。格雷厄姆等人 [7] 和类似的实现 [4] 通过使用哈希表仅在活动体素上进行卷积来解决这个问题。这允许非常高的分辨率,通常每个体素只有一个点。基于点的网络在连续的 3D 空间中执行计算,因此可以直接接受点云作为输入。 PointNet++ [22] 使用逐点卷积、最大池来计算全局特征和局部邻域聚合,用于类似于 CNN 的分层学习。在这个方向上已经提出了许多改进,例如连续卷积[30]和可变形内核[25]。基于图的网络在点云的边缘上卷积 [31]。在这项工作中,我们选择 SparseConvNet [7] 作为 3D 网络,这是 ScanNet 基准测试 [5] 上的最新技术。
跨模态 UDA (xMUDA) 的目的是通过在模态之间启用受控信息交换来利用多模态,以便它们可以相互学习。这是通过让他们相互模仿彼此的输出来实现的,这样他们就可以从对方的优势中受益。
具体来说,我们在 3D 语义分割任务中使用点云(3D 模态)和图像(2D 模态)研究 xMUDA。概述如图 2 所示。我们首先在3.1中描述架构。 3.2是学习方案,然后展示了它对融合特例的扩展。
在下文中,我们考虑源数据集 S,其中每个样本由 2D 图像 、3D 点云 和 3D 分割标签 以及目标数据集 T 组成,缺少注释,其中每个样本仅由图像组成和点云 。图像 的空间大小为 (H,W, 3),点云空间大小为 (N, 3),其中 N 是相机视野中 3D 点的数量。
(N 是相机视野中 3D 点的数量,点云一般是360度,这里只关注相机视野中的,图二有个投影操作project到相机平面,然后从HW中选N个特征向量出来)
为了允许跨模态学习,提取特定于每种模态的特征至关重要。与将 2D 特征提升到 3D [18] 的 2D-3D 架构相反,我们使用具有不共享特征的独立 2D 和 3D 分支的 2stream 架构(见图 2)。
我们对 3D 使用 SparseConvNet [7],对 2D 使用带有 ResNet34 [9] 的 U-Net [23] 的修改版本。即使每个流都有特定的网络架构,重要的是输出具有相同的大小以允许跨模态学习。实施细节在4.2.中提供。
双分割头。我们把分割头称为网络中的最后一个线性层,它将输出的特征转换成logit,然后使用softmax函数生成类概率。对于 xMUDA,我们在 2D 和 3D 之间建立了联系,输出概率之间存在“模仿”损失,即,每种模式都应预测另一种模式的输出。这使我们能够明确地控制跨模态学习。
(输出概率类似于软标签)
在一种朴素的方法中,每个模态都有一个单独的分割头和一个跨模态优化目标对齐两种模态的输出。不幸的是,这导致仅使用两种模式之间共享的信息,同时丢弃每个传感器独有的私有信息(更多细节见第 5.1 节的消融研究)。这是一个重要的限制,因为我们希望同时利用私人信息和共享信息,以获得最佳性能。
为了在受益于共享知识的同时保留私人信息,我们引入了一个额外的分割头来将模仿目标与主要分割目标分开。这意味着 2D 和 3D 流都有两个分割头:一个主头用于最好的预测,一个模拟头用于估计另一种模态的输出。
4 个分割头的输出(见图 2)的大小为 (N,C),其中 C 等于类的数量,这样我们就可以获得每个 3D 点的类概率向量。两个主要负责人分别为每个分支生成可能的最佳预测 P2D 和 P3D。两个拟态头估计另一个模态的输出:2D 估计 3D (P2D→3D) 和 3D 估计 2D (P3D→2D)。
我们的跨模态学习方案的目标是以受控的方式在模态之间交换信息,以教会它们意识到彼此。该辅助目标可以有效地改善每种模态的性能,并且不需要任何注释,这使得其能够用于目标数据集T上的UDA。在下文中,我们定义了基本的监督学习设置、我们的跨模态损耗以及附加的伪标签学习方法。损失如图3a所示。
监督学习。3D分割的主要目标是通过交叉熵以经典的监督方式对源数据进行学习。我们可以将每个网络流(2D和3D)的分段损失写为:
其中是或。
跨模态学习。跨模态的无监督学习的目的是双重的。首先,我们希望在目标数据集上将知识从一种模态转移到另一种模态。例如,假设一个模态是敏感的,而另一个对于域移动更鲁棒,则鲁棒模态应当向敏感模态教导在没有标签可用的目标域中的正确类。其次,设计了一个基于源和目标的辅助目标,其任务是估计另一模态的预测。通过不仅模仿具有最大概率的类别,而且模仿整个分布,更多的信息被交换,导致更软的标签。
我们选择KL散度作为跨模损耗,并将其定义如下:
其中(P,Q)∈{(P2 D,P3 D →2D),(P3 D,P2 D →3D)},其中P是来自主预测的目标分布,其将由模拟预测Q估计。这种损失被应用于源域和目标域,因为它不需要地面事实标签,并且是我们提出的域适应框架的关键。对于源,可以被看作是除了主分割损失之外的辅助拟态损失。
(这里其实就是模仿损失通过KL散度来的,前面介绍两个分割头的用处。可以理解为源域的辅助损失,当然也可以是目标域的损失,因为不需要真值两个都可以用。而需要真值,所以只能用在源域)
每个网络流(2D和3D)的完整目标是源上的分割损耗Lseg与源和目标上的跨模态损耗LxM的组合:
其中 λs、λt 是分别在源和目标上加权 LxM 的超参数,θ 是 2D 或 3D 流的网络权重。
(公式上边一行是 源域的seg损失和模仿损失,下边一行是目标域的模仿损失)
跨模态学习和模型蒸馏之间存在相似之处,模型蒸馏也采用 KL 散度作为模仿损失,但目标是在监督设置中将知识从大型网络转移到较小的网络 [10]。最近张等人引入了深度相互学习[33],其中联合训练了一组单模态网络以在协作中相互学习。尽管在某种程度上,我们的跨模态学习与这些策略具有相似的性质,但我们处理不同的蒸馏角度,即跨模态 (2D/3D) 而不是在监督下,而是在 UDA 设置中。
使用伪标签进行额外的自我训练。 Crossmodal 学习是对最初用于半监督学习和最近用于 UDA [16、34] 的伪标记 [14] 的补充。详细地说,一旦用公式4优化了一个模型。我们离线提取伪标签,根据预测的类别概率选择高度置信度的标签。然后,我们使用生成的伪标签从头开始再次训练,以获得目标训练集上的额外分割损失。优化问题写道:
其中 λPL 是伪标签分割损失的权重,^y3D 是伪标签。为了清楚起见,我们将使用带有伪标签的额外自我训练的 xMUDA 变体称为 xMUDAPL。
(假设我们已经根据公示4优化了个模型,那么输入目标域的数据,也会出来标签,虽然可能不准确,但是挑高的当为标签,这时候目标域上就相当于有真值了,就可以加上seg损失了,有点加强的意思)
我们工作的一个核心贡献是通过多模式场景中的KL发散度最小化来制定跨模式学习,这不仅有助于我们从多个传感器中受益,而且有助于减轻域转移。 实际上,由于计算2D和3D预测之间的KL差异不需要地面真理,我们的学习方案允许在目标集上进行额外的规范化–带来适应效果。 图3b可视化了任务中考虑的4个数据子集,并显示了不同的UDA技术在哪个维度上运行。 与以前只对单一模式起作用的UDA方法相反, xMUDA引入了一种跨模式自我培训的新途径,因此与现有的适应技术正交并相辅相成。
为了评估 xMUDA,我们确定了 3 个真实到真实的适应场景。在白天到夜晚的情况下,LiDAR 的域间隙很小,因为它是一个主动传感器,发出的激光束几乎不受光照条件的影响。相比之下,相机具有较大的域间隙,因为其被动传感会因缺乏光源而受到影响,从而导致物体外观发生剧烈变化。第二种情况是国与国之间的适应,其中 LiDAR 或相机的领域差距可能更大:对于某些类别,3D 形状的变化可能比视觉外观变化更多,反之亦然。第三种情况,数据集到数据集,包括传感器设置的变化,例如相机光学,但最重要的是目标上更高的 LiDAR 分辨率。 3D 网络对变化的点云密度很敏感,图像可以帮助指导和稳定适应。
我们利用最近发布的自动驾驶数据集 nuScenes [2]、A2D2 [6] 和 SemanticKITTI [1],其中 LiDAR 和相机是同步和校准的,允许计算 3D 点与其对应的 2D 图像像素之间的投影。所选数据集包含 3D 注释。为了跨数据集的简单性和一致性,我们只使用前置摄像头图像和投射到其中的 LiDAR 点。
对于 nuScenes,注释是 3D 边界框,如果点位于 3D 框内,我们通过分配相应的对象标签来获得 3D 语义分割的逐点标签;否则该点被标记为背景。我们使用元数据为两个 UDA 场景生成拆分:日/夜和美国/新加坡。
A2D2 和 SemanticKITTI 提供分割标签。对于 UDA,我们在两个数据集之间定义了 10 个共享类。激光雷达设置是主要区别:在 A2D2 中,有 3 个 16 层的激光雷达生成相当稀疏的点云,而在 SemanticKITTI 中,有一个 64 层的高分辨率激光雷达。
我们在补充中提供了数据拆分的详细信息。
二维网络。我们使用带有 ResNet34 [9] 编码器的 U-Net [23] 的修改版本,我们在第 3 层和第 4 层之后添加了 dropout,并使用 PyTorch 提供的 ImageNet 预训练权重进行初始化。在解码器中,每一层都由一个转置卷积、与具有相同分辨率的编码器特征(跳过连接)的串联和另一个混合特征的卷积组成。该网络将图像 x2D 作为输入并生成具有相等空间维度 (H,W, F2D) 的输出特征图,其中 F2D 是特征通道的数量。为了将 2D 特征提升为 3D,我们在 3D 点投影到特征图中的稀疏像素位置对其进行采样,并获得最终的二维特征矩阵 (N,F2D)。
3D 网络。对于 SparseConvNet [7],我们利用官方 PyTorch 实现和具有 6 倍下采样的 U-Net 架构。我们使用 5cm 的体素大小,它小到每个体素只有一个 3D 点。
训练。对于数据增强,我们在 2D 中使用水平翻转和颜色抖动,在 3D 中使用 x 轴翻转、缩放和旋转。由于 SemanticKITTI 中的广角图像,我们在水平图像轴上随机裁剪一个固定大小的矩形以减少训练期间的内存。所有实验都使用对数平滑的类别权重来解决类别不平衡问题。对于 PyTorch 中跨模态损失的 KL 散度,我们分离目标变量以仅在 2D 或 3D 网络中反向传播。我们使用 8 的批量大小、β1 =0.9、β2 =0.999 的 Adam 优化器和基于迭代的学习计划,其中 0.001 的学习率在 80k 和 90k 迭代时除以 10;训练以 100k 结束。我们联合训练 2D 和 3D 流,并在每次迭代中累积在源批次和目标批次上计算的梯度。所有训练都适用于具有 11GB RAM 的单个 GPU。
对于 xMUDA,我们使用 Eq. 4,我们在源和目标上应用使用地面真实标签的分割损失和跨模态损失。对于 xMUDAPL,我们使用先前训练的 xMUDA 模型离线生成伪标签,如 [16] 中那样,然后从头开始再次训练,现在使用伪标签对目标进行额外的分割损失(公式 5)。请注意,我们不选择验证集上的最佳权重,而是使用最后一个检查点生成伪标签,以防止任何监督学习信号。 2D 和 3D 网络在每次迭代时联合训练并针对源和目标进行优化。
我们在 3 个提出的跨模态 UDA 场景上评估我们的方法,并与单模态 UDA 方法进行比较:Deep logCORAL [20]、熵最小化 (MinEnt) [28] 和伪标记 (PL) [16]。关于 PL,我们应用 [16] 如下:我们在没有 UDA 的情况下通过第一次训练离线生成伪标签,并通过类阈值处理丢弃不自信的标签。然后,我们从头开始进行第二次训练,在目标上添加 PL 损失。 image-2-image translation 部分由于其不稳定、高训练复杂性和与 LiDAR 数据不兼容而被排除在外,从而限制了可重复性。关于其他两种单模态技术,我们根据我们的设置调整已发布的实现。对于所有人,我们都搜索了各自最好的超参数。
我们在 Tab1 中报告了 3D 分割的平均交叉联合 (mIoU) 结果。 在 3 个 UDA 场景的目标测试集上。我们使用在验证集上获得最佳分数的检查点对测试集进行评估。除了 2D 和 3D 模型的分数外,我们还展示了集成结果(‘softmax avg’),它是通过取 softmax 之后预测的 2D 和 3D 概率的平均值获得的。基线仅在源上训练,oracle 仅在目标上训练,除了日/夜 oracle,我们使用 50%/50% 日/夜的批次来防止过度拟合。单模态 UDA 基线 [16、20、28] 分别应用于每种模态。
xMUDA——使用跨模态损失而不是 PL——与“基线(仅限源)”相比,对所有 3 个 UDA 场景都带来了显着的适应效果,并且通常优于单模态 UDA 基线。我们观察到,xMUDA 持续改进两种模态(2D 和 3D),即即使是强模态也可以从较弱的模态中学习。 xMUDAPL 在所有地方都取得了最好的成绩,唯一的例外是 Day/Night softmax avg。此外,跨模态学习和使用伪标签 (PL) 的自我训练是互补的,因为它们在 xMUDAPL 中的组合始终比每种单独的技术产生更高的分数。
定性结果如图 6 所示,显示了 xMUDA 在所有提议的 UDA 场景中的多功能性。我们在 http://tiny.cc/xmuda 的 A2D2 到 SemanticKITTI 场景的补充和视频中提供了额外的定性结果。
在 4.3 我们展示了如何使用 xMUDA 改进每个 2D 和 3D 模态。然而,我们能否通过融合获得更好的结果?
一种常见的融合架构是后期融合,其中来自不同来源的特征被连接起来(见图 4a)。然而,当将主要的 2D/3D 分支合并成一个独特的融合头时,我们不能再应用交叉模式学习(如图 5a 所示)。为了解决这个问题,我们提出了“xMUDA Fusion”,我们在融合层之前向 2D 和 3D 网络流添加了一个额外的分段头,目的是模仿中央融合头(见图 4b)。请注意,这个想法也可以应用于其他融合架构之上。
在表2 中,我们展示了不同融合方法的结果,我们指定了使用的架构(图 4a 中的 普通的后期融合或图 4b 中的 xMUDA 融合)。“xMUDAPL Fusion”优于所有其他单模态基线,“xMUDA Fusion”已经取得了比“Deep logCORAL”和“MinEnt”更好的性能。
在下文中,我们证明了我们选择每个模态流有两个分割头的设计选择,而不是简单方法中的单个分割头(见图 5a)。在单头架构中,模仿目标直接应用于 2 个主要预测之间。 2D/3D 之间有共享信息,但在每个模态中也有私有信息。减少跨模态损失 LxM 的一个不受欢迎的解决方案是网络丢弃私有信息,以便它们都只使用共享信息,从而更容易对齐它们的输出。但是,我们推测,如果还使用私人信息,则可以实现最佳性能。通过使用双分割头将主要预测与模拟预测分开,我们可以有效地解耦两个优化目标:主要输出最佳预测以优化分割损失,而模拟头可以与其他模态对齐。
为了对单分割头架构和双分割头架构进行基准测试,我们仅应用跨模态损失 LxM,不包括 PL,因为它不依赖于双头方法。我们将源上的 LxM 损失权重固定为 λs =1.0 并改变目标 λt。超参数 λt 是本次分析的重点,因为它控制目标集上的模态对齐,这是 UDA 的主要驱动因素。在图 5b 中,我们展示了 xMUDA 的双头架构实现了最佳性能,而单头架构的性能在高 λt 下急剧下降。我们假设双头更稳健,因为它将分割与模仿目标分开。
在 (4) 中,跨模态损失 LxM 应用于源和目标,尽管我们已经在源上有监督分割损失 Lseg。当在源上添加 LxM 而不是仅将其应用于目标时,我们观察到 2D 增益为 4.8 mIoU,3D 增益为 4.4。这表明,重要的是在源头上训练模仿头,稳定预测,这可以在目标适应期间加以利用。
我们已经证明,交叉模态学习对于 UDA非常有效。 但是,它还可以在纯监督设置中使用。 当使用交叉模态损失 LxM 培训 oracle 时,我们可以改进基线,查看表 3 . 我们推测 LxM 是有益的辅助损失,有助于规范培训并防止过度拟合。
我们提出了xMUDA ,跨模式无监督域适应,其中模式相互学习,以提高目标域的性能。 对于跨式学习,我们引入了通过KL发散实现的模式之间的相互模仿。 我们设计了一个架构,具有单独的主和模拟头,以从跨模态学习目标中分离分割。 使用2D/3D数据集对新的UDA场景进行3D语义分割的实验表明, xMUDA大大优于单模UDA ,并且是对伪标签策略的补充。 在融合时观察到模拟性能提升。
我们认为跨模态学习可用于各种设置和任务,而不仅限于 UDA。特别是,它应该有利于监督学习和图像和点云以外的其他模式。