Advertisement

【3D目标检测】PIXOR: Real-time 3D Object Detection from Point Clouds解读

阅读量:

文章目录

  • 前言
    • 摘要
    • 1. 介绍
    • 2.相关工作
    • 3. PIXOR 检测器
    • 4 结果
    • 5. 总结

前言

1. 为什么要做这个研究?

  • 将点云体素化做3D卷积计算量大,而且由于点云的稀疏性,很多计算都是不必要的。
  • 将点云投影到一个平面上做2D卷积,会丢失部分信息。
  • 作者考虑可以输入的是3D体素,但是做的是2D卷积。

2. 实验方法是什么样的?

  • 输入是36个通道的3D体素数据,包括35个通道的3D体素特征,每个体素网格通过1和0表示该网格内是否有点云中的点,还有1个通道代表体素网格的反射率。
  • 在鸟瞰图下做2D卷积预测目标框,不预测z值和框的高度(建立在自动驾驶所有物体大都处于同一个平面的情况),包括中心点坐标、航向角以及框的长宽。
  • 不使用anchor,以缩小GT框内的像素点为正例点,放大框以外的像素点为负例点,中间部分的点不参与计算损失。

3. 得到了什么结果?

  • PIXOR作为one-stage、proposal-free的3D目标检测网络,没有预测z值,对于输入的36个通道的3D体素表征采用2D CNN处理,结果和MV3D的结果差不太多。另外,在正负例样本的选择上比较有新意。

摘要

作者解决了自动驾驶环境下直接从点云进行实时3D目标检测的问题。通过鸟瞰图(BEV)表示场景,可以更加有效地利用3D数据,并提出了PIXOR,一种无候选框的one-stage检测器。PIXOR能够在高精度和实时效率(10 FPS)之间取得平衡。

1. 介绍

3D目标检测使用的数据源包括RGB-D传感器得到的带有深度信息的图像和激光雷达得到的点云数据。雷达会以点云的形式生成非结构化数据,360°扫描包含大约10^5个3D点,计算量大。
现有的点云表现形式主要分为两种:3D体素网格和2D投影。3D体素网格将点云转为规则间隔的3D网格,可用于实现3D卷积,但由于点云的稀疏性,因此体素网格非常稀疏,很大一部分的计算是多余的。另一种方法是将点云投影到一个平面上,然后将其离散化为基于2D图像的表示形式,并应用2D卷积,但这样会丢失信息。
PIXOR是one-stage, proposal-free的密集目标检测器,可有效利用2D鸟瞰图(BEV)。作者使用BEV表示是因为与3D体素网格相比,其在计算上更友好,并且保留了度量空间,使得模型能够探索有关物体类别的大小和形状的先验知识。PIXOR可以在鸟瞰范围内输出真实尺寸、精确定向的边界框,在两个公开的数据集测试中保持了领先的精度和运行速度。

2.相关工作

2.1 基于CNN的目标检测
目前的目标检测方法很多都引入了目标候选框,如Region-CNN(RCNN)、Faster-RCNN等。基于候选框的检测器在准确度上表现出色,但是Two-Stage算法不适合实时应用。
One-Stage 直接回归物体的类别概率和位置坐标值(无region proposal),准确度低,但速度相较two-stage快,目前常用的典型One-Stage目标检测网络包括YOLO系列、SSD等。
在这里插入图片描述
Two-Stage 先由算法生成一系列作为样本的候选框,再通过CNN进行样本分类。在训练网络时,先训练RPN网络,再训练目标区域检测的网络,网络准确度高,速度较One-Stage慢,典型代表包括RCNN、Faster R-CNN。
在这里插入图片描述
作者提出的检测器遵循One-Stage密集目标检测器的思想,通过重新设计输入表示、网络体系结构和输出参数将其扩展到实时3D目标检测,并且重新定义目标定位函数,去掉了预定义目标锚点的超参数,得到更简单的检测框架。
2.2 基于点云的3D目标检测
之前的3D目标检测器有的通过在3D体素网格上使用3D-CNN检测目标,有的将3D点云投影到2D视图上应用2D-CNN检测目标。作者提出的检测器仅将鸟瞰图表示用于自动驾驶环境下的实时3D目标检测,这里假设所有目标都位于同一地面。

