【3D目标检测】SMOKE: Single-Stage Monocular 3D Object Detection via Keypoint Estimation

目录

  • 前提
  • 概述
  • 细节
    • 网络结构
    • 特征提取网络
    • 检测头1:关键点检测
    • 检测头2:3D参数回归
    • 损失函数

前提

需要先了解下CenterNet
【目标检测】Objects as Points

概述

本文是基于单目图像的3D目标检测方法。
【2020】【SMOKE】

研究背景:以往的3D目标检测方法中都会有一个子网络,通过2D目标检测产生2D候选框,然后通过2D候选框去学习3D信息或者得到伪点云送入基于点云的网络中。而这种基于2D目标检测的方法会存在一些问题,如

  • 冗余。因为3D信息+内参矩阵可以直接拿到2D信息。
  • 引入噪声。 添加了2D目标检测子网络之后,整个流程就分阶段了,前一阶段会引入持续的噪声,导致后一阶段学习3D特征变得困难。而为了解决这个问题,又有了很多的研究,但不管怎么说,多阶段的方法都会导致性能的降低。

研究的问题:

  • 如何在3D目标检测中去除2D目标检测的子网络
  • 如何更加有效的编码航向角,设计回归的损失函数

提出的方法:

  • 将CenterNet拓展到3D目标检测中,通过关键点检测+3D参数回归,一步到位实现边界框的预测。
  • 精细化的航向角回归方法+分组参数回归

细节

网络结构

网络结构很简单,就是特征提取网络+检测头(关键点检测+3D参数回归)
【3D目标检测】SMOKE: Single-Stage Monocular 3D Object Detection via Keypoint Estimation_第1张图片

特征提取网络

本文用的特征提取网络和CenerNet中的基本相同,都是DLA-34,但也有一些改变,比如使用可变性卷积替换了标准卷积,使用GN替换了BN。
因为GN对batch-size不敏感,并且对于训练噪声更加鲁棒。并且实验发现,虽然准确率没有提高,但是训练的时间大大缩短了。

检测头1:关键点检测

这边和CenterNet中的定义差不多,图像下采样四倍之后得到的特征图上进行关键点预测。区别就是本文的关键点指的是3D边界框的中心点在图像坐标系上的投影。

标签制作:将3D边界框的中心投影到相机坐标系下,然后下采样得到特征图上的位置,然后使用高斯核处理分布。

检测头2:3D参数回归

回归的8个参数是 [ δ z , δ x c , δ y c , δ h , δ w , δ l , sin ⁡ α , cos ⁡ α ] [\delta_z,\delta_{x_c},\delta _{y_c},\delta_h,\delta_w,\delta_l,\sin \alpha,\cos \alpha] [δz,δxc,δyc,δh,δw,δl,sinα,cosα],其中 δ z \delta_z δz是深度偏移, δ x c , δ y c \delta_{x_c},\delta_{y_c} δxc,δyc是下采样过程中的偏移, δ h , δ w , δ l \delta_h,\delta_w,\delta_l δh,δw,δl是尺寸的偏移, sin ⁡ α , cos ⁡ α \sin \alpha,\cos \alpha sinα,cosα是偏航角的表示。

z的计算:其中 μ z 是预定义的偏移, σ z 是比例因子 \mu_z是预定义的偏移,\sigma_z是比例因子 μz是预定义的偏移,σz是比例因子在这里插入图片描述

根据z和相机内参计算相机坐标系下的3D坐标
【3D目标检测】SMOKE: Single-Stage Monocular 3D Object Detection via Keypoint Estimation_第2张图片
根据尺寸残差计算真实尺寸,其中 h ⃗ , w ⃗ , l ⃗ , \vec{h},\vec{w},\vec{l}, h ,w ,l ,表示的是数据集上该类别目标的平均长宽高

【3D目标检测】SMOKE: Single-Stage Monocular 3D Object Detection via Keypoint Estimation_第3张图片
航向角回归:没有直接回归航向角,而是通过 sin ⁡ α , cos ⁡ α \sin \alpha,\cos \alpha sinα,cosα计算 α x \alpha_x αx,通过 α x \alpha_x αx计算 α z \alpha_z αz,通过 α z \alpha_z αz计算航向角 Θ \Theta Θ,具体过程请看大佬博客单目3D目标检测-SMOKE中的航向角回归分析
在这里插入图片描述
有了上述参数就有了边界框,其中 R θ R_{\theta} Rθ是偏航旋转矩阵
【3D目标检测】SMOKE: Single-Stage Monocular 3D Object Detection via Keypoint Estimation_第4张图片

注:尺寸残差和角度都是处理过的,也就是对模型的输出进行激活,分别是sigmoid函数和L2 正则化
在这里插入图片描述
【3D目标检测】SMOKE: Single-Stage Monocular 3D Object Detection via Keypoint Estimation_第5张图片

损失函数

关键点检测的损失:和CenterNet中的一样,就是写成了一个式子(还是CenterNet中的看着舒服)
【3D目标检测】SMOKE: Single-Stage Monocular 3D Object Detection via Keypoint Estimation_第6张图片
3D参数回归的损失:
这部分的损失参考了Disentangling monocular 3d object detection,作者将输出分为三组,按照检测头2:3D参数回归部分描述的,可以根据输出结果计算得到位置、尺寸以及偏航角,这就是三组数据。然后使用每一组数据+标注数据的参数填充得到检测框的8个角,记作 B 1 ^ , B 2 ^ , B 3 ^ \hat{B_1},\hat{B_2},\hat{B_3} B1^,B2^,B3^,分别使用L1损失计算回归损失,他们的损失和就是回归部分的总损失,这样做将每组参数对损失函数的贡献解耦了,让优化器能分别优化每一组参数。
采用的是L1损失
在这里插入图片描述

所以总的损失是
在这里插入图片描述

你可能感兴趣的:(论文学习,目标检测,3d,计算机视觉)