摘要:本文研究在室内、室外的的RGB-D数据上做3D目标检测。之前的方法要么用体素,或者图像,没有数据置换不变性并且不准,本文直接在RGB-D生成的点云数据上进行操作。但是直接在点云数据上搜索(检测)未免范围太大,导致计算量成3次方增长,所以要缩小搜索范围,即在比较大的场景中定位点云数据中的物体(找候选区)。但不是仅仅依赖3D候选区,还要用上2D目标检测的方法和先进的3D深度学习来做定位,并能克服遮挡或者点比较稀疏的问题。在两个数据集KITTI和SUN RGN-D 3D上做了实验。
1 引言
把点云数据进行投射成多视角再利用CNN的方法以及转化为体素进行3DCNN的方法会模糊某些细节。pointnet、pointnet++可以对点云数据直接处理,但是只能做目标分类和语义分割,却不能做实例水平的3D目标检测。
本文用的方法是先用rgb图片生成2D的边界框,用这个边界框在3D点云数据中提取对应的视锥,在视锥内用两个pointnet的变种分别做实例分割和非模态(amodal)边界框回归。分割网络预测每个感兴趣目标的3D掩膜,回归网络预测非模态边界框,这个边界框会包围目标(即使这个目标只有一部分可见)。
之前的做法都是把rgb-d数据作为2d数据用cnn处理,本文是把深度图转化为点云数据用3D算法处理,就能用一些更高效的方法来处理3D数据。比如:
1、坐标变换,更易于学习。
2、在3D空间中学习能够更好理解3D空间的几何(重复、平面、对称)和拓扑结构。
注:所谓非模态,大概就是指即使目标被部分遮挡也能根据这一部分推断出框出整个目标的检测框的意思。
我们方法在kitti上的3D目标检测以及鸟瞰图检测上名列榜首。
对汽车的目标检测速度达到5fps。
关键贡献:
1、提出基于RGB-D数据的3D目标检测方法,Frustum PointNets。
2、展示了训练方法,实现了最先进的性能。
3、大量实验验证。
2 相关工作
在fgb-d数据上的3d目标检测
方法有多种:
基于前视图的方法:用rgb图和先验形状或遮挡形状推断3D边界框;将2D深度图用cnn在2d图片中定位目标。
基于鸟瞰图的方法:MV3D,将雷达点云数据投射成鸟瞰图,然后训练rpn网络得到3D候选框。但这种方法在小物体检测如行人上效果很差,而且如果垂直方向有多个目标这个方法就失效了。
基于3d的方法:一点点迭代成了在体素上做3D卷积的方法,计算量很大。
在点云数据上的深度学习
现有工作多是把点云数据转化为图像或者体素在进行特征学习。pointnet不能做3d目标检测,本文目的就是拓展到3d目标检测上去。
3 问题定义
以rgb-d数据作为输入,在3d空间进行定位和分类。rgb-d中的d指深度数据,是从雷达或者室内深度传感器获得,然后转化为rgb相机坐标系下的点云数据。投射矩阵已知,以便于能够从2d图片区域里获得3D视锥。每个目标最后预测为一个类别数和一个3d框,这个3d框用长宽高(l,w,h),中心点坐标(Cx,Cy,Cz),方向角(θ,φ,ψ )共计9个量表示,实际中由于默认设置,角度只需要获得 航向角θ即可。
4 用Frustum PointNets做3D检测
这个模型主要由3个模块组成,即视锥候选区(Frustum Proposal),3D实例分割,非模态3D边界框预测(Amodal 3D Box Estimation Box)
4.1 视锥候选区
多数3D传感器尤其实时深度传感器生成的数据的分辨率都还没有普通的相机生成的数据的分辨率高。故才有2D检测器生成候选区并进行分类。
用已知的相机的投影矩阵,一个2d边界框可以投射成一个3d搜索视锥空间(这个视锥的前后平面由深度传感器的检测范围决定)。把这个视锥里的所有点云数据搜集起来组成视锥点云。但是这个视锥可能会有很多朝向,故还要做一道标准化,使得视锥的中心轴垂直于图像平面,如下图的a)->b)做的就是这一标准化操作。
2d目标检测网络可以随便选,本文选的是FPN网络。先在ImageNet分类和COCO检测数据集上预训练过,又在KITTI2d目标检测数据集上微调。
4.2 3D实例分割
获得2D区域之后要实现3D目标检测有几种方法:
最直接的方法就是在深度图上用2D的CNN直接回归3D目标检测框。但是由于遮挡以及背景的存在这种方法很难实现精确回归,因为两个目标在3维空间上可能离的很远,用点云数据集更能表现其空间位置关系,但是放在2d图片上他们可能离的非常近。
本文类似于Mask-RCNN的做法,先预测掩膜,这个掩膜指那些属于目标的点(二分类),然后根据这个掩膜用pointNet预测3D检测框。
基于3D的实例分割,能够实现基于残差的3D定位,即不是回归基于传感器的绝对位置,而是回归基于变换后的局部3D掩膜坐标系进行3D边界框回归。
3D实例分割PointNet
这个分割网络以视锥内的点云数据作为输入,为这个视锥内每一个点都预测一个得分,代表它是否属于目标的概率。除了属于目标的点还有其他的点如地面、植被的点。因为每个视锥是根据2D图片做目标检测得出的,所以视锥内一定会有某个目标,但是也可能会有其他目标,比如2D目标检测预测出的是个车,实际这个视锥内还可能有人,那个在这个视锥内人的点就是噪声,但是这些人的噪声点在它所属的视锥内又成了目标,反倒车成了噪声。
所以这个分割PointNet要不仅要能识别某个类别的几何结构,还要能学习遮挡和噪声情况。
假设我们做的是K的3D目标检测,如果我们已经通过2D目标检测知道这个目标是车,就要利用这个先验知识做3D的点分割,分割pointnet就会在视锥内寻找像人的几何结构的点云,实际中把这个先验知识表示为one-hot向量(K维,代表共K个类别)。
获得掩膜之后针对掩膜做局部坐标系变换,原点变为掩膜的质心点坐标,如下图b)->c)。此步并不做归一化,是为了避免破坏掩膜的几何结构。
4.3 非模态3D框预测
用一个框回顾PointNet和一个预处理T-Net网络获得3D边界框。
用T-Net网络实现3D对齐
即使经过上一步的掩膜坐标系变换,但是这个掩膜坐标质心(局部坐标系原点)很可能离实际的非模态框中心很远,故要用一个轻量级的point-net(T-Net)来预测目标的真实中心。然后以预测的真实中心为原点再次变换坐标系。这个T-net的训练方式跟之前的有些不同,之前的T-net没有明确的监督,这里是以真实的标签框中心作为监督。此变换如图4的c)->d)步骤。
非模态3D框预测PointNet
这个网络有点像第一代的分类网络,网络输入都是所有点都是目标点的点云数据,但是输出不是分类得分,而是确定3D检测框位置的几个参数。
这几个参数也包含预测的目标的中心点位置的3个偏移值,在本节上一块T-Net网络中预测的是中心的基准值。最终的预测出框的位置为 掩膜坐标系+T-Net变换原点后的坐标系 + 预测的框的位置坐标 相互叠加的结果,如下式:
对于检测框预测会预定义NS个尺寸(size)模板以及NH个等分航向角(heading angle)的bin,然后会对size/heading进行分类并且预测对每个类别预测残差(residual,实际就是偏移值,借鉴了faster r-cnn的做法),其中3NS中的3代表高宽长三个维度,NH个残差角代表NH个航向角的偏移值。最后,网络一共输出3+4 NS +2 * NH个值。这里的3代表预测的中心的位置的偏移值,4NS代表:NS代表预定了NS组尺寸基准值,4=3+1:3代表对每组基准值预测的长宽高的偏移值,1代表预测的每组尺寸基准值的得分情况,以供确定用哪一组位置 基准值。2NH代表:NS表示预定了NH组航向角基准值,2=1+1:其中一个代表表预测的每组航向角偏移值,另外一个1代表预测的每组航向角基准值的得分,以供确定用哪一组航向角基准值。
4.4 多任务训练
同时优化3个网络,分别是3D实例分割PointNet, T-Net,以及非模态检测框预测PointNet。
简单说下是这些损失:
第一部分:预测掩膜的损失Lseg,
第二部分:用T-Net预测框中心的损失Lc1-reg
第三部分:用框回归网络回归框中心偏移值的损失Lc2-reg,
用框回归网络预测航向角的分类(用于确定用哪组基准值)和回归损失Lh-cls和Lh-reg。
用框回归网络预测检测框的分类和回归损失Ls-cls和Ls-reg。
除以上损失外还额外增加了角点损失Lcorner,因为上述得到的长、宽、高、位置、航向角得分都是分别计算损失,加入长宽高、位置预测的都很准,但是航向角错了一点点,那么最后的框看起来就会非常的不准,但是计算所得损失很小,会认为预测的很准,故理想情况下这三类尺寸(长宽高)、位置、航向角应该有个共同优化的损失。故提出了一个corner loss。
上式中,
本质上代表的是预测的8个角点与标签框的8角点位置之差,因为8个角点位置由框的尺寸、位置、航向角共同决定,所有能对这三部分同时优化。
分类损失用的都是softmax,回归损失用的都是Smooth-l1损失。
最终公式如下:
5 实验
5.1 与其他模型对比
MV3D用多视角以及传感器融合。
DoBEM也用了雷达数据投射出来的图片输入到CNN中处理。
3DFCN是基于体素的方法,速度很慢。
本文方法没用传感器融合(感觉实际是用了的)。
表一是检测AP,表2是定位AP。
5.2 架构设计分析
实验建立
未提的都按照第一版的pointnet设置处理。只针对车处理:
与其他选择比较
还利用了类似与mask-rcnn中预测2D掩膜,然后2D掩膜映射到深度图上,利用cnn对深度图上的掩膜区域进行实例分割(即找属于目标的点),但是效果变差了,这是因为2D掩膜中还是有很多前景背景点噪声。
如果是用2D掩膜映射到3D的点云数据空间中,效果会轻微变差,因为掩膜预测没那么准。
点云数据标准化(即3此变换坐标系变换)的影响
回归损失和角点损失的影响
5.3 有质量的结果和讨论
图6展示了一些检测结果,发现:
1、模型对于无遮挡的目标检测效果很好,因为点云数据很多。
2、对于有遮挡的目标,即只能获得部分点云数据,也能准确预测出非模态检测框。
3、一些在2D中看起来有难度的目标,如周围有很多或者直接重叠的2D检测框,放到3D空间中反倒降低了任务难度。
一些失败案例及启发:
1、第一个错误就是在稀疏点云(可能少于5个点)中姿态和尺寸预测不准。或许能够通过提高图像分辨率解决。
2、同一个视锥内有多个同类目标时,就会混乱而输出所有目标的点。可以通过在同一视锥内预测多个检测框解决。
3、2D检测器检测不出来的目标(如昏暗条件下的目标),导致3d空间不对这个目标所在的空间进行检测,而实际上如果在此空间进行3d检测是可以检测的。考虑用点云数据生成的鸟瞰图做候选框预测。