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

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

文章目录

      • 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=(uc−cu)zfx,y=(vc−cv)zfy(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坐标,(fx,fy)(f_x,f_y)(fx,fy)为内参焦距,(cu,cv)(c_u,c_v)(cu,cv)为内参相机光轴与相机成像平面的交点在像素坐标系下的坐标,(uc,vc)(u_c,v_c)(uc,vc)为物体的像素坐标

Depth from height

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

在这里插入图片描述

Pespective-n-point(PnP)

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

符号说明:

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

从世界坐标系到相机坐标系:
利用旋转矩阵和平移矩阵即可完成:
[xc,yc,zc]T=R[xo,yo,zo]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⁡θ0sin⁡θ010−sin⁡θ0cos⁡θ],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

从相机坐标系到图像坐标系:
利用相机内参即可完成:
zc[u,v,1]T=K[xc,yc,zc]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=[fx0cu0fycv001]\mathbf{K}=\left[\begin{array}{ccc} f_x & 0 & c_u \\ 0 & f_y & c_v \\ 0 & 0 & 1 \end{array}\right] K=fx000fy0cucv1

核心点:

  • 上述转换过程揭示了物体的关键点在世界坐标系与对应的像素坐标系之间的几何关系
  • 这种几何关系中,Po\mathbf{P}^oPo是人为预定义的,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,\sigmap,σ分别为输出分布的均值和标准差,p∗p^*p为GT值,σ\sigmaσ在整个过程中隐式学习,不需要GT值进行监督
然后,作者还定义了包含N个高斯分布变量si∼N(μi,σi2)s_i \sim \mathcal{N}\left(\mu_i, \sigma_i^2\right)siN(μi,σi2)的集合S={si}i=1NS=\left\{s_i\right\}_{i=1}^NS={si}i=1N的分布为新的高斯分布,因为所有的head都预测同一目标的深度,注意,这里的新高斯分布,其实是N个高斯分布的权重和,权重{ωi}i=1N\left\{\omega_i\right\}_{i=1}^N{ωi}i=1N表示如下:
ωi=1/σi2∑j=1N1/σj2(6)\omega_i=\frac{1 / \sigma_i^2}{\sum_{j=1}^N 1 / \sigma_j^2} \tag{6} ωi=j=1N1/σj21/σi2(6)
因此,集合SSS的均值(最终会被直接当成深度预测结果)和方差计算如下:
μs=∑i=1Nωiμi,σs2=∑i=1Nωi2σi2(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)算法的鲁棒算法:

在这里插入图片描述

  • 首先将SSS初始化为空集,并将方差最小的深度放到SSS
  • 在maximization步骤中,μs\mu_sμsσs2\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)的深度被添加到SSS
  • 我们重复上述两个步骤,直到μs\mu_sμsσs2\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就包含在SSS中,直接使用最终的μs\mu_sμs作为后续操作的组合深度zcz_czc

3D Geometry Confidence

Coming soon…

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

相关文章:

  • 复习 Kotlin 从小白到大牛 第二版 笔记要点
  • X264简介-Android使用(二)
  • 【独家】华为OD机试 - 统计差异值大于相似值二元组个数(C 语言解题)
  • 掌握好Framework 才是王道~
  • Codeforces Round 856 (Div. 2) A — C
  • 2022年MathorCup数学建模B题无人仓的搬运机器人调度问题解题全过程文档加程序
  • 开源项目的演进会遇到哪些“坑”?KubeVela 从发起到晋级 CNCF 孵化的全程回顾
  • MSDP实验配置
  • 惊!初中生也来卷了……
  • kafka相关配置介绍
  • 【PyTorch】教程:torch.nn.Hardtanh
  • 神垕古镇景区5A级十年都没有实现的三大主因
  • react函数组件常用的几个钩子函数useState、useEffect、useRef、useCallback
  • 4N60-ASEMI高压MOS管4N60
  • 现代神经网络(VGG),并用VGG16进行实战CIFAR10分类
  • Java代码弱点与修复之——Dereference null return value(间接引用空返回值)
  • 【冲刺蓝桥杯的最后30天】day3
  • 光伏发电嵌入式ARM工控机
  • 推荐 7 个 Vue.js 插件,也许你的项目用的上(五)
  • 1.1基于知识图谱的项目实战:优酷搜索泛查询意图优化
  • [java Spring JdbcTemplate配合mysql实现数据批量删除
  • uos 20 统信 fprintd 记录
  • vue移动端h5,文本溢出显示省略号,且展示‘更多’按钮
  • php宝塔搭建部署实战兰空图床程序网站PHP源码
  • 软件测试面试:拿到一个产品(版本)如何开展测试?
  • 【Opencv项目实战】图像的像素值反转
  • Swagger生成接口在线文档
  • 104.第十九章 MySQL数据库 -- MySQL主从复制、 级联复制和双主复制(十四)
  • 第一次使用Python for Qt中的问题
  • .Net Core WebApi 在Linux系统Deepin上部署Nginx并使用(一)