3. PIXOR 检测器

作者提出的PIXOR检测器可以通过LIDAR点云产生非常准确的边界框,包括3D空间中的位置和航向角。检测器利用了LIDAR点云的2D表示,与3D体素网格相比更紧凑。接下来将介绍检测器的输入表示、网络体系结构,定向边界框编码以及有关检测器的学习和推断的详细信息。
在这里插入图片描述
3.1 输入表示
由于点云的稀疏性和不均匀分布,将点云转成3D体素网格再进行三维卷积会造成很多不必要的计算。因此,作者单独采用鸟瞰图来表示场景,将维度降为2,并且在颜色通道中保留高度信息,这样就可以在BEV表示中应用二维卷积。在自动驾驶中,物体一般都处于同一地面,因此这种降维是合理的,并且由于是从鸟瞰图检测目标,因此不会遇到物体之间遮挡的问题。
体素化LIDAR表示的常用特征是占有率、强度(反射率)、密度和高度特征。在PIXOR中,作者只使用占有率和强度作为特征。作者定义要检测的场景的3D物理尺寸为L×W×H,然后以每单元d_L×d_W×d_H离散3D矩形空间中的3D点。每个单元格的值均被编码为占有率(如果该单元格存在点,则为1,否则为0)。离散化后得到占有率特征为\frac{L}{d_L}×\frac{W}{d_W}×\frac{H}{d_H}。同样对于反射率也进行编码(实际值归一化为[0,1]以内),得到强度特征为d_L×d_W×H。最终的表示是3D占有张量和2D反射率图像的结合,其形状为\frac{L}{d_L}×\frac{W}{d_W}×(\frac{H}{d_H}+1)
3.2 网络结构
PIXOR使用全卷积神经网络,面向密集3D目标检测设计,采用无proposal方案,这样就不需要去设计object anchors,可以直接在单个阶段输出每个像素的预测,每个预测都对应一个3D目标的估计。
整个体系结构可以分为两个子网:主干网络(Backbone Network)和头网络(Header Network)。主干网络用于特征提取,头网络用于不同任务的预测(如目标识别和定位)。
3.2.1 主干网络
CNN的卷积层用于从输入特征中提取完整表达,池化层用于对特征图下采样,节约计算并使表达更加鲁棒。Down-sampling因子通常为16,并且通常在高分辨率下具有较少的层,在低分辨率下具有较多的层。这对图像很有效,因为目标通常像素尺寸很大,但若待测物体太小,则会导致引发问题。比如使用0.1m的离散化分辨率时,典型的车辆尺寸为18×40像素,经过16倍下采样后,仅覆盖3个像素。
一种解决方法是使用更少的池化层,然而这样会限制最终特征图中每个像素的感受野大小,限制表示能力。另一种方法是使用卷积膨胀,但这将导致在高级特征图中出现棋盘状伪像。作者给出的解决方法是使用16倍下采样因子,但做了两个修改,一是在底层多加几个有小通道数的层来提取细节信息,二是使用类似FPN的方式,将高分辨率特征图和低分辨率特征图结合,以便对最终的特征表示进行上采样。
图2展示了主干网络的体系结构,总共有5个层块。第1块由2层kernel size=3×3, channel=32, stride=1的卷积层组成,其作用是提取更多的特征信息。第2-5块由残差层组成(层数分别为3,6,6,3),每个残差块的第一个卷积层步数为2,其他卷积层步数为1。因此整个由下至上的过程相对于原输入图像实现了16×down-sampling,也就是Res_block_5输出的特征图尺寸是原图的\frac{1}{16}。再接着就是两个Upsample+Conv,将输入的16×down-sampling特征图上升至4×down-sampling,也就是原图尺寸的\frac{1}{4}。上采样中还有一个左右两侧对应尺寸的feature map的add操作,将底部细节信息高层语义信息 结合到一起增强feature map的最终表示。
特征图变化(长):800 → 400 → 200 → 100 → 50 → 100 → 200。特征图融合就是第一个L=100的特征图和后一个L=100的融合,上采样输出L=200的特征图,再与第一个200融合,得到最终表示的feature map。
在这里插入图片描述
3.2.2 头网络
头网络是一个多任务网络,同时处理目标识别和定位,被设计成小而高效的。分类分支在sigmoid激活函数后输出单通道特征图,回归分支产生6个通道非线性特征图。两个分支在分享权重的层数上存在平衡问题。一方面希望更有效地利用权重,另一方面,两个分支是不同的子任务,希望它们更加独立和专业化。
作者将每个目标对象参数化为定向的bounding box \{\theta, xc, yc, w,l\},每个元素对应于在[-\pi, \pi]范围内的航向角、目标的中心位置(xc, yc)和目标的大小(w,l)。这里忽略了3D目标在Z轴上的位置和大小,因为自动驾驶这样的应用中,感兴趣的物体被限制在同一个地面上,因此只关心在该平面如何定位目标。对于位置(p_x,p_y),回归分支的表示是\{cos(\theta), sin(\theta), dx, dy, w, l\},见图3。注意,航向角被分解为两个相关值,以加强角度距离约束。前两个用于确定\thetadxdy用于确定bounding box的中心点的偏移(默认中心点为当前像素点所在的位置),后两个量直接预测bounding box的长宽。学习目标为\{cos(\theta), sin(\theta), log(dx), log(dy,) log(w), log(l)\},在训练集之前被标准化为零均值和单位方差。
在这里插入图片描述
3.3 学习和推理
作者采用多任务loss来训练整个网络。上面头网络一共有6+1个输出,6个回归量,一个类别。具体而言,在分类输出p上使用交叉熵损失,在回归输出g上使用smooth l_1损失。分类过程中正、负样本都参与,回归只用正样本。
在这里插入图片描述
由于场景的很大一部分属于背景,因此存在严重的类别不平衡,故采用focal loss降低负样本的影响。
在这里插入图片描述

