【论文解读】单目3D目标检测 DD3D(ICCV 2021)

本文分享单目3D目标检测,DD3D 模型的论文解读,了解它的设计思路,论文核心观点,模型结构,以及效果和性能。

一、DD3D简介

DD3D是一种端到端单阶段的单目3D目标检测方法,它在训练时用到了点云数据,监督深度图的生成,共享预测深度的特征提取层

推理时不用点云数据了,只需图像数据和相机内参,即可完成3D框的信息预测。这是预训练和共享权重的思路。

开源地址:https://github.com/TRI-ML/dd3d

论文地址:Is Pseudo-Lidar needed for Monocular 3D Object detection?

二、论文核心观点

论文核心观点,主要包括:

  1. 观点背景:当前有两阶段的方法,首先单目深度估计生成深度图,并将图像数据转为点云数据;然后用三维点云的检测器输出3D框信息,从而将相机转变为伪激光雷达传感器。这类方法通常网络结构较为复杂且容易过拟合。
  2. 设计一种端到端、单阶段的单目3D目标检测
  3. 基于预训练和共享权重的思路训练时用到了点云数据,监督深度图的生成,共享预测深度的特征提取层推理时只需图像数据和相机内参,即可完成3D框的信息预测

三、模型框架

DD3D是一个单阶段的框架,基于FCOS思想,实现单目3d检测的。模型结构如下:

Backbone:DLA34

Neck:FPN

