1. 引言
随着深度学习的浪潮从 2D 图像席卷至更加广泛的数据模态和应用场景,3D 物体检测作为现实应用场景中极其重要的一个任务被越来越多的研究者所关注。在这一波浪潮中,最早取得成功和巨大现实影响力的当属基于 LiDAR 点云的针对室外驾驶场景的检测方案们(最早如 MV3D, VoxelNet, Frustum PointNet 等)。而单目3D检测由于其低成本的感知方案,近年来受到越来越多的学者关注,但纯视觉方案的检测性能远不如基于 LiDAR 的一众方法,这是符合直觉的,因为二维图像终究是二维信息,当其中提取到的深度信息不准时,感知任务也变得举步维艰。在进行单目3D检测时,深度信息的估计是重中之重,本文分享2021年CVPR上的一篇单目3D检测论文,其用一种较优雅的方式解决了单目3D检测的问题,也在kitti上达到了SOTA效果。
- 标题:"Objects are Different: Flexible Monocular 3D Object Detection"
- 作者: Yunpeng Zhang, Jiwen Lu * , Jie Zhou
- 年份:2021
- 期刊:CVPR
2.任务需求
单目3D检测要求使用长方体表征每个目标,长方体投影至图像其效果如图一所示,长方体的数学表征形式为: [ x , y , z , w , h , l , θ ] [x,y,z,w,h,l,\theta] [x,y,z,w,h,l,θ], 其中:
- x , y , z x,y,z x,y,z 为长方体框的中心在相机坐标系下的坐标
- l , w , h l,w,h l,w,h 为长方体的长宽高信息
- θ \theta θ 为长方体的航向角
- 除以上内容,另外还需要一个代表目标类别的cls
PS:kitti数据集中相机坐标系如图所示
3. 论文分析
本部分采取自顶向下的介绍流程,首先介绍Monoflex宏观上的设计思路,再具体阐述各部分损失函数的设计,以及ground true的表示方法
3.1 总体思路
作者将任务需求 [ x , y , z , W , H , L , θ ] [x,y,z,W,H,L,\theta] [x,y,z,W,H,L,θ],分解为四个子任务进行求解。每个部分完成以下内容:
- 对每一类检测目标,均给出先验信息 [ h ‾ c , w ‾ c , l ‾ ] [\overline h{_c},\overline w{_c},\overline l] [hc,wc,l],通过网络输出偏差 ( δ h , δ w , δ l ) (δ_ h , δ_ w , δ_ l ) (δh,δw,δl),最终得到 [ W , H , L ] [W,H,L] [W,H,L]
- 估计深度信息z.
- 利用深度信息z与长方体的中心在二维图像上的像素坐标结合相机投影公式得出长方体的中心在相机坐标系下的坐标值 [ x , y ] [x,y] [x,y]
- 利用网络直接回归得到角度信息
图三.Monoflex网络框架图
作者设计如图三所示网络框架,来完成上述子任务。单目图像经过CNN backbone 提取特征后,再经过head端,输出各部分结果。对应上述4个子任务,图三网络框架其实也可拆分为4部分进行阐述。下面将依次阐述:
3.1.1 [ W , H , L ] [W,H,L] [W,H,L] 的获得
- 给出先验信息 [ h ‾ c , w ‾ c , l ‾ ] [\overline h{_c},\overline w{_c},\overline l] [hc,wc,l],代表每一类目标的初始长宽高,
- 单目图像经过网络输出偏差 : D i m e n s i o n : = [ δ h , δ w , δ l ] Dimension:=[δ_ h , δ_ w , δ_ l ] Dimension:=[δh,δw,δl]
- 通过H= h ‾ c e δ h \overline h{_c}e^{δ_ h} hceδh, W= h ‾ c e δ h \overline h{_c}e^{δ_ h} hceδh, L= h ‾ c e δ h \overline h{_c}e^{δ_ h} hceδh来获得目标最终的尺寸。
3.1.2 深度信息z 的获得
论文中,深度信息z的最终值由两部分组成,一部分是由网络直接预测得到的 z d i r e c t z_{direct} zdirect,一部分是由相机小孔成像相似三角形得到的 z i n d i r e c t z_{indirect} zindirect,两者通过各自的概率信息,融合得到最终的z值。
z d i r e c t z_{direct} zdirect的获得:单目图像经过网络,输出depth和depth的置信度。
z i n d i r e c t z_{indirect} zindirect的获得:
间接法主要利用小孔成像相似三角形公式:
z l = f ∗ H h z_l = \frac {f*H}h zl=hf∗H
其中:
- f为相机的焦距
- H为目标在三维坐标系下的高度值,由3.1.1获得
- h为目标在图像坐标系下的像素高度
此时上述公式中的h值未知,作者通过神经网络输出10个特征点(keypoints)在图像上的坐标,以及3组置信度。10个特征点可获得5个h值,这5个h值又可分成3组(对角线两组,中心一组),其中每组对角线上的两个h值代入上述公式后,计算结果取平均,可得一个
z
i
n
d
i
r
e
c
t
z_{indirect}
zindirect,三组h值可得3个
z
i
n
d
i
r
e
c
t
z_{indirect}
zindirect,
多个深度信息z的融合:
此时我们有多个深度信息 z i z_i zi,以及他们的置信度 σ i \sigma_i σi 我们通过以下公式计算得到最后的深度信息值
z s o f t = ( ∑ i = 1 M z i σ i ) / ( ∑ i = 1 M 1 σ i ) z_{soft} = (\sum_{i=1}^M \frac{ z_i} {\sigma_i } ) /(\sum_{i=1}^M \frac{ 1} {\sigma_i }) zsoft=(i=1∑Mσizi)/(i=1∑Mσi1)
3.1.3 [ x , y ] [x,y] [x,y]的获得
目标中心在三维坐标系下的坐标值[x,y]主要由以下相机投影关系公式获得:
x = ( u c − c u ) z f x=\frac{(u_c-c_u)z}{f} x=f(uc−cu)z
y = ( v c − c v ) z f y=\frac{(v_c-c_v)z}{f} y=f(vc−cv)z
其中:
- [ u c , v c ] [u_c,v_c] [uc,vc]为目标中心在图像坐标系下的坐标值
- [ c u , c v ] [c_u,c_v] [cu,cv]为相机光轴和成像平面的交点在图像坐标系下的坐标值
- f为相机焦距
- z为3.1.2中获得的深度信息
[ c u , c v ] , f [c_u,c_v],f [cu,cv],f为相机内参,通过标定可以获得,此时如何获得 [ u c , v c ] [u_c,v_c] [uc,vc]即目标中心在图像坐标系下的坐标值,成了一个问题。
目标中心在图像坐标系下的坐标值的获得主要参考了2019CVPR的论文“objects as points”。objects as points 的核心思想是将目标作为一个点——即目标BBox的中心点。检测器采用关键点估计来找到中心点,并回归到其他目标属性,例如尺寸,3D位置,方向,甚至姿态。
Monoflex中采用了将目标作为一个点的核心思想,将3D目标中心 [ u c , v c ] [u_c,v_c] [uc,vc]作为表示目标的关键点,简单而言,神经网络按照类别输出热力图,热力图上的峰值的坐标即表示物体的中心在图像上的坐标 [ u c , v c ] [u_c,v_c] [uc,vc]。
3.1.4 角度的回归
角度的回归较为简单,直接通过神经网络输出即可。
3.2 各部分损失函数的设计以及ground true的表示方法
未完待续。。。