论文阅读 SECOND:Sparsely Embedded Convolutional Detection

标题:SECOND:Sparsely Embedded Convolutional Detection
作者:Yan Yan,Yuxing Mao,and Bo Li
来源:sensors 2018

摘要:
  基于LiDAR或基于RGB-D的对象检测被用于从自动驾驶到机器人视觉的众多应用中。 在处理点云LiDAR数据时,基于体素的3D卷积网络已经使用了一段时间,以增强信息的保留性。 但是,仍然存在问题,包括推理速度慢和方向估计性能低。 因此,我们研究了一种针对此类网络的改进的稀疏卷积方法,该方法显着提高了训练和推理的速度。 我们还介绍了一种新的角度损失回归形式,以改善方向估计性能;以及一种新的数据增强方法,可以提高收敛速度和性能。 拟议的网络可在保持快速推理速度的同时,在KITTI 3D对象检测基准上产生最新的结果。

1.介绍
  近年来,在基于卷积神经网络(CNN)的对象检测[1,2],实例分割[3]和关键点检测[4]方面取得了长足的进步。这种检测形式可用于基于单目[5]或立体图像[6]的自动驾驶中。但是,用于处理图像的方法不能直接应用于LiDAR数据。对于自动驾驶和机器人视觉等应用而言,这是一个重大限制。最先进的方法可以实现2D汽车检测的90%的平均精度(AP),但对于基于3D图像的汽车检测,则只能达到15%的AP [7]。为了克服仅由图像提供的空间信息的不足,点云数据在3D应用程序中变得越来越重要。点云数据包含准确的深度信息,并且可以由LiDAR或RGB-D摄像机生成。
  当前许多3D检测器使用融合方法来利用图像和点云数据。点云数据将转换为2D鸟瞰图像[8]或投影到图像[9,10]。然后使用卷积网络提取特征,并应用融合过程在图像和其他视图之间映射特征。在[11]中,最初使用2D检测器生成的边界框过滤点云数据,然后使用卷积网络直接处理这些点。在其他方法中,例如[12-15]的方法,通过量化将点云数据分配给体网格单元,然后应用3D CNN。
最近,开发了一种称为VoxelNet [14]的新方法。这种方法在单级端到端网络中结合了原始点云特征提取和基于体素的特征提取。它首先将点云数据分组为体素,然后在将体素转换为要用于区域建议网络(RPN)的密集3D张量之前,逐个体素应用线性网络体素[16]。目前,这是最先进的方法。但是,它的计算成本使其难以用于实时应用程序。在本文中,我们提出了一种称为SECOND(稀疏嵌入式卷积检测)的新颖方法,该方法通过最大限度地利用点云数据中存在的丰富3D信息来解决基于3D卷积的检测中的这些挑战。该方法对现有的卷积网络体系结构进行了一些改进。引入了空间稀疏卷积网络以进行基于LiDAR的检测,并用于在将3D数据下采样为类似于2D图像数据之前从z轴提取信息。我们还使用基于GPU(图形处理单元)的规则生成算法进行稀疏卷积以提高速度。与密集卷积网络相比,我们的基于稀疏卷积的检测器在对KITTI数据集进行训练期间实现了4倍的速度增强,并且推理速度提高了3倍。作为进一步的测试,我们设计了一个用于实时检测的小型模型,该模型在GTX 1080 Ti GPU上的运行时间约为0.025 s,而性能仅有一点损失。
  使用点云数据的另一个优点是,通过对对象上的指定点进行直接转换,可以非常轻松地缩放,旋转和移动对象。 SECOND结合了基于此功能的新型数据增强形式。生成了一个真实的数据库,其中包含对象的属性和关联的点云数据。然后将从该数据库中采样的对象在训练过程中引入点云。这种方法可以大大提高网络的收敛速度和最终性能。
  除上述内容外,我们还引入了一种新颖的角度损失回归方法,以解决当地面真相与预测之间的方向差等于p时产生的大损失的问题,从而产生与真实情况相同的边界框。边界框。这种角度回归方法的性能超过了我们目前所知的任何方法,包括AVOD中可用的方向向量回归函数[9]。我们还引入了辅助方向分类器以识别对象的方向。
  在提交时,我们的方法针对基于KITTI的3D检测在所有类别上均产生最先进的结果[7],而较大的模型以20 fps的速度运行,较小的模型以40 fps的速度运行。 我们的工作的主要贡献如下:
