论文解读:SMOKE:SMOKE: Single-Stage Monocular 3D Object Detection via Keypoint Estimation

摘要

估计三维方向和物体的平移对于无基础设施的自主导航和驾驶至关重要。 在单目视觉方面,成功的方法主要基于两个因素:(1)网络生成2D区域提案;(2)R-CNN结构,利用所获得的感兴趣区域预测3D物体的姿态。 我们认为2D检测网络是冗余的,并为3D检测引入了不可忽略的噪声。 因此,我们提出了一种新的三维目标检测方法,称为SMOKE,该方法通过将单个关键点估计与回归的三维变量相结合来预测每个检测对象的三维包围盒。 作为第二种贡献,我们提出了一种构造三维包围盒的多步分离方法,这大大提高了训练收敛性和检测精度。 与以前的三维检测技术相比,我们的方法不需要复杂的预/后处理、额外的数据和细化阶段。 尽管SMOKE网络具有结构简单性,但我们提出的SMOKE网络在KITTI数据集上实现了所有现有的单目3D检测方法,给出了三维目标检测和鸟眼视图评估的最佳最新结果。 代码则将公开提供:https://github.com/lzccccc/SMOKE

创新点

在这篇文章中,我们提出一种创新的单目3D目标检测的方法,将每个目标与单个关键点配对,事后我们论证2D检测对于3D估计引入了噪声,尤其是在3D尺寸变量和相机内参已知的情况下。我们的网络设计消除了2D检测的影响,取而代之的是估计3D关键点在图像平面上的投射。同时3D参数的检测也是并行在进行。然后我们将这些得到的参数和关键点的8个参数一起回归3Dbox,用一个统一的loss函数来回。归。我们的网络只有两条并行的支路,因此网络时间的计算量较小。
我们的第二个贡献是多步骤的3Dbox的求解,因为所有的几何信息全部被打包为1个参数,所以对于网络来说,很难用一个统一的损失函数学习到准确的参数,我们的方法在3Dbox编码和loss回归时都独立每个参数的贡献,这样有利于整体网络的有效训练。
我们的贡献可以总结如下:
1.我们提出了一个one-stage的单目3D目标检测的简单网络,可以准确预测3Dbox;
2.我们提出了一个多步骤的分解方案去提升3D参数的融合和检测精度;
3.在KITTI数据集上的结果,优于当前所有单目3D box检测。
在这里插入图片描述

网络结构

backbone
我们用一个高层融合的网络DLA-34作为backbone,其他结构不变,高层全部替换成可变形卷积网络(DCN)。输出的特征图是原图的四次下采样,对比原始的部署,我们将所有BN替换成GN,因为GN被证明对batch_size没有那么敏感,且对于训练噪声更加鲁棒;
3D检测网络
关键点分支:
我们一个目标由一个关键点表示。比如说,用3Dbox中心点在2D图像平面的投影表示2Dboudingbox的中心。用相机参数,投射关键点可以完全恢复出3D位置。
假设相机内参是K,以下是3D点到2D点的映射。
在这里插入图片描述
对每一个关键点的label制作,可以用高斯核的特征图(这是常用的关键点检测label),对于每一个3Dbox,需要8个2D点表示。
回归分支
回归部分的目的在于为每一个heatmap上的关键点构造3Dbox提供必要的参数,跟其他的单目3Dbox检测相似,我们把3D框编码表示:(其实就相当于【x y z w h l])
在这里插入图片描述
上面这8个数,是回归分支待回归的参数。
其中第一个是深度方向的偏差,第二个第三个水平方向上离原点的偏差,后面三位数是长、宽、高相对于模板的残差,sin(a),cos(a)是旋转角a的表示,我们全部编码成残差的方式去学习,可以加快收敛,降低学习的难度,回归分支输出的特征图大小为[H/RW/R8],也就是下采样后,对于特征图上的每个图都会预测这8个参数,受到ROI-10D的影响,我们提出了一个相似的操作,将投影后的3D点映射到3Dbox上(用8个3维数组表示),对于每一个目标,深度可以用预先定义好的参数恢复:
在这里插入图片描述
当深度给定时,针对图像平面上的点,其映射值可由另外两个方向的平移和内参确定,如下公式:
在这里插入图片描述
dimension(w,h,l)回归的也是残差,我们事先定好以下模板:
在这里插入图片描述
然后就是根据回归的残差求得真实的w,h,l

在这里插入图片描述
同样,角度回归的也是残差,根据某篇论文的结论,我们改变一下回归的角度,尽管他们是可以互相转换的,如下图所示:
在这里插入图片描述
角度的表示同样也是使用sin,cos组合表示:
两个角度的互相转换如下:
在这里插入图片描述
最后,我们可以根据该角度,获取最终8个corner点的最终表示:
在这里插入图片描述
loss函数
在keypoint的分类loss上,用的是focal loss,
在这里插入图片描述
y是真值,s网络输出的结果;
关键点分类loss的公式如下:
在这里插入图片描述
其中a,b是可调的参数,N是每张图的关键点数量,(1-y_{i,j})是对真值点周围的区域的点的惩罚;
回归loss:
回归是要回归那个八个参数,在回归前,回加上sigmoid+relu去做平滑,回归的loss我们设计成了L1Loss,拿利用关键点跟两个不同的变换获得的3Dboundingbox相减;
在这里插入图片描述
图中两个B分别是真值变换和预测的变换,前面那个系数是用作调节回归loss和keypoints loss的占比的,
总的loss就是两个损失函数相加,接下来我们将总loss进行分解,我们将回归过程的关键点--》box的构造过程凸显出来,角度是有角度残差的公式得到,dimension,location(offeset)也是如此,也就是回归loss我们可以分为3部分,我们得到如下loss(当然这个没有具体展开):
在这里插入图片描述
这种多步骤的分解loss能够凸显每个变换参数在损失函数中的贡献,提升检测精度。
关于训练过程就不详述了

实验结果

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_39326879/article/details/112298193