DID-M3D 论文学习

news2024/10/6 1:41:28

1. 解决了什么问题?

单目 3D 检测成本低、配置简单,对一张 RGB 图像预测 3D 空间的 3D 边框。最难的任务就是预测实例深度,因为相机投影后会丢失深度信息。以前的方法大多直接预测深度,本文则指出 RGB 图像上的实例深度不是一目了然的,它由视觉深度信息和实例属性信息耦合,很难直接用网络学到。
在这里插入图片描述

2. 提出了什么方法?

将实例深度看作为实例视觉表面深度(visual depth)和实例属性深度(attribute depth)的结合。Visual depth 与物体的外观和画面中的位置有关。Attribute depth 则取决于物体的内在属性(维度、朝向等),它关注于 RoI 内的特征,与图像中的仿射变换无关。Visual depth 定义是物体上每个点到相机的绝对深度值,attribute depth 是从这些点到物体 3D 中心的相对深度偏移量。我们用不同的 heads 来提取不同类型的特征,分别进行深度预测。

对于每个图块,分割为 m × n m\times n m×n个网格。每个网格表示物体的一小部分,它有一个 visual depth 和 attribute depth。考虑到遮挡和 3D 位置的不确定性,uncertainty 表示每个深度预测的置信度。推理时,每个目标输出 m × n m\times n m×n个实例深度预测,自适应地获取最终的实例深度预测和置信读。

Preliminaries

单目 3D 目标检测的输入是一张 RGB 图像 I ∈ R H × W × 3 \text{I}\in \mathbb{R}^{H\times W\times 3} IRH×W×3,在 3D 空间预测单模态的 3D 边框,包括 3D 中心点位置 ( x , y , z ) (x,y,z) (x,y,z)、维度 ( h , w , l ) (h,w,l) (h,w,l)和朝向角 θ \theta θ,朝向角通常指的是偏航角。经过特征编码后,得到特征图 F ∈ R H 4 × W 4 × C \text{F}\in \mathbb{R}^{\frac{H}{4}\times \frac{W}{4}\times C} FR4H×4W×C C C C是通道数。然后 F \text{F} F输入进 3 个 2D 检测 heads,即 2D 热力图 H ∈ R H 4 × W 4 × B \text{H}\in \mathbb{R}^{\frac{H}{4}\times \frac{W}{4}\times B} HR4H×4W×B、2D 偏移量 O 2 d ∈ R H 4 × W 4 × 2 \text{O}_{2d}\in \mathbb{R}^{\frac{H}{4}\times \frac{W}{4}\times 2} O2dR4H×4W×2、2D size S 2 d ∈ R H 4 × W 4 × 2 \text{S}_{2d}\in \mathbb{R}^{\frac{H}{4}\times \frac{W}{4}\times 2} S2dR4H×4W×2 B B B是类别数。这样,我们可以得到 2D 边框预测。然后,根据这些 2D 框从特征图 F \text{F} F上使用 RoI Align 提取单个目标的特征, F o b j ∈ R n × 7 × 7 × C \text{F}_{obj}\in \mathbb{R}^{n\times 7\times 7\times C} FobjRn×7×7×C,其中 7 × 7 7\times 7 7×7是 RoI Align 的大小, n n n是 RoIs 的个数。最后,将这些目标特征 F o b j \text{F}_{obj} Fobj输入进 3D 检测 heads 获取 3D 参数。于是,我们就有了 3D 中心点映射偏移量 O 3 d ∈ R n × 2 \text{O}_{3d}\in \mathbb{R}^{n\times 2} O3dRn×2、3D 边框维度 S 3 d ∈ R n × 3 \text{S}_{3d}\in \mathbb{R}^{n\times 3} S3dRn×3、朝向角 Θ ∈ R n × k × 2 \Theta\in \mathbb{R}^{n\times k\times 2} ΘRn×k×2 k k k是 multi-bin 里面的个数)、visual depth D v i s ∈ R n × 7 × 7 \text{D}_{vis}\in \mathbb{R}^{n\times 7\times 7} DvisRn×7×7、visual depth uncertainty U v i s ∈ R n × 7 × 7 \text{U}_{vis}\in \mathbb{R}^{n\times 7\times 7} UvisRn×7×7、attribute depth D a t t r ∈ R n × 7 × 7 \text{D}_{attr}\in \mathbb{R}^{n\times 7\times 7} DattrRn×7×7、attribute depth uncertainty U a t t r ∈ R n × 7 × 7 \text{U}_{attr}\in \mathbb{R}^{n\times 7\times 7} UattrRn×7×7。有了这些参数,我们就可计算出最终的 3D 边框预测。

