题目:M3D-RPN:Monocular 3D Region Proposal Network for Object Detection
机构:Michigan State University, East Lansing MI
作者:Garrick Brazil, Xiaoming Liu
时间:2019.7.13
代码: http://cvlab.cse.msu.edu/ project-m3d-rpn.html(官方)
github: https://github.com/garrickbrazil/M3D-RPN
作者提出通过将单目3D检测问题重新定义为一个独立的3D区域建议网络。利用了2D和3D透视图的几何关系,允许3D框利用图像空间中生成的众所周知的强大卷积特性。为了帮助解决繁重的3D参数估计,我们进一步设计了深度感知卷积层,支持特定位置的特征开发,从而提高了3D场景的理解。与以往单目3D检测工作相比,我们的方法只包含所提出的3D区域建议网络,不依赖于外部网络、数据或多个阶段。M3D-RPN能够显著提高KITTI城市自主驾驶数据集中单目3D目标检测和鸟瞰任务的性能,同时有效地使用共享的多类模型。
目前最主要的3D检测方法【9,21,27,31,37】广泛依赖于昂贵的激光雷达传感器提供的稀疏深度数据作为输入。相比之下,由于缺乏深度信息,单目图像3D检测【4,5,24,36】要困难得多。因此基于LIDAR的方法和单目方法之间的性能差距仍然很大。
以往单目3D检测工作都严重依赖于外部SOTA子网络,这些子网络分别负责点云生成【5】,语义分割【4】,2D检测【24】,或者深度估计【36】。这种方法的缺点是组件学习和系统复杂性的内在脱节。此外,依赖额外的子网络可能会引入持续的噪声,从而导致框架性能上受限。
相比之下,作者提出了一种单个的端到端区域建议网络用于多类别3D目标检测(见图1)。2D和3D检测任务各自的目标是最终对一个对象的所有实例进行分类,而它们在定位目标的维数上是不同的。直观地说,我们期望能够利用2D检测的强大功能来指导和改进3D检测的性能,最好是在一个统一的框架内,而不是作为单独的组件。因此,作者重新定义了3D检测问题,使2D和3D空间都利用共享的锚点和分类目标。这样一来,可靠地对物体进行分类的角度来看,3D检测器的性能自然能够跟2D检测器媲美。因此,剩余的挑战被减少到相机坐标间内的3D定位了。
为了解决剩余的困难,作者提出三个关键的设计来改进3D估计。首先,提出构造3D锚点,使其在图像空间内发挥作用,使用每个锚点的3D参数的先验统计信息初始化所有锚点。因此,基于固定相机视角的一致性和2D尺度与3D深度的相关性,每个离散锚点在3D中具有很强的先验推理能力。其次,设计了新的深度感知卷积层,(图1的blue)能够学习空间感知的特征。传统上,卷积操作倾向于空间不变【18,19】,以便在任意图像位置检测对象。然而,虽然这是低阶特征的情况,但如果能够提高对深度的认知,并假设相对一致的相机场景几何的话,高阶特征具有提升的潜力。最后,在后优化算法中使用3D --> 2D投影一致性损失来优化方向估计。使用2D边界框来帮助纠正异常的估计值。总而言之,概括如下:
本文框架建立在RPN的基础上,RPN是专门设计用来在2D和3D空间中工作的,并作为一个single-shot 多类别3D检测器。
激光雷达数据的使用已经被证明是SOTA的框架,用于城市场景的3D目标检测的基本输入。主流方法倾向于从激光雷达处理稀疏的点云或将点云投影到2D平面。虽然基于LIDAR的方法通常在各种3D任务中表现出色,但每种方法都依赖于从激光雷达点生成的深度信息的可用性,或者直接通过点云处理。因此,这类方法不适用于只有相机的应用,因为这是我们单目3D检测算法的主要目的。
由于缺乏可靠的深度信息,仅适用图像数据进行3D检测具有内在的挑战性。基于SOTA图像的3D检测方法【4,5,24,36】的一个共同特点是使用一系列子网络来辅助检测。例如,【5】中使用带有立体处理的SOTA深度预测来估计点云。然后,给定一个已知的相机投射矩阵,将3D长方体沿地平面详尽地放置,并根据近似点云在长方体区域的密度进行评分。作为后续,【4】通过结合语义分割,实例分割,位置,空间上下文和形状先验,将设计从stereo调整为单目,取代了点云密度策略,同时在地面上对proposal进行了详尽分类。
最近研究中,【24】使用外部SOTA目标检测器生成2D proposal,然后在深度神经网络中处理裁剪后的proposal,以估计3D尺寸和方向。与本文工作类似,在后处理中利用投影到图像平面的2D框和3D框之间的关系来求解3D参数。然而,本文的模型直接直接预测3D参数,因此只有优化改善,在实践中收敛于~8个迭代,而【24】为64迭代。【36】利用一个额外的网络来预测深度图,然后用深度图来估计类似LIDAR的点云。然后使用单目的2D RPN边界框对点云进行采样。最后,一个R-CNN分类器接收一个由点云和图像特征组成的向量输入,来估计3D框的参数。 (对比见下图)
与此前工作相比,本文提出一个只用3D框训练的单一网络,而不是使用一组外部网络,数据源和由多个阶段组成的网络。之前的研究【4,5,24,36】使用外部网络作为其框架的一个组件,其中一些组件还需要外部数据进行训练。本文是第一个使用单目3D proposal网络(M3D-RPN)同时能生成2D和3Dproposal。理论上讲,本文是对以前工作的补充,可用于替代proposal生成阶段。综述对比见图2.
本文框架由3个关键组件组成。首先,详细阐述了我们的多类3D区域建议网络。然后概述深度感知卷积网络和整体网络架构。最后,详细介绍了一个简单有效的后优化算法,用于提高3D->2D一致性。网络整体框架见图3.
我的理解是用DenseNet作为基础特征提取器,得到hxw维度的特征图,然后将该特征图分别送入两个分支,一个是全局特征抽取,一个是局部特征抽取,最后将两个分支的特征按照一定的权重进行结合。其中全局这块,用常规的3x3和1x1卷积作用于整张特征图,而局部这块,用不同的3x3核作用于不同的bin,这个bin见图3中横条,作者沿纵向将其划分了b个bin。
本文框架的核心基础是基于Faster R-CNN中首先提出的RPN原理。从高维度来看,区域建议网络充当滑动窗口检测器,扫描输入图像的每个空间位置,寻找匹配的一组预定义锚点模板对象。然后将匹配从离散锚点回归到估计对象的连续参数。
Anchor Definition:
为了同时预测2D框和3D框,需要在各自维度空间定义锚点模板:, 和 。 要放置锚点并定义完整的2D/3D框,必须指定共享的中心像素位置 ,其中2D表示的参数按照像素坐标表示。将相机坐标系下的3D中心位置 三维投影到给定已知投影矩阵 P 的图像中,将深度信息参数 进行编码:
代表观察视角。相当于相机坐标系下绕着Y轴旋转,观察角度考虑的是物体相对于相机视角的相对方位,而不是地面的鸟瞰图(BEV)。因此,在处理图像特征时,直观地估计视角更有意义。将剩余的3D维度 编码为相机坐标系中的给定值。
均值统计每个 和 是预先为每个锚点单独计算的,它充当强先验信息来减轻3D参数估算的难度。具体而言,对每个锚点,统计那些与GT值在[w,h] 上的IOU超过0.5的匹配统计数据。因此,锚点表示离散的模板,其中3D先验可作为强的初始猜测,从而假设一个合理一致的场景几何。可视化锚点生成公式和预先计算的3D先验 见图4。
3D Detection:
模型预测输出特征图中每个锚点的 , , , .设锚点个数为 (我的理解是特征图上每个像素的锚点个数), 类别个数为 , hxw是特征图的分辨率。因此,输出框总数为 , 每个锚点分布在每个像素位置 , 第一个输出 c 表示维度为 的共享分类预测,其中彼此(每个类)的输出维度为 。 表示2D边界框转换,我们统称为 。 同【30】,边界框变换公式如下:
其中 和 表示每个框的空间中心位置。变换后的框 定义为 , 以下7个输出表示投影中心变换 , 尺度变换 , 以及方向变换 , 统称为 。 类似于2D,转换应用于带参数 , , 的锚点:
同理, 表示 和 。 如前所述,作者估计投影的3D中心而不是相机坐标,以更好地处理基于图像空间的卷积特征。在推理过程中,利用公式(1)的逆变换,由得到的在图像空间中投影后的3D中心位置 去计算其相机坐标 。
Loss Definition:
本文的网络损失函数是个多任务学习问题,由分类损失 , 2D框回归框损失 和3D框回归损失 构成。对于每个生成的框,我们检查是否存在与GT的IOU≥0.5。 如果存在的话,使用生成框的最佳匹配的GT来定义一个目标的类别索引 ,2D框 和3D框 。如果不存在的话, 目标类别索引为背景类, 忽视边界框回归。采用基于softmax的多项逻辑损失函数用于Lc:
文中用负的逻辑损失来定义 , 主要是用于匹配的GT 和 变换后的 之间的IOU :
剩下的3D边界框参数每项都用Smooth L1回归损失来优化,其针对变换 和GT变换 (该项利用 代入公式3求逆变换得到):
因此,整个多任务网络损失L ,包括正则化权重 λ1 和 λ2,定义如下:
作者希望网络早期层的低阶特性能够合理共享,不受深度或目标尺度大小的影响。直观认为,当假设一个固定的相机视角下,与3D场景理解相关的高阶特征依赖于深度。因此,作者提出深度感知卷积作为提高区域建议网络中高阶特征空间感知的一种方法,如图3所示。
深度感知卷积层可以大致概括为规则的2D卷积,其中一组组离散深度可学习到非共享权重和特征(个人理解见图3中,不同bin中的权重是不同的,非共享的)。作者引入超参数 b ,其表示行级别的bin数量用于将特征图沿横向分为b个,每个bin都有特定的卷积核 k 。 实际上,深度感知的卷积核使网络能够为每个bin区域开发位置特定的特征和偏置值,理想情况下,利用城市场景中固定视角的几何一致性。例如,高级语义特征,编码一个用于检测汽车的轮子特征,在近深度是有用的,但在较远深度通常不行。类似地,作者直观希望与3D场景理解相关的特性与它们的行方向图像位置内在相关。
使用深度感知卷积的一个明显缺点是,给定层的内存占用增加了b 倍。然而,无论卷积核是否共享,执行卷积的总理论FLOPS仍是一致的。作者在PyTorch中实现了深度感知卷积层,将一层L 展开到b个 padded的bin中,然后重新利用组卷机运算,在GPU上高效并行运行。
本文的网络架构的主干网络(backbone)是建立在DenseNet-121上的。为了使网络步长(尺寸较输入缩减倍数)保持在16,作者删除了最后一个池化层,然后将最后一个DenseBlock中的每个卷积层膨胀2倍,以获得更大的感受野。在backbone的末端连接两条并行分支。第一个分支使用常规的卷积,其卷积核是在整个空间作用的,称为全局卷积。第二个分支使用深度感知卷积(depth-aware convolution),称为局部卷积。对于每条分支,都附加了一个proposal特征提取层,利用其各自的卷积运算来生成全局特征 和局部特征 . 每个特征提取层使用一个带padding为1的3x3卷积核,然后接Relu非线性激活,生成512个特征图。然后在每个特征图F上连出13个输出(论文中说是13个,我的理解是除了列举出的12个,是不是还有方位角θ),对应为:, , , .每个输出再接一个1x1的卷积核,统称为 和 , 为了利用depth-aware和空间不变的优点(其实就是利用两个分支各自的优势),作者对每个输出做了 加权(包括sigmoid处理了),这个α 是学习得到的,并为每个输出作了1至13的索引,如下:
作者用一种简单而有效的后处理算法(见算法流程1)来对方向参数 θ 进行优化。
提出的优化算法将2D和3D的估计框 , , ,以及 步长 (看算法流程图,我的理解是用来更新θ的) ,程序while循环终止参数 , 衰减系数 (用来更新的) 这些参数作为 θ 优化算法的输入。算法的迭代步骤是通过将 3D框的投影和2D的估计框 作 loss, 并不断调整θ值。3D->2D 投影定义如下:
其中 表示 轴 [x,y,z]的索引。用3D框投影后的2D框参数 ,和原来的2D框估计 来 计算 loss, 当在 θ±σ 范围内loss没有更新,然后就用衰减因子γ 来改变 步长 , 当 σ > β时 反复执行。
为了防止局部特征对图像区域过度拟合,使用预先训练的全局权重来初始化分支中的局部特征提取层。本例中,每个阶段都经过50k次迭代训练。作者期望更高程度的数据增强或者实行一个bin个数迭代机制,例如,将bin个数 b= , i=0,...,, 这么做可以以更复杂的超参数为代价使得训练过程更加容易。
作者使用0.004的学习率和0.9的幂次、batchsize为2,权重衰减系数0.9, 设置λ1 =λ2 = 1, 所有图像缩放到像素高为512,深度感知卷积层使用bin个数b=32, 以及12个锚点尺寸,从30到400,尺寸变化遵循公式: , 其中i=0,...,11,锚点框纵横比为[0.5, 1.0, 1.5], 如此定义了多种类别检测所学的36个锚点框(12种尺度 x 3种比例)。使用训练数据集中的模板来学习3D锚点框先验,详见3.1节。使用NMS在2D空间中滤除IOU<0.4的以及score<0.7的框。3D->2D优化中设置 =0.3, =0.01,γ = 0.5 。最后,通过在一个小的batch中抽取前20%高loss的框来进行在线hard-negative mining。
作者注意到M3D-RPN依赖于3D框标注和每个标注的投影矩阵P.对于不知道这些信息的数据集,有必要预测相机的内部参数,并用弱监督利用3D-2D投影几何作为损失约束。
作者在KITTI数据集两个核心3D定位任务:鸟瞰视角(BEV)和3D目标检测中评估了提出的算法框架。进一步可视化了M3D-RPN在不同场景下多类别3D目标检测中的定性例子(图5)。
其中,鸟瞰图视角任务旨在从俯视角度检测目标,所有的3D框首先投影到地平面,然后执行俯视下的2D检测。(表1显示该任务下的对比结果)。
其中,3D目标检测任务是在相机坐标系中直接进行目标检测,因此,所有IOU计算都引入了一个额外的维度,这大大增加了与BEV任务相比的定位难度。(表2显示该任务的实验对比)
Multi-Class 3D Detection: 该部分的实验见表3,作者任务当前在自行车上的表现不如汽车的好,应该是当前的数据样本偏向车和行人导致的,可通过数据增强等方式解决。
消融实验,针对深度感知卷积中,由于输入图像被resize到512,网络的backbone经过16倍尺度缩小,最后的特征图尺寸纵向为512/16=32,因此作者使用bins的个数分别为如表5中显示的[4,8,16,32]。作者还简化了b=1的特殊情况,这相当于使用两个全局流。实验发现当b=1和b=4通常比没有局部特征的性能更差,这表明任意添加更深的层对3D定位没有本质的帮助。当b=32时,3D定位得到了一致的改善。
本文,作者提出一种利用单一3D RPN来重构基于图像的3D目标检测,与之前的工作不同,以前的工作都由外部网络,外部数据和多阶段组成。M3D-RPN采用独特的2D和3D共享锚点设计,且利用2D尺度和3D深度相关性强的强先验知识。为了改进3D参数估计,作者进一步提出深度感知卷积层,使网络能开发空间感知信息。总体而言,本文方法能显著提高KITTI数据集在汽车,行人,自行车类的鸟瞰图和3D目标检测任务上的性能。