单目3D目标检测网络SMOKE解读

论文: SMOKE: Single-Stage Monocular 3D Object Detection via Keypoint Estimation
代码: https://github.com/lzccccc/SMOKE

0 引言

现有的单目3D目标检测基本都是2阶段的, 首先基于2D目标检测生成目标的2D候选区域, 然后针对获取到的2D候选区域预测目标的位置姿态等。 论文认为2D检测是不必要的, 甚至会引入不必要的噪声。 如果已知目标的3D属性和相机的内参, 根据几何投影关系是可以得到2D属性的, 反之亦然。论文就是基于这一特点, 直接基于图像平面上的关键点预测,得到3D检测结果。

1 网络介绍

整个网络结构非常简单, 包括一个backbone特征提取网络和检测头, 检测头包括两个并行的分支, 其中一个分支用于关键点坐标回归, 另一个分支用于3D框的回归。
在这里插入图片描述

1.1 backbone网络

backbone网路采用了DLA-34的网络, 这个网络的主要特点就是做一些特征的聚合。 用一些基础的特征提取网络加一些特征聚合的操作应该也能取得不错效果。作者对backbone网络做了2点改进: 1)把普通的卷积层换成可变形卷积, 2)用GN替换BN, 因为GN 对batch_size 不敏感。

1.2 检测网络

检测网络主要包括2个并行的分支, 一个预测关键点, 另一个预测一些用于3D框计算的基本变量, 然后把这2个分支的结果进行综合就可以得到3D框的信息。

1.2.1 关键点分支

网络整体框图中叫关键点分类,其实这个叫法不是很准确, 实际应该是回归。 至于类别分类, 这篇文章没有做, 因为只关注了KITTI数据中car这一类。 关键点回归分支预测3D框的中心点在图像平面的投影[ x c x_c xc, y c y_c yc]。

1.2.2 回归分支

回归分支主要预测了计算3D框的一些基础变量, 总共有8个:
在这里插入图片描述
具体细节可以参见论文。 有了这8个变量, 在加上关键点分支预测的中心点坐标, 再结合相机内参和几何投影关系, 就可以重建3D框的信息。

  1. 计算深度
    在这里插入图片描述
    其中 δ z \delta_z δz是通过回归得到的, 是深度偏移量, 再根据预设的参数做一个尺度缩放和平移, 就得到真实的深度值。 文中的预设值是给定好的, 应该是根据统计得出的。

  2. 计算3D框的中心点
    根据预测的中心点[ x c x_c xc, y c y_c yc], 上面计算得到的深度, 以及回归分支预测的偏移量, 以及相机的内参矩阵直接计算得到。

在这里插入图片描述
3)计算3D框的3维尺寸
在这里插入图片描述
其中 h ˉ , w ˉ , l ˉ \bar{h}, \bar{w}, \bar{l} hˉ,wˉ,lˉ是预设的物体尺寸大小,其他的变量是通过回归分支预测的。

  1. 计算方向
    在这里插入图片描述
    其中 α \alpha α是回归分支预测得到的。 值得注意的是, 作者这里为了预测一个角度值, 预测了2个变量 s i n α , c o s α sin\alpha,cos\alpha sinαcosα。 但消融试验说明, 预测这样一个向量是有收益的。
    在这里插入图片描述
    至此, 就完全确定了一个3D框的位置, 大小和方向。

2 总结

SMOKE的网络结构非常简单, 在特征图上直接用2个并行的回归分支预测了10个变量, 用这10个变量, 结合相机内参, 根据几何投影关系计算3D框的信息。 几何关系的计算部分比较复杂。

其实有个疑问, 既然这样, 可以更简单粗暴一点, 直接回归3D框的信息, 不用先预测2D平面上的关键点, 在根据相机内参和投影关系投影到3D。 只是这样简单粗暴的回归, 效果可能不会好。

3 参考

[1] 最新发布!SMOKE 单目3D目标检测,代码开源!
[2] 单目3d 检测 smoke 网络
[3] Apollo 7.0障碍物感知模型原型!SMOKE 单目3D目标检测,代码开源!

### 单目3D实时目标检测技术 单目3D实时目标检测旨在通过单一摄像头获取图像并从中提取物体的位置、尺寸以及方向等三维信息。这项技术依赖于一系列先进的算法和技术来弥补仅有一个视角所带来的局限性。 #### 基本原理与挑战 由于只有一张二维图片作为输入源,因此如何从平面数据恢复出深度信息成为该领域的主要难题之一。为了克服这一障碍,研究者们提出了多种解决方案,包括但不限于利用几何约束条件、学习先验知识或是借助外部辅助设备等方式来进行有效的预测[^1]。 #### 关键技术和方法 - **基于回归的方法**:这类方法通常会训练神经网络直接输出物体的边界框参数及其对应的姿态向量。例如Mono3D++采用了改进后的特征金字塔网络结构,在不同尺度上融合多层特征图以提高定位精度。 ```python import torch.nn as nn class Mono3DNet(nn.Module): def __init__(self): super(Mono3DNet, self).__init__() # 定义卷积层和其他组件... def forward(self, x): # 实现前向传播逻辑... return predictions ``` - **弱监督/自监督学习框架**:考虑到标注完整的3D包围盒成本高昂,部分工作探索了更灵活的学习范式。如SMOKE引入了一种新颖的任务设计思路——将空间位置编码成热力图形式,并采用离散化的角度表示法简化优化过程;而M3D-RPN则尝试构建端到端可微分的伪激光雷达生成器,从而间接获得高质量的立体感知效果。 - **多模态融合策略**:除了视觉信号外,还可以考虑集成其他类型的传感器读数(比如IMU惯导单元),以此增强系统的鲁棒性和泛化能力。具体来说,可以参照一些针对自动驾驶场景下的综合方案,它们往往能够充分利用车辆自带的各种硬件资源完成更加精准可靠的探测任务[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值