基于立体R-CNN的自主驾驶3D目标检测方法
基于立体R-CNN的自主驾驶3D目标检测方法
参考链接:https://blog.****.net/hitzijiyingcai/article/details/88537274
Title
Stereo R-CNN based 3D Object Detection for Autonomous Driving
Link
https://arxiv.org/abs/1902.09738
Abstract
我们为自主驾驶设计了一个充分利用了立体图像的稀疏、密集、语义、几何结构信息的3D目标检测方法。
我们的方法,称为“Stereo R-CNN”,立体R-CNN,基于Faster R-CNN拓展了立体输入,在左右图像中同时进行目标检测。
我们在立体RPN之后加入了额外的分支,用于推断稀疏关键点、视点以及目标dimension,融合2D左右图像信息,粗略计算出3D目标边界框。然后通过使用左右ROI的基于区域的光度校准恢复出精确3D边界框。
我们的方法不需要深度输入和三维位置信息,但优于现在所有的完全监督的基于图像的方法。
在具有挑战性的数据集KITTI上证明了,我们的方法在3D目标检测和3D定位方面,超过最先进的基于立体的算法30%左右。
Code
https://github.com/HKUST-Aerial-Robotics/Stereo-RCNN
Introduction
大多数3D目标检测方法是,基于激光雷达提供的自主驾驶场景中的精确深度信息来实现的,但激光雷达成本高、可测距离近(100m),并且它的分辨率比较低,获得的信息是稀疏的,对目标的描述不够细致(激光雷达是点阵,点间隔不固定,估算的信息也很粗略)。
另一方面,单目相机可以为3D目标检测提供低成本的解决方案。深度信息可以通过场景中的语义属性以及目标大小来推断。然而,这种推断出的深度信息不能保证精确性,尤其是第一次到的场景,具备的已知信息几乎为0。
出于这样的目的,我们设想了一种基于立体视觉的3D目标检测方法。对比单目相机,立体相机通过左右光度校准能够提供更多精确地深度信息。对比激光雷达,立体相机成本低,而且可以获得更有效的深度数据。立体相机的拍摄距离由焦点距离和基准线决定,相对激光雷达可以获得更远距离的精确信息。
Stereo R-CNN Network
与单帧检测器(如Faster R-CNN),Stereo R-CNN能同时检测并关联左右图像的2D边界框,并进行微调。我们使用权重共享的ResNet-101和FPN作为骨干网络来提取左右图像的一致特征。
受益于我们的训练目标fig2,不需要任何额外的数据关联计算。
Stereo R-CNN网络架构如图所示:
Stereo RPN
RPN是一个基于滑窗的前景探测器,在特征提取过程后,用一个3×3的卷积层减少通道数,紧接着是并联两个全连接层,分别用来目标分类和边界回归。相似的FPN,我们在原始RPN中加入特征金字塔,用于评估多尺度特征。
不同点在于,我们连接了每一个尺度的左右特征图,然后将这些特征送入立体RPN网络。
Stereo R-CNN
Stereo Regression
在Stereo RPN之后,分别对特征金字塔的左右feature map应用ROI Align(一致化)操作。concat对应的左右ROI feature,并输入到两个连续的全连接层(每一个都FC都伴随着ReLU)。使用4个子分支分别推测目标类别、立体边界框、dimension、视点角度。
这里的回归部分同stereo RPN是一致的,着重讲解一下viewpoint angle。
用θ来表示,每一帧图像中,车辆的运动方向。β来表示, 目标关于相机中心的方位角角。
图中的三辆车有不同的朝向,然而他们在ROI图像上的投影是完全一样的。
定义回归的视角角度α=θ+β。为了避免中断,训练目标设定为[sinα,cosα]而不是一个角度值。
Keypoint Prediction
除了立体boxes和视点角度之外,我们注意到,3D包围盒的投影到包围盒中的边角可以提供更多严苛的约束条件。
定义了4个3D语义关键点,它表示3D边界框在底部的四个角。只有一个点能被明显地投影到盒子中间(而不是左右边界)。我们定义语义关键点的投影作为透视的关键点。在上图展示了如何使用透视关键点估计3D包围盒的过程。
我们使用了Mask R-CNN提到的关键点检测方法。
只有左侧的feature map用于推荐关键点。我们使用ROI Align得到的14×14的feature map输入到连续6个3×3×256的卷积层,每一个卷积层都带有ReLU。经过一个2×2的反卷积层得到28×28的尺寸。我们注意到只有关键点的u坐标会提供2D box以外的信息,为了简化计算,我们对高度通道进行求和,将6×28×28转成6×28。
从结果上讲,作者将每一列的ROI feature聚合到一起来推测关键点。第一个4通道代表每个关键点被投影到相应u坐标的概率,后面俩个通道代表的是左右边界上有关键点的概率。
3D Box Estimation
利用稀疏的关键点信息和2D包围盒信息估算出一个粗略的3D包围盒。
定义3D包围盒的状态为x={x,y,z,θ},分别表示3D中心的点坐标和水平方向的偏转角。
给定左右2D包围盒、透视关键点、回归dimension,通过最小化二维逆投影的误差就可以得到3D包围盒。
从立体包围盒和透视关键点中提取出7个测量参数:
分别代表,左侧2D包围盒的left,top,right,bottom边界,右侧2D包围盒的left,right半径,以及透视关键点坐标u。每一个参数都需经过相机内参进行归一化。给定透视关键点,就能推断出3D包围盒的角与2D包围盒的边的对应关系。
通过[1]的方法,就能通过透视变换得到3D-2D的关系。
Dense 3D Box Alignment
对于每一个在左图中的有效ROI区域的归一化后的像素坐标值,图像误差被定义为
Il,Ir表示左右图像透视图的3通道RGB向量,△zi=zi-z为像素i同3D包围盒中心的深度偏差值,b是基准线长度,只有z是我们需要解决的客观变量。
我们采用双线性插值的方法得到右图子像素值。当前的匹配的代价被定义为“Sum of Squared Difference—SSD”覆盖所有在有效ROI区域内的像素点:
中心点深度值z可以通过最小化当前匹配代价E来解算。我们可以通过枚举深度值来加速最小化代价的过程。我们在初始值周围每隔0.5米枚举共50个深度值,得到粗略的深度值,然后在粗略深度值的周围每隔0.05米枚举共20个深度值,得到精确地深度值。
这种方法避免了全局深度估计时,一些无效像素点引起的中断问题,整个方法更加健壮。