Brief
19年8月才发表在arxiv上,算是很新的3D检测的文章。
Abstruct
- 获得了nuScence 3D detection冠军
- 运用3D稀疏卷积提取丰富的语义信息,然后在运用class-balanced multi-head network进行3D检测
- 主要是根据数据不平衡设计了对应的采样策略和曾广策略,使得生成一个更加平衡的数据分布。
- 进一步,提出了一个 balanced grouping head 来对具有相似shape进行分类。
- 实验表示比pointpillars在很多情形下要好
Introduction
- 常用的数据集KITTI和最近才出来的数据集NuScence。Nuscence和Kitti不同在于需要同时检测10类。此外,还需要对每个对象预估一个速度和一些属性。因此nuscence会出现imblance的问题。如下图所示,数据类别是不平衡的。
- 目前的method。很多paper大致一样,不过叙述。
- 以前的文章都是一次只训练检测一个,这一篇paper则是同时多分类,得益于nuscence的发布。做multi-task learning的方法,MGDA takes multi-tasks learning as a multi-objective optimization problem, GradNorm 使用 gradient normalization strategies来自适应平衡不同任务的loss;作者的方法采用多种类一起train反而比单个train要好很多。
- 在nuscence中有3种检测任务
(1)lidar track
(2)vision track
(3)open track
在lidar track的检测任务中只允许输入点云数据。vision track也只允许输入camera data。external的数据是不被允许在这两个任务中使用的。open track任务是所有的允许都可以被输入。此外这三分格任务的预训练也是被允许的,作者是使用的lidar track的任务。
总的来说,本文的贡献如下:
- 提出了一种类平衡采样策略来处理在nuScence数据集上超级不均匀的问题。
- 设计了一种能够是的具有相近shapes和category或者size的数据互相靠近,而不同的相互远离的multi-group head network.
- 达到了nuScence的最好的效果
2 Methodology
overall network:
可以看出本文的结构主要由3部分组成:
(1)3D Feature Extractor :这个结构又又两部分组成,一个是submanifold,一个是3D sparse convolutions,最后的输出是 16 × d o w n c a l e − r a d i o 16\times downcale-radio 16×downcale−radio.
(2)第二个网络是region proposal network,这一步输出的是 8 × f e a t u r e − m a p s 8 \times feature-maps 8×feature−maps
(3)第三个网络结构是multi-group head用于生成最终的预测结果。
下面将介绍inputs和对应的的数据曾广策略,后面就是接着介绍上面的几个网络的细节的解释。
2.1 Input and Augmentation
nuScence的数据扫描为:
(
x
,
y
,
z
,
i
n
t
e
n
s
i
t
y
,
r
i
n
g
i
n
d
e
x
)
(x, y, z, intensity, ringindex)
(x,y,z,intensity,ringindex),每一个都和一个 time-stamp关联。我们遵循官方nuScenes基线[2]的方式,累积10次Lidia扫描,形成密集的点云输入。。实际上,作者的输入时
(
x
,
y
,
z
,
i
n
t
e
n
s
i
t
y
,
∆
t
)
(x, y, z, intensity, ∆t)
(x,y,z,intensity,∆t)的形式的;其中∆t是每个非关键帧扫描相对于关键帧扫描的时间间隔,∆t ranges from 0s to 0.45s。我们使用的gridsize大小是
0.1
m
,
0.1
m
,
0.2
m
i
n
x
,
y
,
z
a
x
i
s
0.1m, 0.1m,0.2m in x, y, z axis
0.1m,0.1m,0.2minx,y,zaxis,所以又转化成了3D卷积的形式。在每一个的voxel中,取同一体素中所有点的均值,得到网络的最终输入。如图2所示的那样,nuScence有着很大的类间不平衡的问题。这其中的蓝色表示的是原始的数据分布.
那么这其中的黄色分布是作者提出的DS Sampling策略后的采样分布。
如同二维的图像识别问题,我们首先是根据一个样本所占的比例复制该样本。一个类别的样本越少,重复该类别的样本就越多,从而形成最终的训练数据集。
更一般地,我们首先在训练集中计算在某一特定类的点云样本采样数,接着对所有的类别的总和的点云数量进行采样到128106个点。注意到这可能会出现重复,因为不同类别的物体可能会出现在同一个点云中???,直观地说,要实现一个类平衡的数据集,所有类别在训练分割中应该具有相近的比例,因此,我们从上述类特定的样本中随机抽取每个类别的128106(12810)点云样本的10%。因此,我们将训练集从28130个样本扩展到128100个样本,大约是比原始数据集大4.5倍。DS 在训练分割中,抽样可以看作是提高稀有类的平均密度。
此外,作者还使用GT-AUG策略,也就是在SECOND的那个曾广策略(这不就是那个建立数据集的策略吗,这样的话nuscence也是可以跑的了)请注意,点云样本的地面位置需要计算后才能正确放置对象框;因此我们用最小二乘法和 RANSAC来估计每个样本的地面,
f
o
r
m
u
l
a
t
e
d
−
a
s
A
x
+
B
y
+
C
z
+
D
=
0.
formulated-as Ax + By + Cz + D = 0.
formulated−asAx+By+Cz+D=0.
属于地面的点用颜色表示,可以用 A x + b y + C z + D = 0 Ax + by + Cz + D = 0 Ax+by+Cz+D=0表示。地面平均沿z轴方向为-1.82米。Open3D[31]用于可视化。
2.2 Network
3D稀疏卷积采用跳跃链接的方式构造类似残差链接的结构用于特征提取网络。对于输入为 N × C × H × W N ×C ×H ×W N×C×H×W的tensor,特征提取的输出是 N × l × C × C m × H n × W n N×l×C ×\frac{C}{m}×\frac{H}{n}×\frac{W}{n} N×l×C×mC×nH×nW,也就是进行了下采样输出;接下来就是一个类似voxelnet的rpn网络去做回归,基于上述的结构,multi-group 网络就可以用于多类别数据检测分类了。
2.3 Class-balanced Grouping
也就是说假如分布差别很大的数据都共享一个head,那么会造成的问题是可能这里面包含的特征几乎都是那些占比很高的类别,因此这是不好的。换个想法思考,如果我们将不同形状或大小的类放在一起,回归目标将有更大的类间方差,这会使不同形状的类相互干扰;这就是为什么不同形状的人联合训练的效果往往低于单独训练的效果;我们的实验证明,形状或大小相似的类更容易从相同的任务中学习。
作者的直观解释如下:直观地说,相似形状或大小的类在联合训练时可以对彼此的性能做出贡献,因为这些相关类别之间有共同的特征,所以它们可以互相补偿,共同获得更高的检测结果。为此,我们按照一些原则将所有类别手动划分为几个组。每一个特定的head只需要识别和定位属于这些手动分类的类别就可以了。
把10个类别分成几个组的两个原则:
- 具有相似shape和size的物体应该被分在一个类别中。
根据这个准则,分类任务可以分成两个步骤,(1)首先模型识别出物体所属的组,(2)在每一个组内,通过共享的head进行分类。
- 不同组的实例应当适当的平衡。
不同组的实例数量应当变化不大。所以我们把主要的类从形状或大小相似的组中分离出来。例如,汽车,卡车和工程车的形状和尺寸相似,但如果我们把它们放在一起,汽车将占主导地位,所以我们把汽车作为一个单独的小组,把卡车和建筑车辆作为一个小组。
最终作者把10个类别分成了6个group:
- Car
- Truck, Construction Vehicle
- Bus, Trailer
- Barrier
- Motorcycle, Bicycle
- Pedestrian, Traffic Cone
根据对比实验,class-balanced grouping 是最重要的:
2.4 Loss Function
除了常规分类和三维目标检测所需的边界盒回归分支外,我们还增加了一个方向分类分支,如 SECOND[28]所述的一样(SECOND这么多贡献,居然只发了sensors),根据统计,大多数目标盒是平行或垂直于激光雷达坐标轴的。因此我们需要添加一个额外的偏移来消除指向的模糊,在速度估计方面,没有归一化的回归比添加额外的归一化操作可以获得最好的性能。
anchor的提出和voxel的方式是一样的。。。(很大的值得被改进的地方);但是不同类别的anchor拥有大小不一样的size,,每一个类别都是有着一个size和两个方向。对于速度预测,anchor在x和y轴上都是0。
在每一个组内部,我们都是采用的是l1-smooth损失函数,交叉熵用于对方向的判别的准确度判断。我们进一步改进了考虑速度的属性估计。例如,大多数自行车是没有骑手的,但是如果模型预测自行车的速度超过阈值,那么就应该有骑手,所以我们将相应的自行车属性改为with rider。
2.5 Other Improvements
3Training Details
- pytorch (舒服了)
- 我们假设的范围分别是 [ − 50.4 , 50.4 ] × [ − 51.2 , 51.2 ] × [ − 5 , 3 ] m e t e r s [-50.4, 50.4] × [-51.2, 51.2] × [-5, 3] meters [−50.4,50.4]×[−51.2,51.2]×[−5,3]meters
- voxel_size是 0.1 , 0.1 , 0.2 0.1,0.1,0.2 0.1,0.1,0.2,也就是一共会有 1008 × 1024 × 40 1008 × 1024 × 40 1008×1024×40个voxels
- 体素中允许的最大点数设置为10(这么少的吗?),最大非空的voxel为60000个
- 使用10个sweeps(1 key-frame+9 preceeding non-keyframes)
- GT-AUG:
3.1Training Procedure
在推理过程中,每组保留前1000个proposals,然后使用评分阈值进行NMS应用IoU阈值0.2。在NMS之后,每组允许的最大框数为80。
3.2. Network Details
- 3D feature extractor
16, 32, 64, 128 layers of sparse 3D convolution respectively for each block,
- region proposal module
128 and 256 layers respectively for downscale ratio 16× and 8× layers,In each head, we apply 1 × 1 Conv to get final predictions。To achieve a heavier head,we first use one layer 3 × 3 Conv to reduce channels by 1/8,then use a 1 × 1 Conv layer to get final predictions.
Results
代码
目前还只是一个预训练的模型,这里是 代码