ICCV2021|单目3D目标检测真的需要伪激光雷达吗?

2021-09-16 17:31:30 浏览数 (1)

作者丨agent@知乎

来源丨https://zhuanlan.zhihu.com/p/406918022

编辑丨3D视觉工坊

Paper: arxiv.org/pdf/2108.0641

Code: github.com/TRI-ML/dd3d (尚未公开,2021.9.4)

一、简介

NuScenes数据集单目3D目标检测榜单

这篇论文是目前NuScenes(nuscenes.org/object-det)单目3D检测排名第一的工作(截止2021.9.3)。

当前,基于单目图像做3D目标检测的一个主要方向是将单目深度估计整合进来预测三维点云,从而将相机转变为伪激光雷达传感器。由于深度估计本身可以通过大规模的自监督学习在无需手动标记的情况下提升性能,因此这类工作的3D检测效果与嵌入的深度估计网络的性能提升高度相关。相比于端到端的方法,这类方法很容易受到过拟合的影响,网络结构也更为复杂,同时其与基于激光雷达的方法之间的差距仍然很大。这篇论文提出了一种end-to-end、single-stage的单目3D目标检测网络DD3D(Dense Depth-pre-trained 3D Detector),通过设计在深度估计和3D检测之间进行有效的信息传输,使得能够在大量的未标记预训练数据量上进行扩展学习。最终达到既可以像伪激光雷达方法一样从基于大量数据的深度估计预训练中受益,同时又拥有端到端方法的简单和强泛化性的目标。

二、网络结构

DD3D的网络结构与FCOS类似,采用FPN作为backbone,并输出多尺度特征图。如Figure 2所示,对于每一个特征图,都会输入到3个head network中,其中classification head用于预测目标类别,2D detection head用于预测目标2D检测结果,这两个head都与2d目标检测FCOS一样,此处略过。

由于上述式(1)获取深度时引入了相机内参,因此学习到的模型是与相机相关的,具体就是学习到的深度不仅仅与图像有关,还与所用到的相机的像素尺寸相关,论文中提到这样设置对于训练的稳定性有帮助。另外,在该设定下,训练时如果对图像执行缩放操作,3D框的GT不需要改变,只需要调整对应的相机内参即可(实际上就是调整每一个像素的尺寸)。

上面已经获取到了朝向信息和位置信息,想要预测3D框,还需要知道物体的长宽高信息,由于某一固定类别物体的物理尺寸变化不大,因此针对该类别目标预设一个尺寸值,然后在此基础上预测其尺寸偏差即可。一般预设的尺寸值可以通过对训练集中该类别物体的尺寸求平均获得。

三、Loss函数

四、Depth Pre-training

论文采用的是单阶段、端到端的3D 目标检测方案,为了用到伪雷达信息,网络首先执行了一个单目深度估计的预训练任务(对应于网络结构中的dense depth),该任务采用激光雷达点云进行监督。由于深度估计预训练的网络框架与3D目标检测网络框架,仅仅是最后的3x3卷积层有区别,因此深度估计模型学习到的信息可以辅助3D目标检测的训练。作者在论文中也给出了实验过程中的一些观察总结:(1) 对FPN的所有尺度特征都执行目标函数优化,会比仅仅使用高分辨率特征执行目标函数优化训练更加稳定,尤其是从头开始训练时(实际上,在单目深度估计领域,很多工作如monodepth等都是对多尺度执行目标函数优化的);(2) 在大batchsize和高分辨率输入的情况下,相比于SILog loss(scale-invariant mean square error in log space),L1 loss训练起来更加稳定。

备注:感谢微信公众号「3D视觉工坊」整理。

五、Pseudo-Lidar 3D detection(PL)

论文也给出了一套基于伪激光雷达做3D目标检测的方案作为对比,流程大概如下:首先通过PackNet进行单目深度估计,并将生成的深度图转换成点云,然后将每一个像素点的点云坐标和图像像素值拼接成一个6维的tensor,再基于现有的2D目标检测器获取ROI区域,将每一个ROI区域所对应的6通道tensor输入到3D检测网络中预测出3D bounding box。

六、实验部分

用到了四组数据集:(1) KITTI-3D和nuScenes数据集用于训练和评估3D检测模型;(2) KITTI-Depth数据集用于在PL model中训练单目深度估计模块,作者在生成数据集时过滤掉了与KITTI-3D中相似的样本;(3) DDAD15M用于对DD3D和PL model进行单目深度估计的预训练。

