【3D目标检测】Voxel-FPN: multi-scale voxel feature aggregation in 3D object detection from point cloud解读


前言

1. 为什么要做这个研究?
目前基于体素的3D目标检测多为从单一尺度的体素中提取体素特征信息,再进行检测,而作者提出了一种密集聚合结构,以自底向上的方式从多尺度编码体素特征。
2. 实验方法是什么样的?

  • 将整个点云按照不同尺寸的体素细胞大小(S、2S、3S)划分成体素网格;
  • 对每个体素随机抽取相同数量N个点,通过VFE结构提取体素特征信息;
  • 高分辨率的体素特征图(体素细胞大小=S)经过多层卷积,下采样输出尺寸缩小一半,然后与低分辨率的体素特征连接,作为下一组卷积块的输入,这样就可以聚合不同尺度的体素特征信息。
  • 使用特征金字塔网络(FPN),将低分辨率的特征输入通过上采样提升再与高分辨率的特征连接,每种尺寸的特征图都会直接连接到检测头(检测头具体结构没说)。

3. 得到了什么结果?
作者的贡献在于采用了多尺度体素特征信息进行检测,网络的结构简单,但是效果很好,不过很多细节没有解释清楚,比如检测头结构没有说;为什么添加了4S的feature,效果反而下降了;以及SSD为什么比FPN-RPN强。

摘要

作者提出了Voxel-FPN,一种基于点云的one-stage 3D目标检测器。核心框架包括编码器网络、解码器和区域候选网络(RPN)。编码器以自底向上的方式提取多尺度体素信息,而解码器采用自顶向下的方式融合不同尺度的多特征映射。

1. 介绍

在自动驾驶应用中,相机和激光雷达可以同时捕捉RGB图像和3D点云,目前实现三维目标检测的方法的可分为:

  • 融合方法,即同步融合RGB图像和预处理后的三维点云的区域特征,需要成熟的2D检测框架将底层点云投影到鸟瞰视图(BEV)中,可能会导致一定程度的信息丢失。
  • 2D检测驱动方法,在RGB图像的检测结果2D bbox扩展后的3D子空间中进行后续的目标检测(视锥方法),RGB图像中缺少目标可能导致检测失败。
  • 基于点云的方法,探索点的特征和内部拓扑来检测三维目标。

本文提出的Voxel-FPN可以看作是点云上操作的一个经典的编码器-解码器框架。现有基于体素的方法只利用了单个尺度的体素,作者编码了多尺度体素特征,然后通过自底向上的途径聚合,设计了一个相应的特征金字塔网络(FPN)来解码这些不同尺度的特征地图,并将它们与最终的检测输出关联起来。作者的贡献包括:

  • 第一次在3D检测任务中对点云数据进行多尺度体素特征聚合。
  • 大量研究多尺度体素特征聚合的合适配置,在处理点云数据进行3D检测任务时,并不是特征越多越好,需要经过筛选。

2.相关工作

