【单目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(uc−cu)z,y=fy(vc−cv)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=h′fyh(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θ0−sinθ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σ=σ∣p−p∗∣+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)si∼N(μ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=1∑Nωiμi,σs2=i=1∑Nω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)(μs−3σ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)(μs−3σs,μs+3σs)的所有深度视为异常值,并将其去除
- 最终,可靠的depth就包含在SSS中,直接使用最终的μs\\mu_sμs作为后续操作的组合深度zcz_czc
3D Geometry Confidence
Coming soon…