在2D实时目标检测框架yolo上引入一个轻量级立体匹配模块来实现高效的3D物体检测。大致结构如下图:
Anchors
对于3D目标检测,原本yolo针对2D物体的anchors需要重新设计,作者采用了12个参数来表示一个anchor:
- \([x_{2d}, y_{2d}, w_{2d}, h_{2d}]\),表示2D目标框
- \([c_x, c_y, z]\)表示3D目标中心在左图像中的位置去
- \([w_{3d}, h_{3d}, l_{3d}]\)表示3D目标框的宽、高、长
- \([sin(2\alpha), cos(2\alpha)]\)来评估目标的角度
这里作者发现\([sin\alpha, cos\alpha]\)和\([sin(\alpha+\pi), cos(\alpha+\pi)]\)可能会导致生成相同的矩形框,所以作者采用\([sin(2\alpha), cos(2\alpha)]\)来表示目标的角度,同时添加了一个分类分支来预测是否\(\vert\alpha\vert \gt \frac{\pi}{2}\),这样也可以表示目标是否面向相机。
将3D统计先验应用到anchor中以改善回归结果。遍历训练集,对于每个不同尺寸的anchor,基于IOU收集那些分配给该anchor的目标框,然后计算\(z\)、\(sin(2\alpha)\)、\(cos(2\alpha)\)的平均值。由于不同类的3D框差异较大,所以作者是分类别的统计3D先验信息。
考虑到自动驾驶的应用场景,作者将每个anchor按其平均\(z\)值投影回3D空间中,然后过滤掉那些远离地面的anchor。这部分也是会按类别进行过滤。
Multi-Scale Stereo Feature Extraction
在stereo matching上,主要是构建cost volume。目前最优的方法是基于concatenation的做法:将右侧特征图在左侧特征图上沿水平方向进行平移来计算cost volume。为了缩减计算时间,作者采用了基于correlation的方法来构建一个轻量的cost volume:用归一化内积层(normalized dot-product)来对左右特征图进行计算(可以参考论文引用的两篇论文中提到的inner-product layer和correlation layer)。这种方法输出的维度是\([B, max\_disp, H, W]\),输出的通道较少,会导致模型在fusion阶段数值偏向单目特征,同时后续对结果进行下采样时会进一步损失信息。
作者采用了ghost module来扩展通道数。ghost module使用了depthwise convolution来产生额外的特征。作者更进一步地将ghost module的输出与输入拼接在一起,从而使通道数增加三倍。上面结构图的b部分中,淡紫色部分即为ghost module的输出。
为了最大限度地减少stereo matching阶段的信息丢失,同时保持计算时间的可控性,作者构建了一个分层多尺度融合机制:
在下采样倍率为4倍和8倍时,作者分别构建了最大视差为96和192的cost volume,之后输入到ghost module、下采样并与后续更小尺度的特征图拼接。对于下采样倍率为16时,首先用\(1\times 1\)卷积对通道数进行下采样,然后作者用基于concatenation的方法创建一个小的cost volume以保留更多的语义信息。具体如上面结构图所示。
Training Scheme and Loss Function
首先在数据增强方面,作者对双目图像同时进行光度失真,在训练期间进行随机翻转。这里的随机翻转包括同时翻转RGB图像;翻转目标的位置和方向,然后交换左右图像。
从结构图中可以看出,模型在训练期间多出了一个辅助分支。视差监督(disparity supervision)对提升模型检测效果有一定的重要性。作者将最后输出的stereo feature提升到\([W/4, H/4]\),并且通过OpenCV传统的块匹配算法得到粗糙的视差ground truth来对预测的视差进行监督。在推理阶段,该分支不参与计算。
损失函数方面,对于分类采用focal loss,对于目标框采用smoothed-L1 loss,而对于辅助的视差估计,选用stereo focal loss(具体可参考AcfNet)。
首先计算出预期的视差分布(直接设置方差为\(\sigma = 0.5\)):
\[ P(d) = softmax(-\frac{\vert d-d^{gt}\vert}{\sigma}) = \frac{exp(-c_d^{gt})}{\sum_{d'=0}^{D-1}exp(-c_{d'}^{gt})} \]
其中\(d\)表示视差,\(c_d\)表示视差预测为\(d\)时的置信度。则stereo focal loss可以定义为:
\[ \mathcal{L}_{SF} = \frac{1}{\vert \mathcal{P}\vert}\sum_{p\in\mathcal{P}}\left(\sum_{d=0}^{D-1}(1-P_p(d))^{-\alpha}\cdot\big(-P_p(d)\cdot log\hat{P}_p(d)\big)\right) \]
其中\(D\)为定义的最大视差(max-disparity),\(\alpha\)为focal loss的权重,当\(\alpha\)越大,对应的正确视差值的权重越高,\(\mathcal{P}\)为参与计算的像素集合,\(P_p(d)\)和\(\hat{P}_p(d)\)分别表示预期的和实际预测的视差分布函数。
最终的损失函数定义为以上三个损失函数的和。
参考
YOLOStereo3D: A Step Back to 2D for Efficient Stereo 3D Detection