2.1 点云表示学习方法
3D目标检测方法需要从点云中学习识别特征,一种简单的方法是将三维点投影到二维平面,利用传统的二维卷积网络进行特征提取,但是降维投影消除了空间相关性,并丢失了点之间的拓扑结构。
PointNet在点云上应用了非线性变换和最大池化操作来预测分类分布。由于每个点共享变换,实际中可学习参数较少,时间消耗相对较低。因为全连接层只影响特征维数,PointNet允许尺寸可变的点云集作为输入。
当使用共享映射处理每个点并通过观察全部点集的相关性来探索全局信息时,PointNet可能会忽略不同尺度上的局部特征。因此,PointNet++着重于从相邻的点构建丰富的层次特征。一个集合抽象层(SA层)由采样局部中心点、分组和一个小型PointNet模块来聚合局部区域的特征。SA层的目的是分层提取特征,然后通过FP层(插值和跨层跳跃连接)进行上采样操作。
PointNet的优点是产生逐点或全局特征的极大灵活性,点可以进一步体素化或者分组,这使得PointNet可以作为一个基本组件嵌入到3D检测框架中。例如,VoxelNet中提出的体素特征编码(VFE),根据点的局部坐标将点分组为体素。与PointNet的架构类似,在每个体素细胞中进行线性转换和最大池化聚集特征,然后收集体素特征并传输到中间层,形成关于局部邻域形状的描述信息。
2.2 基于融合的3D目标检测
MV3D和AVOD将点云投影成多个视图,如在BEV或前视图中,将RGB图像中相应区域的特征叠加,最终融合生成一个用于检测的全面表示。由于2D图像和3D空间稀疏分布的点不对齐,这种融合方法可能存在瓶颈。
2.3 基于点云的3D目标检测
F-PointNets将2D检测结果扩展到3D空间的相应视锥中,然后使用PointNet/PointNet++将点分割成二进制(前景或背景)类,使用前景点进行回归。但当前视图中存在物体遮挡时,视锥中有多个物体,效果就不好了,这种检测方法依赖于输入的2D proposal的质量。
2.4 2D proposal驱动的3D目标检测
基于点云的方法可以进一步分为基于体素和基于点的两个粒度级别。VoxelNet将点分组为体素,提取每个体素中的特征,并将提取的体素特征聚合到中间的卷积层中进行检测。PointPillars利用两个物体在高度维度上没有重叠的先验知识,只在BEV平面实现体素化,点被分组成垂直列,而不是跨步体素。相对于在VoxelNet中需要大量计算的3D卷积,PointPillars向2D卷积转移,从而大大降低了点特征提取的空间和时间复杂度。
PointRCNN是一个two-stage的3D检测器,首先提取逐点特征,并将每个点作为候选框的回归中心。为了减少过多的输入点,在第一阶段使用标准的PointNet++来分割点,只将前景点作为回归目标,在第二阶段,生成的3D候选框和感兴趣区域(ROI)中的局部聚合特征一起被收集,用于定位和分类细化。

3. 整体架构

如图1所示,所提出的框架主要由三个区块组成:体素特征提取、多尺度特征聚合和具有特征金字塔结构的区域候选网络(RPN-FPN)。
在这里插入图片描述
3.1 体素特征提取
3D空间被分成不同的候选区域,并从鸟瞰视图生成默认锚定网络。假设点云的范围是沿着xyz轴的

W

,

H

,

D

W,H,D

W,H,D范围空间,被分成均匀分布的体素细胞,表示为

(

v

W

,

v

H

,

v

D

)

(v_W, v_H, v_D)

(vW,vH,vD),产生的体素网格的尺寸为

(

W

/

v

W

,

H

/

v

H

,

D

/

v

D

)

(W/v_W, H/v_H, D/v_D)

(W/vW,H/vH,D/vD),点云中的点根据各自的坐标被分组到这些体素中。由于点云的稀疏性,每个体素中的点数可能不同,为了减少学习偏差,对每个体素随机抽取相同数量N个点。
每个体素中的点被收集来形成输入特征。然后使用如图2所示的体素特征编码(VFE)块来提取体素特征。一个VFE块包括全连接层和最大池化层,并通过逐点连接获得逐点特征。在几个VFE块后,通过最大池化操作获得一个聚合输出。这样输入的点云就被转换成体素特征。
在这里插入图片描述
3.2 多尺度特征聚合
考虑到点云在3D空间中的密度不均匀,体素网格的单一尺度设置不足以表示场景中所有可用的信息。因此,作者提出了一种密集聚合结构,以自底向上的方式从多尺度编码体素特征。
一个基本体素的大小为S,作者迭代地将3D空间体素化为S、2S、4S等多种大小,产生多尺度的体素特征。作者将两倍尺寸的高分辨率的特征映射送入多个卷积块,然后下采样输出与低分辨率的体素特征连接,合并为下一个尺度卷积块的输入,从而形成跨越不同体素尺度的聚合特征的层次结构。
3.3 区域生成网络(RPN)
RPN是解码输入特征映射并将其转换为候选框的关键模块。作者以不同尺度体素生成的特征图作为RPN的输入,采用特征金字塔网络(FPN)结合点云的多尺度特征。除了用于多尺度特征聚合的自底向上路径外,作者还构建了一个自顶向下的FPN,有效为多个体素特征构建一个丰富、分层的特征金字塔。每个层次的体素金字塔都可以用来检测相应区域的三维物体。
图1右侧为RPN-FPN区块的结构,对于低分辨率的输入,作者将x-y平面的分辨率提高了两倍。然后通过逐元素相加,将上采样的映射与经过1×1、3×3卷积层的对应映射合并,重复该过程,直到达到最佳分辨率。表示体素特征的最终集合