Head:由三部分组成

  第一部分:类别检测(默认3分类:车、行人、骑车的人)

  第二部分:2D框检测(2D-box和center-ness

  第三部分:3D检测(3D框信息——朝向、深度距离、中心偏差、三维尺寸,深度图,置信度)

模型结构如下图所示:

在FPN中,通过以下方式形成5 种尺度的Features输出:

  • 引用DLA34中Level5的Features进行CBL计算得到P5。
  • 引用Level3~5的Features进行跨尺度融合得到P3、P4。
  • 在P5的基础上经过两次s=2的CBL计算得到P6和P7。

DD3D的训练过程,包括3个阶段:Feature学习训练 → 深度估计训练 → 3D目标检测训练

  1. Feature学习训练:用COCO数据集预训练2D目标检测,主要是学习图像中的features,用到的heads包括:Logits、2D-box和center-ness。
  2. 深度估计(dense depth)训练:单目深度估计模块,在KITTI-Depth数据中对PackNet进行训练,生成深度图,用到的head是Dense-depth。
  3. 3D目标检测训练: 用KITTI-3D数据集训练3D目标检测,用到除了dense-depth之外的所有heads。

在深度估计训练时,形成效果好的模型参数,即:预测深度的特征提取层;

在3D目标检测训练,需要预测深度信息,会共享部分预测深度特征提取层

四、损失函数

DD3D 的损失由3部分组成,

2D 框检测损失:3部分

  • 通过binary focal loss计算分类损失
  • 通过binary cross entropy计算中心点center-ness的损失
  • 通过IOU损失计算2D box回归损失

3D 框检测损失:4部分

  •  预测朝向,偏航角使用L1 Loss函数。
  •  预测3D投影坐标偏移;使用 L1 Loss 函数。
  •  预测3D框的尺寸。
  •  预测中心点的深度值。

3D 框的信息是使用L1 loss来计算,公式如下。


每次从回归3D框的4组元素(朝向,3D-bbox投影中心,深度,尺寸)中取1个,其它三个用目标真值,来构建一个3D-bbox的8个顶点,然后用公式计算损失。这样重复4次计算各组元素的3D loss。

3D 框置信度损失

通过3D IOU计算3D的置信度。DD3D是通过单阶段网络端到端做3D目标检测的,其对于每一个像素点都会输出一组参数用于获取3D bounding box,但是并非每一个像素点的预测都是有效的(如背景区域),还有一些预测结果可能存在错误或者冲突,因此需要引入置信度评估对预测结果进行过滤。

总体的损失函数,如下所示:

总体的损失函数 =  2D 框检测损失 3D 框检测损失 3D 框置信度损失

五、核心内容——点云数据预训练深度信息,共享深度信息特征提取层

当前有两阶段的方法,首先单目深度估计生成深度图,并将图像数据转为点云数据;

然后用三维点云的检测器输出3D框信息,从而将相机转变为伪激光雷达传感器。这类方法通常网络结构较为复杂且容易过拟合。

DD3D 设计一种端到端、单阶段的单目3D目标检测。基于预训练和共享权重的思路;训练时用到了点云数据,监督深度图的生成,共享预测深度的特征提取层;推理时只需图像数据和相机内参,即可完成3D框的信息预测。下面详细分析检测头head-3D detection。

3D detection head,包含三部分检测头,共12个数值:

  • 3D框检测信息,3D-box head,包含10个参数。朝向角的四元素q(qw, qx, qy, qz)、深度信息Zc、3D 框中心的偏移量O (∆u,∆v)、3D尺寸δ  (δW , δH, δH) 。
  • 深度估计预训练,Dense-depth head,包含1个参数,预测Zp;点云投影到 图像上特征图 所在位置点的z方向深度(dense-depth)。
  • 3D置信度,3D-confidence head,包含1个参数,预测置信度。

解析3D框检测信息:

q(qw, qx, qy, qz): 直接回归得到的是Allocentric orientation (q_allo),即以3D-bbox自身为中心朝向的四元数。然后被归一化、转换成以相机为中心的朝向(Egocentric orientation)。

O =(∆u,∆v)表示从特征位置到投影到相机平面上的 3D 边界框中心的偏移量。最终将通过反投影得到3D框中线点的3D坐标。

δ = (δW , δH, δH) 表示 3D 边界框的大小与特定类别物体的规范大小的偏差。由于在实际中,每一类具体的物体的物理尺寸通常变化不大,因此可以通过对每一类的物体预设一个尺度(可以在训练集中计算出每一类物体的平均尺寸),然后在此基础上预测尺寸的偏差即可。

Zc表示为目标3D bbox中心的Z分量,因此只与前景特征相关

Zp表示点云投影到 图像上特征图 所在位置点的z方向深度,覆盖整图像范围,它与每个像素相关联,类似逐像素的深度图

深度信息的值,可以通过下面的转换公式得到:

Z∈{Zc,Zp}由模型输出,通过上面的公式,得到d∈{dc,dp}预测深度。

其中(σl和μl)为可学习的缩放因子和偏移量,初值来自对数据集的统计值。

p为从焦距f计算得到的像素大小fx和fy;c为常数,工程中设为500。

上述的公式中用到了相机的内参(fx和fy),而这赋予了DD3D模型以相机感知能力,使得学习到的深度不仅与图像有关还与像素的大小密切相关。

dense depth head的深度预训练

在pre-training depth时,对来自FPN每一层特征图(5张)的逐像素深度预测值。

计算Loss时,只选用从Lidar 稀疏点云映射到图像平面上具备有效ground-truth depth的像素点,按照如下公式来计算:

 D∗ 是gt-depth map,D是来自每个一层特征图的深度预测值,它们都被插值成了与图像相同的精度,。

M是二进制指标,用来表示哪些pixel有效的mask(即那些从激光点云投影到图像上的像素点)。

Zc表示为目标3D bbox中心深度信息。

Zp表示点云预训练的深度信息,覆盖整图像范围,类似逐像素的深度图。

Zc和Zp都是预测深度,这两个路径只有最后3x3卷积层不同,即它们共享了几乎所有的参数。从深度预训练任务中学习到的深度估计能力,可以有效地迁移到目标任务3d bbox的深度预测任务中。

 

补充内容:

论文也给出了一套基于伪激光雷达做3D目标检测的方案作为对比,流程大概如下:

  • 首先通过PackNet进行单目深度估计,并将生成的深度图转换成点云。
  • 然后将每一个像素点的点云坐标和图像像素值拼接成一个6维的tensor。
  • 再基于现有的2D目标检测器获取ROI区域,将每一个ROI区域所对应的6通道tensor,输入到3D检测网络中预测出3D bounding box。

六、实验对比与模型效果

在KITTI-3D 测试集,选Car这个类进行评估,用以粗体突出显示最佳结果。

 Kitti数据集的模型效果:

下面是在nuScenes测试集评估的结果:

nuScenes数据集的模型效果:

 分享完成~

【数据集】单目3D目标检测:

3D目标检测数据集 KITTI(标签格式解析、3D框可视化、点云转图像、BEV鸟瞰图)_kitti标签_一颗小树x的博客-CSDN博客

3D目标检测数据集 DAIR-V2X-V_一颗小树x的博客-CSDN博客

【论文解读】单目3D目标检测:

【论文解读】SMOKE 单目相机 3D目标检测(CVPR2020)_相机smoke-CSDN博客

【论文解读】单目3D目标检测 CUPNet(ICCV 2021)-CSDN博客 

【论文解读】单目3D目标检测 MonoDLE(CVPR2021)_一颗小树x的博客-CSDN博客

【论文解读】单目3D目标检测 MonoCon(AAAI2022)_一颗小树x的博客-CSDN博客

【实践应用】

单目3D目标检测——SMOKE 环境搭建|模型训练_一颗小树x的博客-CSDN博客

单目3D目标检测——SMOKE 模型推理 | 可视化结果-CSDN博客

单目3D目标检测——MonoDLE 模型训练 | 模型推理_一颗小树x的博客-CSDN博客

单目3D目标检测——MonoCon 模型训练 | 模型推理-CSDN博客

后面计划分享,实时性的单目3D目标检测:MonoFlex、MonoEF、MonoDistillI、DEVIANT等

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/164119.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

索引失效的几种情况

目录 数据准备: 1、查询条件中有or,索引会失效; 2、like查询以%开头 3、如果类型为字符串,查询条件中数据需用引号引起来,否则不走索引; 4、索引列上参与计算会导致索引失效 5、违背最左匹配原则 6、…

[Hive] explode

在 Hive 中,explode 函数用于将数组(Array)或者Map类型的列拆分成多行, 每个元素或键值对为一行。这允许我们在查询中对数组或 Map 进行扁平化操作。 下面是使用 explode 函数的示例: 假设我们有一个包含数组字段的表…

面试知识点--基础篇

文章目录 前言一、排序1. 冒泡排序2. 选择排序3. 插入排序4. 快速单边循环排序5. 快速双边循环排序6. 二分查找 二、集合1.List2.Map 前言 提示:以下是本篇文章正文内容,下面案例可供参考 一、排序 1. 冒泡排序 冒泡排序就是把小的元素往前调或者把大…

flutter 创建插件

资料: flutter与原生通信的方式简介 - 简书 完整流程 Flutter 集成 Golang 多语言跨端开发基础案例 - 知乎 https://www.cnblogs.com/webabcd/p/flutter_lib_plugin_plugin_ios.html 步骤1、创建插件 我创建的插件名字是konnect_im_sdk 选择的语言是 java和swi…

22款奔驰S400L升级原厂360全景影像 倒车更加的安全

您是否经历过这种场面呢? 停车位,狭窄障碍停车困难 避免盲区,倒车盲区危及生命安全 狭窄路段,无法判断是否安全通过 视角盲区,小孩站在视野盲区看不到,Xjh15863 360度无缝3D全车可见,解决各…

uniapp开发多端应用项目时的常见跨端兼容处理

一、跨端兼容 每个端有每个端的特点,有的能被抹平,有的不可能被抹平。 跨端,不是把web的习惯迁移到全平台。而是按照uni的写法,然后全平台使用。 按照uniapp规范开发可以保证多平台兼容,但每个平台有自己的一些特性。…

02、MySQL-------主从复制

目录 七、MySql主从复制启动主从复制:原理:实现:1、创建节点2、创建数据库3、主从配置1、主节点2、从节点 4、测试:5、问题:1、uuid修改2、service_id3、读写不同步方法1:方法2: 七、MySql主从复…

【VR】【Unity】如何调整Quest2的隐藏系统时间日期

【背景】 网络虽然OK,但是Oculus Quest要连上商店还必须调整好系统时间,不过在Quest系统中,时间对用户是不可见的,本篇介绍调整的方法。 【方法】 打开SideQuest,没有的话先去下载一个。打开后先登录,如…

该方法仅能传入 lambda 表达式产生的合成类

说明:使用Mybatis-plus查询记录时,出现下面的错误; org.apache.ibatis.builder.BuilderException: Error evaluating expression ew.sqlSegment ! null and ew.sqlSegment ! and ew.nonEmptyOfWhere. Cause: org.apache.ibatis.ognl.OgnlEx…

TikTok Shop美国本土店VS跨境店,如何选择?有何区别?

TikTok不仅仅是一个用于分享有趣短视频的平台,它也逐渐成为了商家们极力推广自己品牌和产品的场所。 在TikTok的商业生态系统中,存在几种不同的商店类型,各有其独特性和适用场景。今天,我们就来深入探讨这些店的差异与特点。 一、…

基于Python的车牌识别系统实现

目录 一、图像预处理 二、车牌区域定位 三、字符分割 四、字符识别 五、代码总结 随着人工智能和计算机视觉的不断发展,车牌识别系统成为了智能交通领域中的重要研究方向。Python作为一种流行的编程语言,具有易学易用、开发效率高等优点&#xff0c…

Unity 镜面反射

放置地板和模型 首先,让我们放置地板和将放置在其上的 3D 模型。这次,我使用 Plane 作为地板。从层次视图中选择“创建”→“3D 对象”→“平面”。我们还在地板上放置了 Unity-chan、Cube 和 Sphere。 接下来,创建地板的材质。在项目视图中…

01、MySQL-------性能优化

目录 一、影响性能的相关因素存储过程: 二、sql优化1>、Mysql系统架构2>、引擎区别: 3>、索引1、什么是索引?联合主键索引理解:索引长度理解:什么是慢查询? 1)、索引理解2)…

