随着深度学习的浪潮从 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
单目3D检测要求使用长方体表征每个目标,长方体投影至图像其效果如图一所示,长方体的数学表征形式为: [ x , y , z , w , h , l , θ ] [x,y,z,w,h,l,\theta] [x,y,z,w,h,l,θ], 其中:
本部分采取自顶向下的介绍流程,首先介绍Monoflex宏观上的设计思路,再具体阐述各部分损失函数的设计,以及ground true的表示方法
作者将任务需求 [ x , y , z , W , H , L , θ ] [x,y,z,W,H,L,\theta] [x,y,z,W,H,L,θ],分解为四个子任务进行求解。每个部分完成以下内容:
作者设计如图三所示网络框架,来完成上述子任务。单目图像经过CNN backbone 提取特征后,再经过head端,输出各部分结果。对应上述4个子任务,图三网络框架其实也可拆分为4部分进行阐述。下面将依次阐述:
论文中,深度信息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
其中:
此时上述公式中的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)
目标中心在三维坐标系下的坐标值[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
其中:
[ 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]。
角度的回归较为简单,直接通过神经网络输出即可。
未完待续。。。