{

P

1

,

P

2

,

P

3

}

\{P_1, P_2, P_3\}

{P1,P2,P3},对应${C_1, C_2, C_3},分别具有不同的体素尺寸和范围。检测头附着在特征金字塔上,每个默认的3D锚被分配相应的地图,输出类别预测、位置回归和方向预测。
3.4 Loss设计
回归和分类的变量:
在这里插入图片描述

4. 实验

4.1 实验细节
在事先知道没有车辆高度重叠的情况下,点云中x,y,z的取值范围限制为[(0, 69.12), (-39.68, 39.68), (-3, 1)]。相应的,在x-y平面上使用3种分辨率用于体素化点云空间,产生的体素大小分别为S, 2S, 4S,下面的实验设置基于S=0.16。每个体素的最大点数设置为[100, 200, 300],体素的最大数量设置为[12000, 8000, 6000]。然后采用2层输出通道为64的VFE对点云进行体素特征提取。体素化后,每个体素中的点特征

(

x

i

,

y

i

,

z

i

,

r

i

)

(x_i, y_i, z_i, r_i)

(xi,yi,zi,ri)都与它们相对平均点坐标的偏移量

(

x

i

x

,

y

i

y

,

z

i

z

)

(x_i - \overline{x}, y_i - \overline{y}, z_i - \overline{z})

(xix,yiy,ziz)连接作为VFE的输入,表示为

(

x

i

,

y

i

,

z

i

,

r

i

,

l

i

,

,

x

i

x

,

y

i

y

,

z

i

z

)

(x_i, y_i, z_i, r_i, l_i,,x_i - \overline{x}, y_i - \overline{y}, z_i - \overline{z})

(xi,yi,zi,ri,li,,xix,yiy,ziz)。具有7个通道的点特征的体素被传入VFE以产生64个通道的体素特征,获得3个不同的体素特征图,其张量形状为(432, 496, 64)、(216, 248, 64)和(108, 124, 64),那么具有最大特征图的(432, 496, 64)将作为卷积网络的基础部分。
作者使用conv(cout, k, s)来表示标准的2D卷积块,其中cout, k, s分别表示输出通道数、卷积核大小和步长。RPN中使用3个卷积块,其中block-1由3个卷积层组成 (conv(64, 3, 2)-conv(64, 3, 1)*2),block-2是5个卷积层 (conv(128, 3, 2)-conv(128, 3, 1)*4),block-3也是5个卷积层(conv(256, 3, 2)-conv(256, 3, 1)*4) 。另外两个体素特征映射连接到卷积网络中具有相同形状的相应特征映射。
特征金字塔网络在RPN中的具体实现如图3所示,作者比较了两种形式的合并操作’add’和’concat’,发现使用’concat’操作的网络性能更好。其中

c

o

n

v

k

×

k

(

n

1

,

n

2

,

s

)

conv k×k(n_1, n_2, s)

convk×k(n1,n2,s)表示一个卷积模块的kernel size=k,输入通道数=

n

1

n_1

n1,输出通道数=

n

2

n_2

n2,步长=s。
在这里插入图片描述
4.2 消融实验
在这里插入图片描述
作者这边说0.64对于平均汽车尺寸而言过大,因此加了反而不利于最终表现。

4.3 多种方法比较
在这里插入图片描述

5. 总结

作者提出了Voxel-FPN,仅从点云数据中学到一种新的one-stage 3D检测器。它对来自不同接收域的多尺度体素网格进行编码,并通过自顶向下的金字塔网络将其解码为最终的特征图,形成丰富的特征图层次结构。通过消融实验发现,特征表示并不是越多越好,而要进行筛选以获得最好的性能。

版权声明:本文为CSDN博主「向上的毛毛」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_41317766/article/details/115297041

向上的毛毛

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

二维目标检测sota---TOOD任务对齐的一阶目标检测算法

代码链接 paper链接 个人博客 问题 本文首先提出了一个目前一阶目标检测器存在的普遍问题就是在head部分将分类和定位这两个任务并行的来做了。这样的话就存在两个任务之间不对齐的问题。因为两个任务是的目标不一样。分类任务更加关注目标的