Decoupled Instance Depth

Visual Depth

表示物体表面在小 RoI 网格上的物理深度。每个网格的 visual depth 就是网格内所有像素的平均深度。单目图像里的 visual depth 有一个重要特性。对于一个单目系统,visual depth 高度依赖物体的 2D 框大小(远处的物体在图像上要小一些)以及图像中的位置(图像坐标系里的 v v v越小,表示深度越深)。所以,如果我们对图像做仿射变换,visual depth 也会随之变换,深度值应该随之缩放。这个过程就是 affine-sensitive。
在这里插入图片描述

Attribute Depth

表示从物体视觉表面到目标 3D 中心点的深度偏移量。它和物体的内在属性联系更加紧密,所以叫做 attribute depth。例如,当车辆朝向与 3D 空间的 z z z轴(深度方向)平行时,车尾的 attribute depth 就是车子长度的一半;当朝向与 x x x轴平行,则 attribute depth 是车子宽度的一半。Attribute depth 取决于物体的语义信息和内在特性,并且对于仿射变换是不敏感的,因为物体的内在特性不会随着仿射变换而变化。这个过程就是 affine-invariant。

作者使用 2 个 heads 分别预测 visual depth 和 attribute depth。有以下的好处:

  • 以一种合理并自然的方式将目标深度解耦,更能全面、准确地表示物体;
  • 网络针对不同类型的深度提取不同的特征,加速学习;
  • 深度解耦了,就能通过仿射变换进行有效的数据增广。

数据增广

在单目 3D 检测领域,很少用仿射变换做数据增广,因为变换后的深度信息是不知道的。在数据增广中,作者增加了随机裁剪和尺度缩放策略。图像上的 3D 中心映射点也进行相同的仿射变换。用图像上 y y y轴的缩放系数来对 visual depth 做缩放,因为 d = f ⋅ h 3 d h 2 d d=\frac{f\cdot h_{3d}}{h_{2d}} d=h2dfh3d f , h 3 d , h 2 d f,h_{3d},h_{2d} f,h3d,h2d分别是焦距、物体的 3D 高度和 2D 高度。Attribute depth 会保持不变,因为它对仿射变换无感。类似地,物体的其它内在特性如观测角、维度,都保持不变。
在这里插入图片描述

Depth Uncertainty and Aggregation

因为 3D 定位比较困难,2D 分类得分无法充分表示单目 3D 检测的置信度。本文将实例深度 uncertainty 解耦为 visual depth uncertainty 和 attribute depth uncertainty。只有当物体的 visual depth uncertainty 和 attribute depth uncertainty 都很低时,实例深度的置信度才。

假设 D v i s ∈ R n × 7 × 7 \text{D}_{vis}\in \mathbb{R}^{n\times 7\times 7} DvisRn×7×7里的每一个 visual depth d v i s d_{vis} dvis以及 U v i s ∈ R n × 7 × 7 \text{U}_{vis}\in \mathbb{R}^{n\times 7\times 7} UvisRn×7×7里其对应的 uncertainty u v i s u_{vis} uvis预测都服从 Laplace 分布 L ( d v i s , u v i s ) L(d_{vis},u_{vis}) L(dvis,uvis)。类似,attribute depth 的分布是 L ( d a t t , u a t t ) L(d_{att},u_{att}) L(datt,uatt),其中 d a t t ∈ D a t t ∈ R n × 7 × 7 d_{att}\in \text{D}_{att} \in \mathbb{R}^{n\times 7\times 7} dattDattRn×7×7 u a t t ∈ U a t t ∈ R n × 7 × 7 u_{att}\in \text{U}_{att}\in \mathbb{R}^{n\times 7\times 7} uattUattRn×7×7。因此,实例深度分布就是 L ( d ~ i n s , u ~ i n s ) L(\tilde{d}_{ins}, \tilde{u}_{ins}) L(d~ins,u~ins),其中 d ~ i n s = d v i s + d a t t \tilde{d}_{ins} = d_{vis}+d_{att} d~ins=dvis+datt u ~ i n s = u v i s 2 + u a t t 2 \tilde{u}_{ins}=\sqrt{u_{vis}^2 + u_{att}^2} u~ins=uvis2+uatt2 。然后用 D ~ i n s ( p a t c h ) ∈ R n × 7 × 7 \tilde{\text{D}}_{ins(patch)}\in \mathbb{R}^{n\times 7\times 7} D~ins(patch)Rn×7×7 U ~ i n s ( p a t c h ) ∈ R n × 7 × 7 \tilde{\text{U}}_{ins(patch)}\in \mathbb{R}^{n\times 7\times 7} U~ins(patch)Rn×7×7表示 RoI 内的实例深度以及 uncertainty。