• 我们将稀疏卷积应用于基于LiDAR的目标检测中,从而大大提高了训练和推理的速度。
• 我们提出了一种改进的稀疏卷积方法,可以使其运行得更快。
• 我们提出了一种新颖的角度损失回归方法,该方法证明了比其他方法更好的方向回归性能。
• 我们针对仅限LiDAR的学习问题引入了一种新颖的数据增强方法,该方法大大提高了收敛速度和性能。

2.相关工作
下面,我们简要回顾基于点云数据和图像的3D对象检测的现有工作。

2.1 基于前视图和基于图像的方法:使用RGB-D数据的2D表示法的方法可以分为两类:基于鸟瞰(BEV)的方法和基于正视图的方法。 在典型的基于图像的方法[5]中,首先生成2D边界框,类语义和实例语义,然后使用手工制作的方法来生成特征图。 另一种方法[17]使用CNN来从图像估计3D边界框,并使用专门设计的离散连续CNN来估计对象的方向。 使用LiDAR的方法[18]涉及将点云转换为正视图2D地图,以及2D检测器的应用以定位正视图图像中的对象。 与其他方法相比,这些方法对于BEV检测和3D检测均表现不佳。

2.2 基于鸟瞰的方法MV3D [8]是第一种将点云数据转换为BEV表示形式的方法。 在这种方法中,将点云数据转换为几个切片以获得高度图,然后将这些高度图与强度图和密度图连接起来以获得多通道特征。 ComplexYOLO [19]使用YOLO(一次只看一次)[20]网络和复杂的角度编码方法来提高速度和方向性能,但是在预测的3D边界框中使用固定的高度和z位置。 在[21]中,设计了一种快速的单级无提议检测器,该检测器利用了特定的高度编码的BEV输入。 但是,所有这些方法的关键问题是,在生成BEV映射时会丢弃许多数据点,从而导致垂直轴上的信息大量丢失。 这种信息丢失严重影响了这些方法在3D边界框回归中的性能。

2.3 大多数基于3D的方法要么直接使用点云数据,要么需要将这些数据转换为3D网格或体素,而不是生成BEV表示。在[12]中,将点云数据转换为包含特征向量的体素,然后使用一种新颖的基于卷积的基于投票的算法进行检测。参考[13]通过利用以特征为中心的投票方​​案来实现新颖的卷积来利用点云数据的稀疏性,从而提高了计算速度。这些方法使用手工制作的功能,尽管它们在特定的数据集上产生令人满意的结果,但它们无法适应自动驾驶中通常遇到的复杂环境。 [22,23]的作者采用一种独特的方法开发了一种系统,该系统可以借助基于CNN的新型架构直接从点云中学习点状特征。 [24]使用k邻域方法和卷积一起从点云中学习局部空间信息。这些方法直接处理点云数据,以在k个邻点上执行一维卷积,但是它们不能应用于大量点。因此,需要图像检测结果来过滤原始数据点。一些基于CNN的探测器将点云数据转换为体素。在[15]中提出的方法中,将点云数据离散化为二值体素,然后应用3D卷积。 [14]的方法将点云数据分组为体素,提取体素特征,然后将这些特征转换为密集张量,以使用3D和2D卷积网络进行处理。这些方法的主要问题是3D CNN的高计算成本。不幸的是,3D CNN的计算复杂度随着体素分辨率的增加而呈三次方增长。在[25,26]中,设计了空间稀疏卷积,以提高3D卷积速度,而参考文献。 [27]提出了一种新的3D卷积方法,其中输出的空间结构保持不变,这大大提高了处理速度。在[28]中,子流形卷积被应用于3D语义分割任务。但是,尚无将稀疏卷积用于检测任务的已知方法。与所有这些方法类似,我们的方法利用了3D卷积体系结构,但它合并了一些新颖的改进。