MSQL系列(六) Mysql实战-SQL语句优化

Mysql实战-SQL语句优化 前面我们讲解了索引的存储结构,BTree的索引结构,以及索引最左侧匹配原则,Explain的用法,可以看到是否使用了索引,今天我们讲解一下SQL语句的优化及如何优化 文章目录 Mysql实战-SQL语句优化1.…

【Docker】Docker网络及容器间通信详解

目录 背景 默认网络 1、bridge 网络模式 2、host 网络模式 3、none 网络模式 4、container 网络模式 自定义网络 容器间网络通信 IP通信 Docker DNS server Joined容器 前言 本实验通过docker DNS server和joined 容器两种方法实现Docker容器间的通信。Docker容器间…

hue实现对hiveserver2 的负载均衡

如果你使用的是CDH集群那就很是方便的 在Cloudera Manager中,进入HDFS Service 进入Instances标签页面,点击Add Role Instances按钮,如下图所示 点击Continue按钮,如下图所示 返回Instances页面,选择HttpFS角色…

新加坡服务器托管

新加坡是一个小而繁荣的国家,是东南亚唯一一个发达国家。它地理位置好,毗邻马来西亚和印度尼西亚,新加坡是一个拥有先进科技和强大经济的国家,主要以制造业、金融、旅游和航运为主,拥有先进的经济和现代化的基础设施&a…

Python入门指南

概述: Python是一种简单易学、功能强大的编程语言,广泛应用于数据分析、Web开发、人工智能等领域。本文将为初学者提供一个Python入门指南,从安装到基本语法,帮助您开始编写Python程序。 第一部分:安装Python 1、进入…

C++ 友元

采用类的机制后实现了数据的隐藏与封装,类的数据成员一般定义为私有成员,成员函数一般定义为公有的,依此提供类与外界间的通信接口。但是,有时需要定义一些函数,这些函数不是类的一部分,但又需要频繁地访问类的数据成员,这时可以将这些函数定义为该函数的友元函数。除了友元函数…

DC电源模块的模拟电源对比数字电源的优势有哪些?

BOSHIDA DC电源模块的模拟电源对比数字电源的优势有哪些? DC电源模块是一种电子元件,用于将交流电转换为直流电,以供电路板、集成电路等电子设备使用。在直流电源模块中,有模拟电源和数字电源两种类型。 模拟电源是一种传统的电源…