为了获得最终的实例深度,首先将 uncertainty 转化为概率, P i n s ( p a t c h ) = exp ⁡ ( − U ~ i n s ( p a t c h ) ) {\text{P}}_{ins(patch)}=\exp(-\tilde{\text{U}}_{ins(patch)}) Pins(patch)=exp(U~ins(patch)),其中 P i n s ( p a t c h ) ∈ R n × 7 × 7 {\text{P}}_{ins(patch)}\in \mathbb{R}^{n\times 7\times 7} Pins(patch)Rn×7×7。然后聚合图块内的实例深度。对于第 i ∈ { i , . . . , N } i\in \lbrace i,...,N\rbrace i{i,...,N}个物体,我们有:
d i n s = ∑ D ~ i n s ( p a t c h ) i P i n s ( p a t c h ) i ∑ P i n s ( p a t c h ) i d_{ins}=\sum \frac{\tilde{\text{D}}_{ins(patch)_i}{\text{P}}_{ins(patch)_i}}{\sum {\text{P}}_{ins(patch)_i}} dins=Pins(patch)iD~ins(patch)iPins(patch)i

对应的实例深度置信度就是:

p i n s = ∑ ( P i n s ( p a t c h ) i ∑ P i n s ( p a t c h ) i P i n s ( p a t c h ) i ) p_{ins}=\sum \left( \frac{\text{P}_{ins(patch)_i}}{\sum \text{P}_{ins(patch)_i}}\text{P}_{ins(patch)_i}\right) pins=(Pins(patch)iPins(patch)iPins(patch)i)
因此,最终的 3D 检测置信度就是 p = p 2 d ⋅ p i n s p=p_{2d}\cdot p_{ins} p=p2dpins p 2 d p_{2d} p2d是 2D 检测置信度。

损失函数

2D 检测:延续了 CenterNet,2D 热力图 H \text{H} H表示图像上物体大概的中心位置。其大小是 H 4 × W 4 × B \frac{H}{4}\times \frac{W}{4}\times B 4H×4W×B H , W , B H,W,B H,W,B分别是输入图像的高度、宽度和类别数。2D 偏移量 O 2 d O_{2d} O2d表示相对于 2D 中心点的偏移。2D 大小 S 2 d S_{2d} S2d表示 2D 框的高度和宽度。跟 CenterNet 一样,损失函数由 L H , L O 2 d , L S 2 d \mathcal{L}_H,\mathcal{L}_{O_{2d}},\mathcal{L}_{S_{2d}} LH,LO2d,LS2d组成。

3D 检测

  • 对于 3D 物体的维度,使用了常用的变换和损失设计 L S 3 d \mathcal{L}_{S_{3d}} LS3d
  • 对于朝向角,网络预测观测角,使用 multi-bin 损失 L Θ \mathcal{L}_{\Theta} LΘ
  • 使用图像平面上的 3D 中心点投影和实例的深度来还原物体的 3D 坐标。通过预测关于 2D 中心点的 3D 投影的偏移量,实
    现 3D 中心点投影。损失函数是 L O 3 d = Smooth L 1 ( O 3 d , O 3 d ∗ ) \mathcal{L}_{O_{3d}}=\text{Smooth}L_1(O_{3d}, O_{3d}^*) LO3d=SmoothL1(O3d,O3d) ∗ * 表示对应的标签。
  • 通过将激光雷达的点云投影到图像上得到 visual depth,然后实例深度标签减去 visual depth 标签,得到 attribute depth 标签。Visual depth 损失是: L D v i s = 2 u v i s ∥ d v i s − d v i s ∗ ∥ + log ⁡ ( u v i s ) \mathcal{L}_{D_{vis}}=\frac{\sqrt{2}}{u_{vis}}\left\|d_{vis}-d_{vis}^*\right\|+\log(u_{vis}) LDvis=uvis2 dvisdvis+log(uvis) u v i s u_{vis} uvis是 uncertainty。

类似地,我们有 attribute depth 损失 L D a t t \mathcal{L}_{D_{att}} LDatt,实例深度损失 L D i n s \mathcal{L}_{D_{ins}} LDins。整体损失是:

L = L H + L O 2 d + L S 2 d + L S 3 d + L Θ + L D v i s + L D a t t + L D i n s \mathcal{L}=\mathcal{L}_H+\mathcal{L}_{O_{2d}}+\mathcal{L}_{S_{2d}}+\mathcal{L}_{S_{3d}}+\mathcal{L}_\Theta+\mathcal{L}_{D_{vis}}+\mathcal{L}_{D_{att}}+\mathcal{L}_{D_{ins}} L=LH+LO2d+LS2d+LS3d+LΘ+LDvis+LDatt+LDins

3. 有什么优点?

将实例的深度解耦为 visual depth 和物体的内在属性,网络能学到不同类型的深度特征。并且在数据增广时,能对图像有效地进行仿射变换,取得不错的效果。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从《流浪地球2》看多团队任务管理

《流浪地球2》作为春节档热门电影,讲述了地球因为太阳系内其他恒星的影响而不断向外逃离,人类必须采取行动拯救地球和自己的故事,是中国科幻电影的里程碑式影片。影片中充满各种科技元素,令人印象深刻,量子计算机550系…

【libcurl 】win32 构建 Release版本 修改cmakelist 链接openssl1.1.*

以下库均已MD的构建以vs2019 V142构建MD构建 直接换用了一个openssl库,libcurl连接报错 $(ProjectDir)..\..\..\3rdparty\openssl\xdw_openssl1_1_1\lib\win32\libcrypto.lib

Seata-go TCC 设计与实现

作者:刘月财 本文主要介绍 seata-go 中 TCC 的设计思路、异常处理以及在实战中的使用。 Seata 是一款开源的分布式事务解决方案,致力于为现代化微服务架构下的分布式事务提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和…

IS日志文件存在哪里? Windows服务器lIS日志存放位置及查看

用户每打开一次网页,iis,都会记录用户IP、访问的网页地址、访问时间、访问状态等信息,这些信息保存在iis日志文件里,方便网站管理员掌握网页被访问情况和iis 服务器运行情况。如果网页被恶意访问(如注入数据库),日志中会有相应的记…

C++ 仿函数(二)

在上一篇里我们讲了仿函数是什么,以及一元谓词,二元谓词的概念 C 仿函数(一)_小梁今天敲代码了吗的博客-CSDN博客 这篇是讲“内建函数对象”主要包括:“算术仿函数”,“关系仿函数”,“逻辑仿函数” 目录 一.算术仿…

6年自动化测试经验,终于进字节跳动了,年薪30w其实也并非遥不可及

一些碎碎念 什么都做了,和什么都没做其实是一样的,走出“瞎忙活”的安乐窝,才是避开弯路的最佳路径。希望我的经历能帮助到有需要的朋友。 在测试行业已经混了5个年头了,以前经常听到开发对我说,天天的点点点有意思没…

LC-1373. 二叉搜索子树的最大键值和(后序遍历)

1373. 二叉搜索子树的最大键值和 难度困难173 给你一棵以 root 为根的 二叉树 ,请你返回 任意 二叉搜索子树的最大键值和。 二叉搜索树的定义如下: 任意节点的左子树中的键值都 小于 此节点的键值。任意节点的右子树中的键值都 大于 此节点的键值。任…

IP协议详解之IP地址要领

整个的因特网就是一个单一的、抽象的网络。而IP地址就是给因特网上的每一个主机(或路由器)的每一个接口分配一个在全世界范围是唯一的32位的标识符。IP地址的结构使我们可以在因特网上很方便地进行寻址。但是,根据TCP/IP协议的规定的IP地址是…

【Flutter 工程】002-代码生成:Freezed ——类似 Java 的 lombok

【Flutter 工程】002-代码生成:Freezed ——类似 Java 的 lombok 文章目录 【Flutter 工程】002-代码生成:Freezed ——类似 Java 的 lombok一、概述1、简介2、主要功能3、主页与使用前后比较主页使用前使用后 二、基本使用1、安装2、改造 main.dart3、创…

pygam第4课——颜色监测(迷宫小游戏)

前言:前三节课我们学习了,窗口的创建、图片的加载、常用鼠标事件的等。今天我们学一个颜色的监测,并自制一个迷宫小游戏。那我们一下来看看吧 前面的三节课在这里,大家记得关注收藏一下: 视频演示 1、界面搭建 背景图…

开发者关系工程师如何帮助开发者在Sui上构建

近期,我们与Sui开发者关系负责人Brian Hennessey-Hsien进行了对话,就Sui上的开源、去中心化和开发者成就等话题展开讨论。 日前,我们采访了Sui基金会的开发者关系负责人Brian Hennessey-Hsieh,共同探讨了其对于Web3中开发者发展历…

冷热温度正反向控制技术在换热器热疲劳试验中的应用

摘要:空调换热器需要进行可靠性试验以满足整机产品在不同环境下的寿命周期,温度交变试验是可靠性试验中是较为关键的一项。本文在现有PLC交变温度控制技术基础上,提出了一种模块式的改进解决方案,即增加了专用的高精度PID调节器分…

不入耳耳机的正确打开方式,韶音OpenFit诠释耳机的“舒适圈”

文 | 智能相对论 作者 | 佘凯文 总有人说,人们需要跳出舒适圈,逼着自己去不断挑战。也有人问,我满足现状,为什么要跳出舒适圈?说到底,两种说法都没有错,不过该不该走出舒适圈或许也得分“场合…

麻了,最好不要去外包,干了三年,废了一半......

先说一下自己的情况,大专生,18年通过校招进入湖南某软件公司,干了接近4年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…

【coding加油站】vue单页面图书管理系统

1、引言 设计结课作业,课程设计无处下手,网页要求的总数量太多?没有合适的模板?数据库,java,python,vue,html作业复杂工程量过大?毕设毫无头绪等等一系列问题。你想要解决的问题&am…

数据结构课程设计——运动会分数统计

运动会分数统计 数据结构课程设计任务书 学生姓名:xxx 专业班级:软件工程 指导教师: 工作单位: 题 目: 运动会分数统计 基础要求: 要求具有C语言的理论基础…

ProtoBuf安装及避坑指南

文章目录 安装前注意事项(避坑)ProtoBuf在Linux下的安装protoBuf 测试demo 安装前注意事项(避坑) 1.安装前,我们需要升级g,使用较新的g编译器。 2.在安装过程中,出现问题,可以选择安装其他版本,在加压文件下执行make …

NFTScan:05.15~05.21 NFT 市场热点汇总

欢迎来到由 NFT 基础设施 NFTScan 出品的 NFT 生态热点事件每周汇总。 周期:2023.05.15 ~ 2023.05.21 NFT Hot News:NFT 热点资讯 01/ DID 解决方案提供商 Lifeform 以 3 亿美元估值完成 IDG Capital 领投的 B 轮融资 5 月 15 日,去中心化…

Rocketmq常用使用场景

RocketMQ 是阿里开源的分布式消息中间件,跟其它中间件相比,RocketMQ 的特点是纯JAVA实现 基础概念 Producer: 消息生产者,负责产生消息,一般由业务系统负责产生消息 Producer Group: 消息生产者组&#xf…

ESP32CAM---利用Vscode阅读源码

前言 (1)首先,我在此吐槽一些,arduino平台的代码阅读功能,是真滴垃圾。气死我了。配置这玩意搞了半天,还没搞好。 (2)最后我决定使用Vscode阅读arduino的代码。arduino IDE负责编译程…