【单目3D目标检测】MonoDDE论文精读与代码解析

news2024/9/24 11:31:21

文章目录

      • Preface
      • Pros and Cons
      • Abstract
      • Contributions
      • Preliminary
        • Direct depth estimation
        • Depth from height
        • Pespective-n-point(PnP)
      • Pipeline
      • Diverse Depth Estimations
      • Robust Depth Combination
        • Output distribution
        • Selecting and combining reliable depths
      • 3D Geometry Confidence

Preface

[CVPR2022] Li Z, Qu Z, Zhou Y, et al. Diversity Matters: Fully Exploiting Depth Clues for Reliable Monocular 3D Object Detection[C]. Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. 2022: 2791-2800.
Paper
[Code] Coming soon… …

Pros and Cons

  • 和MonoFlex很相似,都是在depth estimation上做的创新,相比于MonoFlex,MonoDDE额外利用了8个顶点坐标信息(又和MonoGround很像)
  • 优点:集中了更多的深度假设和几何约束,并不局限于回归物体的中心深度
  • 缺点:没有直接回归物体的3D坐标,并且代码未开源

Abstract

单幅图像深度估计是单目三维目标检测(M3OD)中最具挑战性的部分,是一个固有的不适定问题。许多现有的方法依赖于预先的假设来弥补单目图像中缺失的空间信息,并为每个感兴趣的物体预测唯一的深度值。然而,这些假设在实际应用中并不总是成立的。
为了解决这一问题,我们提出了一个深度求解系统,该系统充分探索了单目3D目标检测中子任务的视觉线索,并对每个目标的深度生成多个估计。由于深度估计在本质上依赖于不同的假设,它们呈现出不同的分布。即使一些假设崩溃了,建立在其余假设上的估计仍然是可靠的。
此外,我们还制定了深度选择和组合策略。该策略能够去除由崩溃假设引起的异常估计,并自适应地将剩余的估计组合成一个单一的估计。通过这种方式,我们的深度求解系统变得更加精确和健壮。在不引入任何额外信息的情况下,利用单目3D目标检测的多个子任务线索,在KITTI 3D物体检测基准测试中,我们的方法在中等水平的测试分割上,相对超过目前最好的方法20%以上,同时仍然保持实时效率。

Contributions

  • 指出深度估计的多样性是单目三维目标检测的关键。相应地,开发了一种新的深度求解系统,每个目标可求解20个深度
    • 1:direct depth estimation
    • 3:depth from height
    • 16:depth from 8 keypoints
  • 设计了一种深度选择和合并策略,消除由崩溃假设引起的异常值,并将剩余的可靠估计合并到单个深度
  • 此外,提出了一种新的条件三维置信度建模方法

Preliminary

Direct depth estimation

由backbone直接回归得到,之后根据投影模型得到物体的3D坐标:
x = ( u c − c u ) z f x , y = ( v c − c v ) z f y (1) x=\frac{\left(u_c-c_u\right) z}{f_x}, \quad y=\frac{\left(v_c-c_v\right) z}{f_y} \tag{1} x=fx(uccu)z,y=fy(vccv)z(1)
其中, ( x , y ) (x,y) (x,y)为物体的3D坐标, ( f x , f y ) (f_x,f_y) (fx,fy)为内参焦距, ( c u , c v ) (c_u,c_v) (cu,cv)为内参相机光轴与相机成像平面的交点在像素坐标系下的坐标, ( u c , v c ) (u_c,v_c) (uc,vc)为物体的像素坐标

Depth from height

与MonoFlex中的一致,分为三组,然后利用几何关系得到物体的depth:
z = f y h h ′ (2) z=\frac{f_yh}{h'} \tag{2} z=hfyh(2)
其中, h h h是物体的实际高度, h ′ h' h是物体的像素高度,分组示意图如下所示(b):

在这里插入图片描述

Pespective-n-point(PnP)

PnP(Perspective-n-Point)是求解3D点到2D点对运动的方法,目的是求解相机坐标系相对世界坐标系的位姿。它描述了已知n个3D点的坐标(相对世界坐标系)以及这些点的像素坐标时,如何估计相机的位姿(即求解世界坐标系到相机坐标系的旋转矩阵 R R R和平移向量 T T T)

符号说明:

  • 世界坐标系的坐标: P o = ( x o , y o , z o ) T \mathbf{P}^o=\left(x^o, y^o, z^o\right)^T Po=(xo,yo,zo)T
  • 相机坐标系的坐标: P c = ( x c , y c , z c ) T \mathbf{P}^c=\left(x^c, y^c, z^c\right)^T Pc=(xc,yc,zc)T
  • 像素坐标系的坐标: [ u , v , 1 ] T [u, v, 1]^T [u,v,1]T

从世界坐标系到相机坐标系:
利用旋转矩阵和平移矩阵即可完成:
[ x c , y c , z c ] T = R [ x o , y o , z o ] T + T (3) \left[x^c, y^c, z^c\right]^T=\mathbf{R}\left[x^o, y^o, z^o\right]^T+\mathbf{T} \tag{3} [xc,yc,zc]T=R[xo,yo,zo]T+T(3)
其中, R \mathbf{R} R为旋转矩阵, T \mathbf{T} T为平移矩阵:
R = [ cos ⁡ θ 0 sin ⁡ θ 0 1 0 − sin ⁡ θ 0 cos ⁡ θ ] , T = [ x , y , z ] T \mathbf{R}=\left[\begin{array}{ccc} \cos \theta & 0 & \sin \theta \\ 0 & 1 & 0 \\ -\sin \theta & 0 & \cos \theta \end{array}\right], \quad \mathbf{T}=\left[\begin{array}{lll} x, & y, & z \end{array}\right]^T R= cosθ0sinθ010sinθ0cosθ ,T=[x,y,z]T

从相机坐标系到图像坐标系:
利用相机内参即可完成:
z c [ u , v , 1 ] T = K [ x c , y c , z c ] T (4) z^c[u, v, 1]^T=\mathbf{K}\left[x^c, y^c, z^c\right]^T \tag{4} zc[u,v,1]T=K[xc,yc,zc]T(4)
其中, K \mathbf{K} K为相机内参:
K = [ f x 0 c u 0 f y c v 0 0 1 ] \mathbf{K}=\left[\begin{array}{ccc} f_x & 0 & c_u \\ 0 & f_y & c_v \\ 0 & 0 & 1 \end{array}\right] K= fx000fy0cucv1

核心点:

  • 上述转换过程揭示了物体的关键点在世界坐标系与对应的像素坐标系之间的几何关系
  • 这种几何关系中, P o \mathbf{P}^o Po是人为预定义的, K \mathbf{K} K是相机内参(已知的), R , ( u , v ) \mathbf{R},(u,v) R,(u,v)是由网络预测得到的,只有平移矩阵 T \mathbf{T} T是需要求解的
  • Since every 3D keypoint provides 2 geometric constraints, we can obtain x, y and z simultaneously using the least squares method if we have at least 2 keypoints

Pipeline

在这里插入图片描述

  • Backbone:DLA34
  • Head:多组回归头
    • categorical heatmap
    • 2D bounding box
    • dimension
    • keypoint offsets
    • orientation
    • depth
    • multiple uncertainty items
  • 之后经过深度选择机制,过滤掉深度异常值,并将剩余的深度值合并为一个值,然后代入公式(1),就可以计算得到物体的坐标信息

Diverse Depth Estimations

在MonoDDE中,作者期望开发的深度求解系统具有三个关键特征:

  • 它应该专注于获得深度z,而不是同时计算x、y和z
  • 与现有方法相比,它应该产生多种多样的深度估计值
  • 它应充分利用所有可用信息,包括视觉线索、估计目标中心、维度、方向和关键点等

Robust Depth Combination

尽管作者设计的深度解决系统产生了多样化的深度表示,并且包括有希望的估计,但它们还包含异常值。因此,作者之后考虑的问题是如何选择更准确的估计并将它们组合成一个值。为此,设计了一种策略,迭代地去除异常值并根据不确定性合并剩余的深度值

Output distribution

假设预测输出的深度都满足高斯分布,在网络head中加一个分支,用于预测该分布的均值和方差,并使用以下损失进行学习:
L σ = ∣ p − p ∗ ∣ σ + log ⁡ σ (5) L_\sigma=\frac{\left|p-p^*\right|}{\sigma}+\log \sigma \tag{5} Lσ=σpp+logσ(5)
其中, p , σ p,\sigma p,σ分别为输出分布的均值和标准差, p ∗ p^* p为GT值, σ \sigma σ在整个过程中隐式学习,不需要GT值进行监督
然后,作者还定义了包含N个高斯分布变量 s i ∼ N ( μ i , σ i 2 ) s_i \sim \mathcal{N}\left(\mu_i, \sigma_i^2\right) siN(μi,σi2)的集合 S = { s i } i = 1 N S=\left\{s_i\right\}_{i=1}^N S={si}i=1N的分布为新的高斯分布,因为所有的head都预测同一目标的深度,注意,这里的新高斯分布,其实是N个高斯分布的权重和,权重 { ω i } i = 1 N \left\{\omega_i\right\}_{i=1}^N {ωi}i=1N表示如下:
ω i = 1 / σ i 2 ∑ j = 1 N 1 / σ j 2 (6) \omega_i=\frac{1 / \sigma_i^2}{\sum_{j=1}^N 1 / \sigma_j^2} \tag{6} ωi=j=1N1/σj21/σi2(6)
因此,集合 S S S的均值(最终会被直接当成深度预测结果)和方差计算如下:
μ s = ∑ i = 1 N ω i μ i , σ s 2 = ∑ i = 1 N ω i 2 σ i 2 (7) \mu_s=\sum_{i=1}^N \omega_i \mu_i, \sigma_s^2=\sum_{i=1}^N \omega_i^2 \sigma_i^2 \tag{7} μs=i=1Nωiμi,σs2=i=1Nωi2σi2(7)

Selecting and combining reliable depths

作者首先使用公式(5)训练网络来预测20个深度分布的均值和方差,并将这20个分布组成集合S,然后基于3σ规则过滤掉离群值,并设计出类似于期望最大化(EM)算法的鲁棒算法:

在这里插入图片描述

  • 首先将 S S S初始化为空集,并将方差最小的深度放到 S S S
  • 在maximization步骤中, μ s \mu_s μs σ s 2 \sigma^2_s σs2使用公式(6)-(7)进行更新
  • 在expectation步骤中,落入 ( μ s − 3 σ s , μ s + 3 σ s ) \left(\mu_s-3 \sigma_s, \mu_s+3 \sigma_s\right) (μs3σs,μs+3σs)的深度被添加到 S S S
  • 我们重复上述两个步骤,直到 μ s \mu_s μs σ s 2 \sigma^2_s σs2收敛
  • 之后,将 ( μ s − 3 σ s , μ s + 3 σ s ) \left(\mu_s-3 \sigma_s, \mu_s+3 \sigma_s\right) (μs3σs,μs+3σs)的所有深度视为异常值,并将其去除
  • 最终,可靠的depth就包含在 S S S中,直接使用最终的 μ s \mu_s μs作为后续操作的组合深度 z c z_c zc

3D Geometry Confidence

Coming soon…

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

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

相关文章

JVM-从熟悉到精通

JVM 机器语言 一个指令由操作码和操作数组成 方法调用等于一个压栈的过程 栈有 BP寄存器 和 SP寄存器来占用空间 BP -> Base Point 栈基址(栈底)SP -> Stack Point 栈顶 字节序用于规定数据在内存单元如何存放,二进制位的高位和低…

计算机组成原理|第二章(笔记)

目录第二章 计算机的发展及应用2.1 计算机的发展史2.1.1 计算机的生产和发展2.1.2 微型计算机的出现和发展2.1.3 软件技术的兴起与发展2.2 计算机的应用2.3 计算机的展望上篇:第一章:计算机系统概论 第二章 计算机的发展及应用 2.1 计算机的发展史 2.1.…

基于半车悬架的轴距预瞄与轴间预瞄仿真对比

目录 前言 1. 半车悬架模型 2.轴距预瞄(单点预瞄)和轴间预瞄(两点预瞄)原理与仿真分析 2.1轴距预瞄(单点预瞄) 2.1.1预瞄原理 2.2.轴间预瞄(两点预瞄) 2.2.1预瞄原理 2.3仿真分析 3.总结 前言 对于悬架而言,四个车轮实际的输入信息是受到前后延时以及左右相…

SpringCloud:Feign的使用及配置

目录 Feign的使用及配置 1、Feign替代RestTemplate 2、使用Fegin步骤 3、自定义配置 4、Feign使用优化 5、Feign的最佳实践方式 Feign的使用及配置 1、Feign替代RestTemplate RestTemplate方式远程调用的问题 问题: 1、代码可读性差,编程体验不同…

HTML基本概述

文章目录网站和网页浏览器的作用HTML标签元素注释乱码问题web系统是以网站形式呈现的,而前端是以网页形式呈现的。 网站和网页 网站(web site):互联网上用于展示特定内容的相关网页的集合。也就是说,一个网站包含多个…

【预告】ORACLE Primavera P6 v22.12 虚拟机发布

引言 离ORACLE Primavera P6 EPPM最新系统 v22.12已过去了3个多月,应盆友需要,也为方便大家体验,我近日将构建最新的P6的虚拟环境,届时将分享给大家,最终可通过VMWare vsphere (esxi) / workstation 或Oracle virtua…

SQL 窗口函数详解

SQL窗口函数详解 窗口函数的主要作用是对数据进行分组排序、求和、求平均值、计数等。 一、窗口函数的基本语法 <分析函数> OVER ([PARTITION BY <列清单>] ORDER BY <排序用列清单> [ROWS BETWEEN 开始位置 AND 结束位置])理解窗口函数的基本语法&#xff…

opencv校正图像

目录1、前言2、例程2.1、代码2.2、效果口罩说明书网页3、按步骤分析转灰度图降噪 Canny边缘检测膨胀&#xff08;可视具体情况省略&#xff09;轮廓检索选取角度1、前言 我们用相机拍照时&#xff0c;会因为角度问题造成拍歪&#xff0c;会影响图像的识别&#xff0c;这时就需…

【PyTorch】教程:torch.nn.Hardtanh

torch.nn.Hardtanh 原型 CLASS torch.nn.Hardtanh(min_val- 1.0, max_val1.0, inplaceFalse, min_valueNone, max_valueNone) 参数 min_val ([float]) – 线性区域的最小值&#xff0c;默认为 -1max_val ([float]) – 线性区域的最大值&#xff0c;默认为 1inplace ([bool]) …

ABP(ASP.NET Boilerplate)配置整合使用Mysql数据库

ABP默认是支持sqlserver数据库的&#xff0c;但是这并不影响使用其他数据库&#xff0c;稍微配置一下就行了&#xff01;很简单——————————— 一、 卸载原来存在Sql Server的依赖包 在程序包管理控制台输入&#xff0c;选择EntityFrameworkCore 然后执行删除包的命令…

基于intel x86+fpga智能驾驶舱和高级驾驶辅助系统硬件设计(二)

系统功能架构及各模块功能介绍 智能驾驶舱和高级驾驶辅助系统是一个车载智能终端嵌入式平台&#xff0c;系统是一个能够运行 虚拟化操作系统的软件和硬件的综合体。本文的车载主机包括硬件主控处理器、电源管理芯 片、存储设备、输入输出控制器、数字仪表系统系统、后座娱乐系统…

抖音怎么合理安排直播内容|辽宁千圣文化

抖音主播们可以利用直播的方式达到带货的底模&#xff0c;那么做主播的话&#xff0c;就要利用好抖音主播中心&#xff0c;很多抖音用户却表示找不到抖音主播中心&#xff0c;那么怎么去看呢&#xff1f;跟着辽宁千圣文化小编来一起看看吧&#xff01;如何成为一名合格的主播&a…

【操作系统原理实验】调度算法模拟实现

选择一种高级语言如C/C等&#xff0c;模拟实现调度算法完成资源分配与回收的过程。2) 自定义PCB等核心数据结构&#xff1b;3) 利用列表、队列等容器类或者其他数据结构管理PCB,完成相应调度算法的模拟&#xff1b;4) 实现外围一些命令如创建进程、查看进程、关闭进程等&#x…

Spacedesk软件推荐,让你的平板也变成电脑的副屏

我的设备&#xff1a; 电脑:戴尔G15 5511、i7-11800H、Windows 11、RTX3060 平板&#xff1a;荣耀V6、麒麟985、安卓10、分辨率2000*1200&#xff08;手机也行&#xff0c;我用的平板&#xff09; 实际使用&#xff1a; 先给放一张实际使用的照片 可以让平板变成电脑的副屏…

28 位委员出席,龙蜥社区第 15 次运营委员会会议顺利召开

2 月 24 日&#xff0c;龙蜥社区在海光召开了第 15 次运营委员会会议&#xff0c;本次会议由统信软件运营委员会委员崔开主持。来自 Arm、阿里云、飞腾、红旗软件、海光、Intel、龙芯、联通软研院、浪潮信息、普华基础软件、统信软件、万里红、移动、中科方德等理事单位的 28 位…

echarts--提示框显示不全问题记录

最近接手一个同事之前做的网页&#xff0c;发现里面使用echarts来绘制各类图表&#xff1b;有2个问题一个是提示框显示不全&#xff0c;另一个就是绘制总是有部分数据显示不全。后者就是div宽度问题。。。无语&#xff0c;说下前面一个问题吧&#xff0c;记录一下。 tooltip组…

【redis学习篇】主从哨兵集群架构详解

一、Redis主从架构 1.1 redis主从架构搭建 1、复制一份redis.conf文件 2、将相关配置修改为如下值&#xff1a; port 6380 pidfile /var/run/redis_6380.pid # 把pid进程号写入pidfile配置的文件 logfile "6380.log" dir /usr/local/redis-5.0.3/data/6380 # 指…

Linux基础命令-groupmems管理组群的成员

Linux-usermod修改用户 Linux-useradd创建用户 Linux-userdel删除用户 Linux基础命令-chown修改文件属主 Linux基础命令-chmod修改文件权限 groupmems 命令介绍 先来看看这个命令的帮助信息是什么概念 NAME groupmems - administer members of a user’s primary group group…

Spark Tungsten

Spark Tungsten数据结构Unsafe Row内存页管理全阶段代码生成火山迭代模型WSCG运行时动态生成Tungsten (钨丝计划) : 围绕内核引擎的改进&#xff1a; 数据结构设计全阶段代码生成&#xff08;WSCG&#xff0c;Whole Stage Code Generation&#xff09; 数据结构 Tungsten 在…

如何提高代码质量

我们要写出好的代码&#xff0c;其前提是要知道“好”和“烂”定义的标准是什么&#xff0c;然后才能在写代码的时候&#xff0c;去设计一份好的代码。 如何定义“好”的代码&#xff1f; 好和坏是一个比较笼统的概率&#xff0c;代码质量高低是一个综合各种因素得到的结论&am…