2.4 基于融合的方法一些方法将摄像机图像与点云结合在一起。例如,[29]的作者在具有不同接收场的两个尺度上使用3D RPN来生成3D方案,然后将每个3D方案的深度数据中的3D体积馈送到3D CNN和相应的2D色块中。 2D CNN可以预测最终结果。在[8]中提出的方法中,将点云数据转换为正视图和BEV,然后将从两个点云图提取的特征图与图像特征图融合。带有图像的MV3D网络比仅使用BEV的网络性能要好得多,但是这种结构不适用于小型物体,并且运行缓慢,因为它包含三个CNN。 [9]的作者将图像与BEV结合在一起,然后使用新颖的体系结构生成高分辨率特征图和3D对象建议。在[11]中,2D检测结果用于过滤点云,从而可以将PointNet [22]应用于预测3D边界框。但是,基于融合的方法通常运行缓慢,因为它们需要处理大量的图像输入。具有LiDAR功能的时间同步且经过校准的摄像机的其他要求限制了可使用此类方法的环境,并降低了其鲁棒性。相比之下,我们的方法仅使用LiDAR数据即可达到最先进的性能。

3.SECOND Detector
3.1.1 Point Cloud Grouping
  在这里,我们遵循[14]中描述的简单过程来获得点云​​数据的体素表示。我们首先根据指定的体素数量限制预先分配缓冲区;然后,我们遍历点云并将点分配给它们关联的体素,然后保存体素坐标和每个体素的点数。我们在迭代过程中基于哈希表检查体素的存在。如果与点有关的体素尚不存在,则在哈希表中设置相应的值;否则,我们将体素的数量增加一。一旦体素数量达到指定的限制,迭代过程将停止。最后,我们获得所有体素,其坐标以及每个体素的点数作为实际体素数。为了检测相关类别中的汽车和其他物体,我们基于沿z y的[-3,1] [-40,40] [0,70.4] m的地面真实分布来裁剪点云x轴。对于行人和骑车人检测,我们使用在[points3,1] [-20,20] [0,48] m处的作物点。对于较小的模型,我们仅使用[-3,1s] [-32,32] [0,52.8] m范围内的点来提高推理速度。需要根据体素大小对裁剪区域进行轻微调整,以确保可以在后续网络中正确缩采样生成的特征图的大小。对于所有任务,我们使用的体素大小为vD = 0.4 vH = 0.2 vW = 0.2 m。用于汽车检测的每个空体素的最大点数设置为T = 35,这是根据KITTI数据集中每个体素的点数分布来选择的;由于行人和骑自行车者相对较小,因此,体素特征提取需要更多点,因此行人和骑自行车者检测的相应最大值设置为T = 45。
  所提议的第二检测器如图1所示,由三部分组成:(1)体素特征提取器;(2)稀疏卷积中间层;(3)RPN。

论文阅读 SECOND:Sparsely Embedded Convolutional Detection_第1张图片
3.1.2 体素特征提取器如[14]中所述,我们使用体素特征编码(VFE)层提取体素特征。 VFE层将同一体素中的所有点作为输入,并使用由线性层,批归一化(BatchNorm)层和整流线性单元(ReLU)层组成的完全连接网络(FCN)来提取逐点特征。 然后,它使用逐元素最大池来获取每个体素的局部聚合特征。 最后,它将获得的要素平铺,并将这些平铺的要素和逐点要素连接在一起。 我们使用VFE(cout)表示将输入要素转换为cout维输出要素的VFE层。 类似地,FCN(cout)表示将输入要素转换为cout维输出要素的Linear-BatchNorm-ReLU层。 总体而言,三维特征提取器由几个VFE层和一个FCN层组成。

3.1.3 稀疏卷积中间提取器
稀疏卷积网络参考。 [25]是第一篇介绍空间稀疏卷积的论文。 在这种方法中,如果没有相关的输入点,则不计算输出点。 这种方法在基于LiDAR的检测中具有计算优势,因为在KITTI中对点云进行分组的步骤将生成5k至8k的体素,其稀疏度接近0.005。 作为常规稀疏卷积的替代方法,子流形卷积[27]将输出位置限制为在且仅当相应的输入位置处于活动状态时才处于活动状态。 这避免了太多活动位置的产生,这可能由于活动点数量过多而导致后续卷积层速度降低。
  稀疏的卷积算法。让我们首先考虑二维密集卷积算法。我们用W_(u,v,l,m)表示滤波后的元素,D_(u,v,l)表示图像元素,其中u和v是空间位置指标,l表示输入通道,m表示输出通道。函数P(x, y)生成需要根据所提供的输出位置计算的输入位置。因此,Y_(x,y,m)的卷积输出为:

在这里插入图片描述
  其中x和y是输出空间索引,而u -u0和v-v0表示内核偏移量u和v坐标。 可以使用基于通用矩阵乘法(GEMM)的算法(也称为基于im2col的算法[30])来收集构造矩阵Dp(x,y),l 所需的所有数据,然后执行GEMM 本身:
在这里插入图片描述
  这里的W*,l,m就是上式Wu-uo,v-vo在GEMM中的形式,对于离散的D’i,j和其相关的输出Y’j,m,直接的计算可以写成如下的形式:
论文阅读 SECOND:Sparsely Embedded Convolutional Detection_第2张图片
  P’(j)是获取输入索引i和滤波器偏移量的函数。下标k是 1d内核对应于u-uo情况和v-vo方程(1)偏移,下角标 i 对应的下标u和v在方程(1)。GEMM-based版本的方程(3)由以下公式给出:
论文阅读 SECOND:Sparsely Embedded Convolutional Detection_第3张图片
  聚合的离散数据矩阵D’p’(j),l,仍然包含许多不需要被计算的0。为了解决这个问题,除了直接转换成矩阵方程3和4,我们重写公式3成如下形式:
论文阅读 SECOND:Sparsely Embedded Convolutional Detection_第4张图片
  Rk,j称为Rule, 是一个矩阵,该矩阵在给定内核偏移k和输出索引j的情况下指定输入索引i。 公式(5)中的内部总和无法通过GEMM计算,因此我们需要收集必要的输入以构建矩阵,执行GEMM,然后将数据分散回去。 实际上,我们可以使用预先构建的输入-输出索引规则矩阵直接从原始稀疏数据中收集数据。 这样可以提高速度。 详细地,我们构造尺寸为K x Nin x 2的规则矩阵表Rk,i,t = R [k,i,t],其中K是内核大小(表示为体积),Nin是数量 输入要素,t是输入/输出索引。 元素R [:,:,0]存储用于收集的输入索引,元素R [:,:,1]存储用于散射的输出索引。 图2的顶部显示了我们提出的算法。论文阅读 SECOND:Sparsely Embedded Convolutional Detection_第5张图片
Rule生成算法
  当前实现面临的主要性能挑战[31]与规则生成算法相关。 通常方法使用哈希表的基于CPU的规则生成算法,但是这种算法很慢,并且需要在CPU和GPU之间进行数据传输。 规则生成的更直接方法是遍历输入点,以查找与每个输入点相关的输出,并将相应的索引存储到规则中。 在迭代过程中,需要一个表来检查每个输出位置的存在,以决定是否使用全局输出索引计数器来累积数据。 这是阻碍在算法中使用并行计算的最大挑战。

  其中首先生成的是输入特征中的索引relu0,根据输入坐标的索引生成关联空间坐标的索引rule1,两者进行去重unique,得到输出坐标的索引。接着就计算处relu0和relu1在输出坐标的的索引位置变换。得到之后就可以通过relu0将特征映射返回到原始的特征坐标中。

  在我们的案例中,我们设计了基于GPU的规则生成算法(算法1),该算法在GPU上运行得更快。 图1的底部显示了我们提出的算法。 首先,我们收集输入索引和关联的空间索引,而不是输出索引(算法1中的第一个循环)。 在此阶段中获得了重复的输出位置。 然后,我们对空间索引数据执行独特的并行算法,以获得输出索引及其关联的空间索引。 从先前的结果中生成与稀疏数据具有相同空间尺寸的缓冲区,以便在下一步中进行表查找(算法1中的第二个循环)。 最后,我们对规则进行迭代,并使用存储的空间索引来获取每个输入索引的输出索引(算法1中的第3个循环)。 表1显示了我们的实现与现有方法之间的性能比较。
论文阅读 SECOND:Sparsely Embedded Convolutional Detection_第6张图片
表1.各种卷积实现的执行速度比较。 SparseConvNet是子流形卷积的正式实现[27]。 所有基准测试均使用来自KITTI数据集的数据在GTX 1080 Ti GPU上运行。
论文阅读 SECOND:Sparsely Embedded Convolutional Detection_第7张图片
  稀疏卷积中间提取器我们的中间提取器用于学习有关z轴的信息,并将稀疏的3D数据转换为2D BEV图像。 图3显示了中间提取器的结构。 它由两个阶段的稀疏卷积组成。 每个相位包含多个子流形卷积层和一个正常的稀疏卷积,以在z轴上执行下采样。 将z维降采样到一或两个后,稀疏数据将转换为密集特征图。 然后,将数据简单地重塑为类似图像的2D数据(黄色的box代表稀疏卷积,白色代表子流形卷积,红色代表稀疏->密集层。)
