Qin Z, Li X. MonoGround: Detecting Monocular 3D Objects From the Ground[C]. In Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. 2022: 3793-3802.
Paper
Code
从单幅二维图像中获取三维信息本质上比较困难,主要有以下三点原因:
针对上述问题,本文提出在单目3D目标检测任务之前引入地平面先验(Ground Plane Prior)。在地平面先验的情况下,病态的2D到3D映射成为一个具有唯一解的适定问题。唯一解由相机射线与地平面的交点决定。深度表达不再与物体高度相关,如图2所示
本工作的主要贡献可以概括如下:
单目3D目标检测中的地平面先验:
单目3D目标检测中的深度估计:
单目3D目标检测任务是从单目RGB图像中检测出3D目标(ill-posed)。除了RGB图像,还可以采用标定信息(即摄像机参数矩阵)。具体来说,对于每个物体,都需要:
与上述目标相对应,主流方法将整个任务划分为4个子任务,分别是2D位置(根据投影公式计算出3D位置)、深度、大小和方向估计任务。而深度估计是单眼三维目标检测的关键瓶颈,本文的工作专注于精确的深度估计
通过3D框的标注信息,来获取密集的地平面表示
整个流程如下:
- 首先利用物体的标注坐标信息,获取底面四个角点的坐标
- 利用底面四个角点的坐标,在地面随机采样,获得地面的随机采样点 P 3 d P_{3d} P3d(此时为3D坐标)
- 将地面的随机采样点坐标,转换为2D图像坐标
为了定义地平面,本文从一个合理的假设开始,即物体位于地面上。这个假设适用于所有常见的物体,如汽车、行人和骑自行车的人。在此假设下,可以用物体三维边界框的底面代替地平面。对于每个对象,我们首先获得3D空间中的底部键点 k 1 、 k 2 、 k 3 k_1、k_2、k_3 k1、k2、k3和 k 4 k_4 k4。然后对由底部关键点组成的三维底面进行随机采样和插值。将 R ∈ R N × 2 R \in \mathbb{R}^{N \times 2} R∈RN×2表示为每个元素为 R i , j ∈ [ 0 , 1 ] R_{i, j}∈[0,1] Ri,j∈[0,1]的随机矩阵。 N N N是采样点的个数,采样的密集点可表示为:
P 3 d = R [ k 2 − k 1 k 4 − k 1 ] + k 1 P_{3 d}=R\left[\begin{array}{l} k_2-k_1 \\ k_4-k_1 \end{array}\right]+k_1 P3d=R[k2−k1k4−k1]+k1
其中 P 3 d ∈ R N × 3 P_{3d}∈\mathbb{R}^{N \times 3} P3d∈RN×3包含所有采样点。假设 K 3 × 3 K_{3×3} K3×3为摄像机参数矩阵。采样后将这些点投影回图像空间:
P 2 d T = K 3 × 3 P 3 d T P_{2 d}^T=K_{3 \times 3} P_{3 d}^T P2dT=K3×3P3dT
其中 P 2 d ∈ R N × 3 P_{2d}∈\mathbb{R}^{N \times 3} P2d∈RN×3。 P 2 d P_{2d} P2d的第 i i i行 为 [ u i ⋅ z i , v i ⋅ z i , z i ] [u_i·z_i, v_i·z_i, z_i] [ui⋅zi,vi⋅zi,zi],其中 u i u_i ui和 v i v_i vi为图像空间中的投影坐标, z i z_i zi为该点对应的深度。
如上图所示,利用上述公式,可以得到一个密集接地的深度表示,解决了主流方法中深度监督稀疏的问题。对于不适定的2D到3D映射问题,密集的接地深度提供了地平面约束,使其成为一个适定问题,而映射的唯一解是摄像机光线与地平面的相交。此外,由于本文的公式与物体的高度没有关系,因此自然避免了不相关的相关问题。更重要的是,引入的地平面先验和密集接地深度都来自于3D边界框注释,易于访问,不需要LiDAR和深度等其他数据源
基于MonoFlex
整体网络框架基于CenterNet和MonoFlex,如下图所示
Heatmap
: [ C × H S × W S ] [C\times\frac{H}{S}\times\frac{W}{S}] [C×SH×SW]表示每个物体的中心坐标,热图越接近1,表示某类物体在该位置存在的可能性越大Offsets
: [ 22 × H S × W S ] [22\times\frac{H}{S}\times\frac{W}{S}] [22×SH×SW]表示11个点(3个中心点+8个立方体顶点)在2D图像中的偏移,如下图所示:本文中定义Offsets
为:
δ p = p S − ⌊ c 2 d S ⌋ s.t. p ∈ { c 2 d , k 1 2 d , ⋯ , k 8 2 d , b 2 d , t 2 d } \begin{gathered} \delta_p=\frac{p}{S}-\left\lfloor\frac{c^{2 d}}{S}\right\rfloor \\ \text { s.t. } p \in\left\{c^{2 d}, k_1^{2 d}, \cdots, k_8^{2 d}, b^{2 d}, t^{2 d}\right\} \end{gathered} δp=Sp−⌊Sc2d⌋ s.t. p∈{c2d,k12d,⋯,k82d,b2d,t2d}
其中, S S S为Backbone的下采样率, ⌊ ⋅ ⌋ \left\lfloor · \right\rfloor ⌊⋅⌋为向下取整,假设 δ p ∗ \delta_p^* δp∗为GT真值,那么Offsets
的损失如下:
L offset = ∑ p ∈ { c 2 d , k 1 2 d , ⋯ , k 8 2 d , b 2 d , t 2 d } ∣ δ p − δ p ∗ ∣ L_{\text {offset }}=\sum_{p \in\left\{c^{2 d}, k_1^{2 d}, \cdots, k_8^{2 d}, b^{2 d}, t^{2 d}\right\}}\left|\delta_p-\delta_p^*\right| Loffset =p∈{c2d,k12d,⋯,k82d,b2d,t2d}∑∣∣δp−δp∗∣∣
Size
: [ 3 × H S × W S ] [3\times\frac{H}{S}\times\frac{W}{S}] [3×SH×SW]表示物体3D的长宽高预测值Orientation
: [ 8 × H S × W S ] [8\times\frac{H}{S}\times\frac{W}{S}] [8×SH×SW]表示物体的偏航角(yaw),分为8部分,在KITTI数据集中,俯仰角(pitch)和旋转角(roll)均设置为0Direct Depth
: [ 1 × H S × W S ] [1\times\frac{H}{S}\times\frac{W}{S}] [1×SH×SW]表示物体的直接深度Offsets
,计算Geometry Depth:
网络预测的grounded points,由均匀的网格组成,处在整数位置
而由标注信息转换的投影grounded points,则是随机分散的,即非整数位置
那么二者存在不对齐的现象
那么,本文的思路是:对投影的每个随机采样grounded points,使用其周围4个网格点的深度进行损失函数的计算,来优化非整数位置的密集深度
在得到Grounded Depth预测图后,如何训练这种预测图是一个重要的问题,因为预测的Grounded Depth与利用标签得到的投影Grounded Depth存在不对齐的问题,即投影密集接地点分布在预测图中任意位置,而预测图由均匀的网格组成。也就是说,预测图只能用于整数位置,而投影的密集接地点分布在非整数位置。为了解决这个问题,本文提出了一种深度对齐训练方法,如下图所示:
目前理解:Ground Branch就是用来预测接地点,每一个接地点的深度都是唯一的,并且理论上接地点的深度,等于该点向上延伸中所有点的深度值,例如:底部中心点的深度=物体中心点的深度=顶部中心点的深度
那么,就可以利用Ground Branch来获得接地点的深度值,来辅助最终深度的生成
那么,如何知道应该利用Ground Branch中的哪些接地点呢?就需要用到3D Branch中预测出的heatmap和offsets,具体而言,需要获得物体底部中心点的坐标,然后对应到Ground Branch中获得其深度值
物体底部中心点的坐标 可以由heatmap(即物体中心点),以及offsets中的对底部中心点的偏移量来计算得到
所以,先利用3D Branch获得物体底部中心点,再转移到Ground Branch中获得其深度值(即物体中心点的深度值),即两阶段
在CenterNet-Style的推理中,对象由特征图上的粗网格点表示,所有其他属性都由点上的特征一次性预测,称之为单阶段推理。但是粗网格点只能反映物体的粗位置,这就是为什么我们需要进一步回归GT位置和粗网格位置之间的差异
在密训练的接地深度图的帮助下,我们使用回归的细粒度位置代替粗糙的网格位置,可以实现比原来的CenterNet式深度推断更精确的深度估计,二者的区别如下图所示: