该网络通过双目视觉来实现3D目标检测,属于3D detection中image based的result-lifting方法,这类方法就是将3D检测分解为2D object detection和depth estimation这两部分。
Stereo RCNN是在Faster RCNN的基础上进行扩展的,具体如下图:
Backbone
作者选用的是ResNet-101结合FPN的形式,并且共享权重。通过该backbone同时对左右图像进行处理,之后将结果合并作为Stereo RPN的输入。
Stereo RPN
为了能让左右框生成的anchor对应起来,作者对objectness classification和box regression使用了不同GT框,如下:
- 在objectness classification阶段,将左右各自对应的GT框取外接矩形作为union GT。当anchor与union GT的IOU高于0.7时则作为正样本,小于0.3时作为负样本。由于该IOU的计算只涉及到anchor的尺寸,所以对于左右图像来说都是一样的。
- 在box regression阶段,使用各自的GT框来进行anchor的坐标回归。待回归的参数为\([u, w, u', w', v, h]\),其中\(u\)和\(v\)表示2D框中心的水平和垂直坐标,\(h\)和\(w\)表示框的长宽,由于输入的左右图像是经过矫正的,所以在垂直方向上的坐标左右图像基本是一致的,即\(v\)和\(h\)基本相同。
最后用NMS取前2000个样本用于训练,测试时取300个。
Stereo RCNN
从上面的网络结构图可以看出,在Stereo RPN以及常规的ROI Align之后有两个分支,分别为Stereo Regression和Keypoint Prediction。
Stereo Regression
在分别对左右图像做ROI Align操作后,将结果合并输入到全连接层。这里会对ROIs进行筛选:当左右图的ROI与GT的IOU均大于0.5时为正样本,小于0.5且大于等于0.1时为负样本。回归参数:
- object class
- bounding box:与stereo rpn一样
- object dimension:先统计平均尺寸,然后预测相对量
- viewpoint angle:\([sin\alpha, cos\alpha]\)
关于viewpoint angle,如下图:
\(\theta\)为相机坐标系下的目标朝向角,\(\beta\)为相机中心点下的目标方位角。这三个目标投影到相机上基本是一样的,为了更好地区分,作者选择去回归视野角,即\(\alpha = \theta + \beta\),其中\(\beta = arctan(-\frac{x}{z})\),同时为了保持连续性,最终回归参数为\([sin\alpha, cos\alpha]\)。
Keypoint Prediction
将3D目标框底部的四个点投影到图像平面上可以发现,最多只有一个3D关键点可以明显地投影到框中间(非左右边缘),作者将这个3D关键点定义为透视关键点并且只在左图上进行预测。利用这个关键点可以有效地约束3D目标框。这里具体的实现细节建议参考原论文。
3D Box Estimation
现在我们已经得到了2D box、尺寸、视野角、透视关键点,通过这些我们可以初步得到一个3D框:\((x, y, z, \theta)\),即3D框中心点和朝向角。使用的方法的最小化3D框投影到2D框和关键点的误差。
输入为\(\mathbf{z} =\{u_l, v_t, u_r, v_b, u'_l, u'_r, u_p\}\),表示左图像2D框的左上角和右下角的坐标,右图像2D框的左右\(u\)方向上坐标,透视关键点的坐标。通过将世界坐标系下的目标点投影到图像坐标下的目标点来建立方程,如左上角投影:
\[ \begin{bmatrix} u_l \\ v_t \\ 1 \end{bmatrix} = \begin{bmatrix} x \\ y \\ z \end{bmatrix} + \begin{bmatrix} cos\theta & 0 & sin\theta \\ 0 & 1 & 0 \\ -sin\theta & 0 & cos\theta \end{bmatrix} \cdot \begin{bmatrix} -\frac{w}{2} \\ -\frac{h}{2} \\ -\frac{l}{2} \end{bmatrix} \]
可以得到\(u_l\)和\(v_t\)的方程。同理可以推出\(\mathbf{z}\)中各个参数的方程(注意符号的变化),之后由Gauss-Newton方法求解。
论文特别注明了为了方便表示,\(\mathbf{z}\)中的参数已经经过相机内参normalize了
Dense 3D Box Alignment
这部分是对上面得到的3D框结果进行精度上的优化。作者将目标范围内其高度一半以下且在目标左右边缘之间的区域规定为有效区域,并在这个ROI上进行优化。定义误差函数如下:
\[ \begin{aligned} E & = \sum_{i = 0}^Ne_i \\ & = \sum_{i = 0}^N\left \| I_l(u_i, v_i) - I_r(u_i - \frac{b}{z + \Delta z_i}, v_i) \right \| \end{aligned} \]
上式结合三角测距可以理解到作者将目标深度上的变化转化为图像像素坐标的变化,即视差,上式其实可以视为对cost volume的一种计算方法。这样通过改变像素坐标值即可改变深度值,当左右图像像素点总体像素差值最小时,对应的即为最优的\(z\)值。具体可以用coarse-to-fine 的策略,例如先用0.5m的精度找50步,再以0.05m的精度找20次。
这个方法可以应用到其它stereo 3D检测的后处理中。因为目标ROI是物理约束,而该方法避免了深度估计中不连续、病态的问题,且对光照是鲁棒的,因为每个像素都会对估计起作用。
致谢
Stereo R-CNN based 3D Object Detection for Autonomous Driving
paper_reading-Stereo R-CNN based 3D Object Detection for Autonomous Driving