4 结果

PIXOR在KITTI鸟瞰图目标检测基准上,在精度和速度方面都取得了较好的性能。
在这里插入图片描述
4.1 KITTI上的BEV目标检测
4.1.1 实现细节
作者将点云的关注区域设为[0,70]×[-40,40]米,并以0.1m离散化分辨率进行鸟瞰投影,高度设为[-2.5,1]米,并将所有点分成35个切片,每片尺寸为0.1m,再加上一个反射率通道,这样输入表示的尺寸为800×700×16。
4.1.2 检测结果
在这里插入图片描述
4.2 消融实验
作者试验了不同的主干网络,以及之前提出的头网络在分类和回归两个分支分享权重的问题,发现完全共享结构效果最佳。
在这里插入图片描述
在这里插入图片描述
图6给出一些检测的结果图,检测结果是红色框,绿色值是置信度,ground-truth是蓝色,灰色区域不在摄像机范围内。
在这里插入图片描述
4.3 优化
回归损失 除了在回归目标的每个维度上应用smooth l_1损失,作者还提出了decoding loss。先根据\theta、预测框中心点(x,y)和框的长宽确定4个边角点的位置,然后4个边角点与GT(ground-truth)的边角点计算smooth l_1损失。实验发现先用原来的smooth l_1损失训练一定时间后再用decoding loss微调有助于提高性能。
数据采样与扩充 原本在基于proposal方法中,正样本和负样本由proposal和GT之间的IoU定义,高于IoU阈值的预测框就是正样本,低于的就是负样本。但在PIXOR中没有proposal,因此作者采用了一个直接的方法:所有像素点在GT内的就是正样本,不在的就是负样本。实际上,由于GT box边界上的点预测的框不准,在选择正例点的时候还要将GT box进行放缩,在缩小框内的点作为正例点,忽略两个放缩框之间的点,放大框以外的点作为负例点。

5. 总结

PIXOR是一个one-stage、无proposal的密集目标检测器,是运行在LIDAR点云上的实时3D目标检测器。在自动驾驶的3D目标定位的情况下,为了提高计算效率,PIXOR将鸟瞰表示作为输入。在不同的测试集中,PIXOR的精度和运行速度都优于其他方法。

全部评论 (0)

还没有任何评论哟~