Exploring Data-Efficient 3D Scene Understanding with Contrastive Scene Contexts—笔记
一、目的
本篇文章主要想实现这样一件事:即通过无监督或自监督预训练的帮助,在各种下游任务中(例如语义分割,实例分割等),只使用场景中有限的,少量的标注数据,实现较为高效的性能。
我们以一个图来说明,如下
图的左边:训练样本,仅仅有颜色的点是被标注的;图的右边:在验证集中的预测,并且不同的颜色代表不同的实例。
如上图可以看出,该论文所要实现的效果,即是使用具有少量标签的训练数据,通过预训练过的网络,实现较好效果的任务结果,即为数据高效—Data-Efficient 3D Scene Understanding。例如上边的实例分割任务
二、方法
1.pointcontrast
pointcontrast 其实并非是这篇论文,而是另一篇非常好也意义非常的论文,我们之所以这里要提到pointcontrast是因为,我们当下所讲的这篇论文是基于pointcontrast模型进行改进的。所以理解pointcontrast对我们理解本篇文章具有重要意义。
pointcontrast是一个预训练的方法,过程如上图。
其算法过程是:
- 对于数据中的每一片点云,首先根据对这片点云进行不同角度的拍摄,生成两个视图 x 1 x^1 x1和 x 2 x^2 x2
- 计算 x 1 x^1 x1和 x 2 x^2 x2视图的对应点映射 M M M,如果 ( i , j ) ∈ M (i,j)\in M (i,j)∈M,则称 x j 1 x^1_j xj1和 x j 2 x^2_j xj2是跨越两个视图的一对匹配点(由于是同一片点云的两个视图,其必然有相同的部分, M M M即是一个视图的一个点到另一个视图相同点的一个映射,这两个相同的点即为匹配点)
- 对视图 x 1 x^1 x1和 x 2 x^2 x2进行随机几何变换得到 T 1 T_1 T1和 T 2 T_2 T2
- 将变换和的 T 1 T_1 T1和 T 2 T_2 T2输入到backbone中,计算出特征 f 1 f^1 f1和 f 2 f^2 f2
- 最后根据提取的特征 f 1 f^1 f1和 f 2 f^2 f2,计算对比损失 L c ( f 1 , f 2 ) L_c(f^1,f^2) Lc(f1,f2),即是最小化匹配带你的距离并且最大化不匹配点之间的距离
pointcontrast就是通过不断的区分匹配点与非匹配点,来学习点云中所具有的一些固有的表征。然后将学习到表征的网络用于下游任务进行微调以完成下游任务。
2.Shapecontext
在谈本文所提出的Contrastive Scene Contexts方法之前,我们需要先对Shapecontext有一些了解,因为本文所提出的方法,也是以Shapecontext为灵感提出的,了解它对我们了解Contrastive Scene Contexts具有非常大的帮助。
经典的ShapeContext如上图所示,对于每个轮廓点,我们可以构建以其为中心的极对数坐标系 (包括12个角度区域和5个距离区域,如下图c),再将它周围的轮廓点映射到每个区域内,然后统计落在每个区域的轮廓点数,最后进行归一化处理(即除以落在所有区域中的轮廓点数)。这样子我们就生成了形状上下文直方图矩阵。
图中 (a)和(b)分别是两个字体不同的字母A,©是基于(a)中菱形点画的网格图。(d)和(e)分别是菱形点和正方形点的直方图数据,可以看出他们的点集分布还是比较相似的,而(f ) 即三角形表示的点的直方图与另外两个相差很大,所以可以看出,(d)(e)两点在结构上可以说是同一个点。其中直方图的横坐标为区域中的点到中心点的角度 θ \theta θ,纵坐标为区域中的点到中心点距离。
也就是说Shapecontext可以通过比较每一个点的周边上下文信息来比较每一个的相似性,即通过比较两个中心点周围点分布的相似性来判断两个中心点的相似性。
3.Contrastive Scene Contexts
Contrastive Scene Contexts借鉴了ShapeContext的空间分区。具体地,给定来自同一场景的一对部分帧点云 x x x和 y y y,我们有可用的对应映射 ( i , j ) ∈ M x y (i,j)∈ M_{xy} (i,j)∈Mxy ,即匹配点的集合,其中 i i i是帧 x x x中点 x i ∈ R 3 x_i∈ R^3 xi∈R3的索引, j j j是帧 y y y中匹配点 y j ∈ R 3 y_j ∈R^3 yj∈R3的索引。对于每个锚点 x i x_i xi,空间被划分为多个分区,并且其他点基于它们与i的相对角度和距离被分配给不同的分区。
锚点 x i x_i xi处场景上下文划分所需的距离和角度信息如下
其中D是相对距离矩阵。 D i k D_{ik} Dik存储点 i i i和点 k k k之间的距离, A A A是相对角度矩阵,其中 A i k A_{ik} Aik存储点i和点k之间的相对角度。在等式(1)中, d d d表示3D维度。
如图所示:
锚点位于中心。对于2个和4个分区,仅相对角度是足够的。对于8个分区(示出了横截面),则需要相对角度和距离两者。
这篇文章的模型与pointcontrast相比,对pointcontrast进行了简单的修改,即是使用Contrastive Scene Contexts将空间信息集成到对比学习框架中,也对损失函数进行了一点修改,其他的基本与pointcontrast一致,例如backbone,计算匹配点等。
4.LOSS
本篇文章的损失函数其实即是PointInfoNCE Loss的简单修改,PointInfoNCE Loss也是pointcontrast所使用的损失函数。所以我们先介绍PointInfoNCE Loss。公式如下
其中这里P是来自两个视图的所有正匹配(一个点与其匹配点为正例,与其余匹配点为负例)的集合。在这个公式中,我们使用具有至少一个匹配的点作为否定,而不使用额外的非匹配点作为否定。 f i f_i fi和 f j f_j fj为两个视图中一对正匹配点的特征。 f k f_k fk为第二个视图中的负例,其中 ∃ ( ⋅ , k ) ∈ P ∃(·,k)∈P ∃(⋅,k)∈P并且 k ≠ j k≠j k=j。该函数的作用即为缩小正匹配点之间在特征空间中的距离,即增大正匹配点之间相似度。同时增大负匹配点,也就是锚点与负例之间在特征空间中的距离,即缩小负匹配点之间相似度。
本文的Loss:
P为分区的个数, p a r p ( i ) par_p(i) parp(i)为空间划分函数,其中其中 p ∈ ( 1 , . . . , P ) p∈(1,...,P) p∈(1,...,P),函数 p a r p ( i ) par_p(i) parp(i)将锚点 i i i作为输入,并返回一组点作为负例,这一组点即为分区后一个分区内分布的点。 f 1 f^1 f1和 f 2 f^2 f2为两帧点云的点特征。对于匹配对 ( i , j ) ∈ M (i,j)∈M (i,j)∈M,点特征 f i 1 f^1_i fi1用作查询, f j 2 f^2_j fj2用作正键。需要注意的是这里的 f k 2 f^2_k fk2是通过第一片点云的第 i i i个点找到第二片点云中相同的匹配点 j j j点,然后输入到空间划分函数,以 j j j为锚点在空间中进行分区,每个分区中分布点的特征。则以上公式表示的是一个分区内的对比损失,要计算总损失还需要将每个区域内的对比损失聚合,即如下。
5.分析实验(Analysis)
本文进行了分析实验,通过改变场景上下文分区的数量和计算对比度损失的采样点的数量
结果示于图中,绿色线表示没有空间分区的变体;最左边的点表示PointContrast 3,在没有场景上下文的情况下,增加采样点的数量不会提高性能;随着更多分区的增加,采样点的增加导致性能的一致提升(高达4096个点)。并且根据实验可以看出当分区分为8个分区时性能最好。
三、现实场景
本文举出了两种现实生活中的使用场景,1.数量有限的场景,2.有限注释的场景。并将以上方法用于场景。
1.数量有限的场景(LR)
用于数量有限的场景的语义和实例分割任务结果如下:
有限数量的场景在ScanNet-LR上的3D语义和实例分割结果。度量是mAP@0.5用于实例分割,mIoU用于语义分割。“Scratch”表示从头开始的训练基线,“Ours”表示使用我们的预训练权重的微调结果。在训练期间使用100%数据的结果在第一行中列出。
用于数量有限的场景的目标检测任务结果如下
ScanNet上有限场景重建的对象检测结果。度量为mAP@0.5。我们显示出从零开始训练的结果不断改善,特别是当10%或20%的数据可用时。使用所有场景的结果列在第一行中。
2.有限注释的场景(LA)
有限注释(LA)涵盖两种不同的注释类型:用于语义和实例分割的有限点注释和用于检测的有限边界框注释。
2.1有限点的注释
本文在有限点的注释中,提出了一种Active labeling(主动标记策略)
Active labeling(主动标记策略):核心思想是在特征空间上执行平衡采样,使选定的点在场景中最具代表性和示范性。我们的预训练网络通过简单地执行前向传递,提取待注释点云的每个点的密集特征。然后我们在这个特征空间中进行k-均值聚类,得到K个聚类中心。我们选择K个质心作为要提供给注释器(即手动标记)进行标记的点。如下图所示
在下图中,与原始的从头开始的基线相比,本文提出的预训练框架可以大大提高性能。对于语义分割和实例分割,即使没有微调,与随机采样或k均值采样基线策略相比,主动标记策略单独提供的点标签使训练模型的表现明显更好,当训练数据只有20个点标签时,在mAP@0.5和mIoU方面产生>10%的绝对改进
2.2用于检测的有限边界框注释
对于目标检测,我们使用VoteNet 作为检测器框架;,我们用我们的Sparse Resunet替换PointNet 。对于这部分,我们不使用任何主动标记策略,因为边界框的标记成本要小得多。我们对每个场景随机采样{1,2,4,7}个边界框并训练检测器。
在ScanNet上使用有限边界框注释的对象检测结果。度量为mAP@0.5。“ours”表示使用我们的预训练模型进行微调的结果。我们使用所有注释的边界框(平均每个场景约13个边界框)作为第一行的参考列出上限性能。
四、数据高效的3D场景理解概述
如上图所示,最左边为预训练阶段(上)以及主动标记策略(下),预训练对于输入的每对帧点云计算相同点的映射,其中一片点云为query points,以该点云中的每个匹配点将空间进行划分,在这里我们划分为8个区域得到key points。再将query points与key points一起输入到backbone中进行特征计算,然后对两片点云的输出特征进行对比损失的计算(k-Partition PointinfoNCE),以学习点云内的固有的通用表征。这个过程的输出为一个预训练的权重,即是网络学到的通用特征,可以下游作为任务进行微调的网络初始化参数以及一个点特征提取器,即网络架构。
右边将实际情形分为了两部分,一个是有限的场景重构即虽然有足够数量的标注点,但仅有有限数量的场景,预训练网络在这个情景中进行微调完成下游任务。另一个是有限的注释,即有足够的场景数量,但仅有少量的被标记数据,在这个情形中预训练网络进行微调进行下游任务,并且可以选择是否使用active labeling。最下边是进行随机初始化,并没有预训练过程的监督学习,它作为baseline与以上两个场景内使用预训练模型的性能进行比较。
五、总结
需注意本篇文章接来源于个人的理解与思考,或有错误,可用来借鉴,若有发现错误,请指正以便修改。
关于shapecontext部分,若为谈清楚,可以去看CSDN:【Shapecontext】形状上下文算法的研究,本文中的shapecontext部分的图片也来源此网站。