训练DD3D时,首先基于COCO预训练2D目标检测,再基于DDAD15M预训练单目深度估计,最后训练3D检测任务。训练PL时,首先基于DDAD15M的前置摄像机图像预训练单目深度估计模块PackNet,然后基于KITTI-Depth对PackNet进行finetune,最后基于伪激光雷达点云和图像训练3D目标检测。

在Table 1,Table 2,Table 4,Table 5中,分别在KITTI-3D和nuScenes数据集上与主流的方法进行了对比,效果表现SOTA,不多说。

Table 3中,在KITTI-3D数据集上对DD3D和PL模型做了一系列消融实验:对于DD3D,以DLA-34作为backbone,按照论文中提出的实验流程训练(coco pretrain->DDAD15M pretrain->3D detection),在KITTI-3D验证集上测试得到的Car-BEV-AP分别是33.5(Easy),26.0(Mod),22.6(Hard),当去掉基于DDAD15M进行单目深度估计预训练这一步后(即coco pretrain->3D detection),其性能降为26.8(Easy),20.2(Mod),16.7(Hard),当去掉coco pretrain后(即DDAD15M pretrain->3D detection),其性能为31.7(Easy), 24.0(Mod), 20.3(Hard),可见单目深度估计预训练对于性能的提升极为关键,甚至比基于COCO数据集进行2D检测预训练还要重要。在V2-99 backbone上也验证了去除DDAD15M单目深度估计预训练后,性能损失明显。

Table 6设计了一个更为严谨的实验对比了2D目标检测预训练和单目深度估计预训练任务对3D目标检测的效果提升,两个实验都基于COCO预训练模型,然后基于nuScenes数据集,分别执行2D目标检测和单目深度估计的预训练,最后做3D detection,在控制初始化参数一致(COCO 2D检测预训练参数)、预训练场景一致(都基于nuScenes数据集)的前提下,对比2D detection预训练任务和monocular depth estimation预训练任务对3D detection的提升程度,可以看出,单目深度估计预训练任务对3D目标检测的效果提升更为明显。另外,在Table 3中还做了一个消融实验说明PL方法所存在的问题:常规的PL类型方法(论文中指DDAD15M pretrain->KITTI-Depth finetune->pseudo-lidar based 3D detection)在KITTI 3D detection benchmark上霸榜,作者分别去掉KITTI-Depth finetune和DDAD15M pretrain后,发现3D检测性能都下降十分明显,说明在PL方法中引入in-domain数据集对单目深度估计模型进行finetune是非常关键的,由于KITTI-3D数据集提供可对应的Lidar信息用于训练单目深度估计网络,因此PL类方法可以在KITTI-3D上取得SOTA性能,但是在实际场景中,维护这样一个与实际场景相似的in-domain单目深度估计训练集是不现实的。而论文中所提出的DD3D模型则没有此限制。

与上述结论相对应地,尽管在Table 3中,PL方法取在KITTI验证集上取得了不错的性能,但是其在Table 1中的KITTI测试集上并没有取得预想中的效果,而对比Table 3中的其他几种方法(MonoDIS(single), M3D-RPN, Kinematic3D, DD3D),它们在验证集(Table 3)中的性能与在测试集(Table 1)中的性能gap都更小一些(个人觉得DD3D的性能gap也有些大了)。这进一步表明了PL方法对in-domain单目深度估计训练集的依赖性过强。

七、总结

最后奉上Figure 1简单总结一下,这篇论文本质上就是证明了PL方法的局限性——过于依赖in-domain单目深度估计,同时提出了一个single-stage、end-to-end的3D检测框架DD3D,并实验证明了引入单目深度估计预训练对于3D目标检测提升效果明显,论文中认为这个单目深度估计预训练并不需要保证深度估计训练集与3D目标检测训练集是同一domain的。刚看到论文题目的时候,以为这篇论文是提出了一个不需要单目深度估计的3D检测框架,看完之后才发现确实不需要单目深度估计了,但是需要引入单目深度估计的预训练步骤,emmm。。。既然在KITTI和nuScenes上都能有如此好的效果,后面不妨试一下吧。最后不得不说,这篇论文的related work和实验部分都写的挺不错的,值得学习一下。

本文仅做学术分享,如有侵权,请联系删文。

0 人点赞