论文阅读 SECOND:Sparsely Embedded Convolutional Detection_第8张图片
3.1.4 Region Proposal Network
  RPN [1]最近已开始在许多检测框架中使用。 在这项工作中,我们使用类似于单发多盒检测器(SSD)的[32]架构来构造RPN架构。 RPN的输入包含来自稀疏卷积中间提取器的特征图。 RPN体系结构由三个阶段组成。 每个阶段都从下采样的卷积层开始,然后是几个卷积层。 在每个卷积层之后,应用BatchNorm和ReLU层。 然后,我们将每个阶段的输出上采样到相同大小的特征图,并将这些特征图连接到一个特征图中。 最后,将三个1 x 1卷积应用于类,回归偏移和方向的预测。论文阅读 SECOND:Sparsely Embedded Convolutional Detection_第9张图片
  RPN的详细结构。蓝色框表示卷积层,紫色框表示连接层,天蓝色框表示stride-2下行采样卷积层,棕色框表示转置卷积层。

3.1.5 anchors and targets
  因为要检测的对象大约是固定大小的,所以我们使用固定大小的锚点,该锚点是根据KITTI训练集中所有地面实况的大小和中心位置(旋转0和90度)确定的。对于汽车,我们使用尺寸为w = 1.6 x l = 3.9 x h = 1.56 m的锚,其中心为z =-1.0m。对于行人,我们使用尺寸为w = 0.6 x l = 0.8 x h = 1.73 m的锚,而对于骑行者,则使用w = 0.6 x l = 1.76 x h = 1.73 m的锚;两者都以z =-0.6m为中心。

   为每个锚点分配一个分类目标的热向量,7个箱形回归目标向量和一个方向分类目标的热向量。不同的类别具有不同的匹配和不匹配阈值。对于汽车,将锚点使用联合交叉点(IoU)阈值0.6分配给地面真实对象,如果锚点的IoU小于0.45,则将锚点分配给背景(负值)。 IoU在0.45到0.6之间的锚点在训练期间会被忽略。对于行人和骑自行车的人,我们将0.35用作不匹配阈值,将0.5用作匹配阈值。对于回归目标,我们使用一下的编码功能:
论文阅读 SECOND:Sparsely Embedded Convolutional Detection_第10张图片
  xyz是中心坐标,wlh是宽长高,θ是z轴的偏航角。下标t,a和g分别表示编码值,锚点和真实值。da表示anchor box 的对角线长度。

3.2 训练和推理
3.2.1 loss
角度回归的正弦误差损失:
  先前的角度回归方法,包括角编码,直接编码和矢量编码,通常表现出较差的性能。 拐角预测方法[8]无法确定物体的方向,并且不能用于BEV框几乎为正方形的行人检测。 矢量编码方法[9,19]保留了冗余信息,并导致难以基于LiDAR检测远距离物体。 VoxelNet [14]直接预测弧度偏移量,但是在0和Π弧度的情况之间会遇到对抗性示例问题,因为这两个角度对应于同一框,但是当一个角度被误认为另一个角度时会产生较大的损失。 我们的架构通过引入新的角度损耗回归来解决此问题:
在这里插入图片描述
  下标p表示预测值。 这种减少角度损失的方法有两个优点:(1)解决了0和pai方向之间的对抗性示例问题;(2)自然地针对角度偏移函数对IoU进行建模。 为了解决此损失将方向相反的盒子视为相同的问题,我们在RPN的输出中添加了一个简单的方向分类器。 该方向分类器使用softmax损失函数。 我们使用以下方法来生成方向分类器目标:如果绕地面真相的z轴的偏航旋转大于零,则结果为正;否则,结果为正。 否则为负。
