当前位置: 首页 > news >正文

【单目3D检测】smoke(1):模型方案详解

纵目发表的这篇单目3D目标检测论文不同于以往用2D预选框建立3D信息,而是采取直接回归3D信息,这种思路简单又高效,并不需要复杂的前后处理,而且是一种one stage方法,对于实际业务部署也很友好。

在这里插入图片描述

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

Introduction


2D目标检测目前已经在精度和速度上都取得了不错的成绩,而3D目标检测由于需要同时估计出目标的位置与姿态,因此相比2D是一个更具挑战的方向。
目前性能最好的3D目标检测还是需要依赖激光雷达的点云或者点云+图像融合,考虑到成本因素,仅依靠单目摄像头的3D目标检测还是非常值得研究的。
本作有以下几个贡献点:

  • 提出了一个one-stage单目3D检测方法,思路简答,且end-to-end。
  • 3D框8个角点的计算使用了多种方式得到,每种方式都参与了loss的计算,使训练更容易收敛。
  • 在KITTI数据集上达到了SOTA。

Detection Problem


在这里插入图片描述

SMOKE Approach

在这里插入图片描述


Backbone

主干网络选择使用DLA-34,其中部分卷积换成了DCN,最后的输出相对于原始图4次下采样的特征图。论文还将BN换成了GN(GroupNorm),因为GN对batch size的大小不那么敏感,且在训练中对噪声更鲁棒。

3D Detection Network

head部分一共两条分支,一条用于检测目标中心点位置同时分类,另一条回归目标的3D信息。

Keypoint Branch

中心点的估计与CenterNet那片论文的思路相似,不同的是CenterNet里用的是2D框的中心点,而这里用的是3D框的中心点在图像上的投影点,如下图所示:
在这里插入图片描述

Regression Branch

在这里插入图片描述

根据深度信息,投影点(x,y)坐标,和相机参数,可计算得到3D中心点坐标

在这里插入图片描述
在这里插入图片描述

预测长宽高,有点像anchor的思想

在这里插入图片描述

偏航角:ray到Z轴角度

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Loss Function

偏航角pred与尺寸gt,坐标gt构成的3d box与gt的回归loss
偏航角gt与尺寸pred,坐标gt构成的3d box与gt的回归loss
偏航角gt与尺寸gt,坐标pred构成的3d box与gt的回归loss

Keypoint Classification分支的loss跟CenterNet中一样,用的是focal loss。

Regression分支的loss计算比较有新意,没有采取直接计算τ \tauτ中8个参数的loss,而是通过在角度、尺寸、坐标位置三种分支下得到的3D框的8个角点去和真值比较计算loss。

总loss:
在这里插入图片描述

# mmdetection3d/mmdet3d/models/dense_heads/smoke_mono3d_head.py
# 角度分支下计算得到的3D框,所谓角度分支即只有角度用的是预测值,而坐标位置和尺寸两个用的是真值
bbox3d_yaws = self.bbox_coder.encode(gt_locations, gt_dimensions, orientations, img_metas)
# 尺寸分支下计算得到的3D框
bbox3d_dims = self.bbox_coder.encode(gt_locations, dimensions, gt_orientations, img_metas)
# 坐标位置分支下计算得到的3D框
bbox3d_locs = self.bbox_coder.encode(locations, gt_dimensions, gt_orientations, img_metas)
...
...
# 三种分支下分别计算推理出的8个角点的和真值8个角点的loss
loss_bbox_oris = self.loss_bbox(pred_bboxes['ori'].corners[reg_inds, ...], target_labels['gt_cors'][reg_inds, ...])loss_bbox_dims = self.loss_bbox(pred_bboxes['dim'].corners[reg_inds, ...], target_labels['gt_cors'][reg_inds, ...])loss_bbox_locs = self.loss_bbox(pred_bboxes['loc'].corners[reg_inds, ...], target_labels['gt_cors'][reg_inds, ...])loss_bbox = loss_bbox_dims + loss_bbox_locs + loss_bbox_oris

Conclusion


纵目发表的这篇单目3D目标检测论文不同于以往用2D预选框建立3D信息,而是采取直接回归3D信息,这种思路简单又高效,并不需要复杂的前后处理,而且是一种one stage方法,对于实际业务部署也很友好。

参考:https://blog.csdn.net/qq_30483585/article/details/124954023

http://www.lryc.cn/news/403483.html

相关文章:

  • 数据库系统概论:数据库系统的锁机制
  • Django+vue自动化测试平台(28)-- ADB获取设备信息
  • RESTful API设计指南:构建高效、可扩展和易用的API
  • npm下载的依赖包版本号怎么看
  • css前端面试题
  • Vue从零到实战
  • 【Chatgpt大语言模型医学领域中如何应用】
  • ES6 正则的扩展(十九)
  • <数据集>钢铁缺陷检测数据集<目标检测>
  • Kafka系列之:Kafka存储数据相关重要参数理解
  • Template execution failed: ReferenceError: name is not defined
  • CVE-2024-24549 Apache Tomcat - Denial of Service
  • Linux下如何安装配置Graylog日志管理工具
  • 「MQTT over QUIC」与「MQTT over TCP」与 「TCP 」通信测试报告
  • 获取磁盘剩余容量-----c++
  • AI算法24-决策树C4.5算法
  • 【云原生】Prometheus整合Alertmanager告警规则使用详解
  • C++ :友元类
  • 【整理了一些关于使用swoole使用的解决方案】
  • python selenium4 EdgeDriver动态页面爬取
  • 【一次记一句:SQL】从 information_schema.TABLES中查询数据库表中记录数据量
  • NXP i.MX8系列平台开发讲解 - 3.19 Linux TTY子系统(二)
  • FPGA资源容量
  • Zabbix介绍和架构
  • 打造智慧图书馆:AI视频技术助力图书馆安全与秩序管理
  • Go的数据结构与实现【LinkedList】
  • Ubuntu22.04安装CUDA+CUDNN+Conda+PyTorch
  • 当“广撒网”遇上“精准定点”的鱼叉式网络钓鱼
  • svn ldap认证临时切换到本地认证
  • 极狐GitLab如何配置使用独立数据库?