Focal Loss for Classification:
在这里插入图片描述
  训练损失:其中Lcls是分类损失,Lreg-other是位置和尺寸的回归损失,Lreg-θ是我们的新角度损失,Ldir是方向分类损失。 b1 = 1.0,b2 = 2.0和b3 = 0.2是我们损耗公式的常数。 我们使用相对较小的b3值来避免网络难以识别物体方向的情况
在这里插入图片描述
3.2.2 数据增广
从数据库中提取地面实况样本
  我们在训练中遇到的主要问题是地面实况样本的存在太少,这极大地限制了网络的收敛速度和最终性能。 为了解决这个问题,我们引入了一种数据扩充方法。 首先,我们从训练数据集中生成了一个包含所有地面真相标签及其关联点云数据(地面真相3D边界框内的点)的数据库。 然后,在训练过程中,我们从该数据库中随机选择了几个基本事实,并通过级联将它们引入当前的训练点云中。 使用这种方法,我们可以大大增加每个点云的地面真相数目,并模拟存在于不同环境中的对象。 为避免物理上不可能的结果,我们在对地面真相进行采样并除去与其他物体碰撞的所有采样物体后进行了碰撞测试

物体噪声:为了考虑噪声,我们采用了VoxelNet [14]中使用的相同方法,在该方法中,每个地面实况及其点云都是独立且随机变换的,而不是使用相同的参数来变换所有点云。 具体来说,我们使用了从均匀分布Δθ ∈[-p/ 2,p / 2]采样的随机旋转和从高斯分布采样的均值为零且标准偏差为1.0的随机线性变换。
全局旋转和缩放 我们将全局缩放和旋转应用于整个点云和所有地面真相框。 从均匀分布[0.95,1.05]提取缩放噪声,并且[-p/ 4,p / 4]用于全局旋转噪声。

3.2.3 优化我们建议的SECOND检测器是使用随机梯度下降(SGD)训练的。我们使用了在GTX 1080 Ti GPU上运行的Adam优化器,每个小批量总共有三个点云。 对所有模型进行了160个时期的训练(200k次迭代)。 初始学习率为0.0002,指数衰减因子为0.8,每15个周期衰减一次。 使用了0.0001的衰减权重,0.9的beta1值和0.999的beta2值。 用单个GTX 1080 Ti GPU训练大型汽车检测网络需要19小时,而训练较小的模型仅需要9小时。

3.2.4 网络细节
  我们建议使用两种网络:大型网络和小型网络。位于摄像头视锥范围之外的点需要删除。对于汽车检测,在SECOND中使用了两个VFE层,分别是在线性(128)层之后的大型网络是VFE(32)和VFE(128),对于较小的网络是VFE(32)和VFE(64)。因此,对于大型网络,输出稀疏张量的尺寸为128 10 400 352,对于小型网络,输出稀疏张量的尺寸为128 10 320 264。然后,我们使用两阶段的稀疏CNN进行特征提取和降维,如图3所示。每个卷积层都遵循BatchNorm层和ReLU层。所有稀疏卷积层都有一个64输出的特征图,内核大小为(3,1,1)内核大小,步幅为(2,1,1)。对于大型网络,中间块的输出尺寸为64 2 400 352。一旦将输出调整为128 400 352,就可以应用RPN网络。图4显示了RPN的体系结构。我们使用Conv2D(cout,k,s)表示Conv2D-BatchNorm-ReLU层,使用DeConv2D(cout,k,s)表示DeConv2D-BatchNorm-ReLU层,其中cout是输出通道数,k是内核大小和s是大步前进。由于所有图层在所有维度上的大小均相同,因此我们将k和s的标量值使用。所有Conv2D图层均具有相同的填充,所有DeConv2D图层均具有零填充。在我们的RPN的第一阶段,应用了三个Conv2D(128,3,1(2))层。然后,分别在第二和第三阶段中应用五层Conv2D(128,3,1(2))层和五层Conv2D(256,3,1(2))层。在每个阶段,仅对于第一卷积层,s = 2;否则,s =1。我们对每个阶段的最后一个卷积应用单个DeConv2D(128,3,s)层,依次对三个阶段应用s = 1、2和4。对于行人和骑自行车的人检测,与汽车检测的唯一区别是RPN中第一卷积层的步幅为1而不是2。

4.实验
3D detection:
论文阅读 SECOND:Sparsely Embedded Convolutional Detection_第11张图片

你可能感兴趣的:(3D目标检测)