虽然基于点云的 3D 目标检测方法性能不断提升,但是激光雷达相对高昂的造价和对各种复杂天气情况的敏感性推动着研究人员开始更多地探索基于视觉的 3D 目标检测,其在近几年成为越来越热门的研究方向。
本文主要介绍单目 3D 目标检测的一些最新研究进展,同时带来一些笔者的思考。
本文内容
挑战
从几何关系估计深度
借助 LiDAR
2D 特征 3D 化
更多的思路
其他的难点
1. 挑战
由于单目图像缺少深度信息,想从 2D 图片上直接获取对应的 3D 框的准确位置是一件非常困难的事,在我们之前的文章 "3Dfy" A General 2D Detector: 纯视觉 3D 检测再思考 中提到过,我们通过实验证明了 Accurate depth estimation is "all you need"。
一个最为直观的想法就是:既然 2D 检测可以直接回归物体框的长和宽,我们就让网络自己去学习直接回归出物体的深度。但是由于单张图片深度缺失的特点,效果自然是不尽如人意,如何解决深度估计不准确的问题也成了学术界这两年的主流研究方向。
2. 从几何关系估计深度
图1:几何投影模型效果图
从上图我们可以看到物体的深度 Z、相机的焦距 f、物体的实际高度 H 和物体在图像平面上投影的 h 之间由几何相似性可以得出一个几何投影模型:
几何投影模型是一种最常见的 depth prior,这样对物体的深度的预测可以通过几何关系转换为对物体实际高度和投影到图像上的高度的预测。
这种从几何关系入手估计深度的方法看起来非常简单易懂,实际用起来也能达到不错的效果,比如在 CVPR 2021 的论文 MonoFlex 中,通过在 2D 图像上设定 10 个关键点: 3D 框的 8 个角点、顶部中心和底部中心,将 10 个关键点分为 3 组,即中心垂直线和两个对角垂直边界线 (h1-h3 和 h2-h4) 的平均,每组可以独立产生 2D 的高度 h,再结合网络预测得到的物体实际高度 H ,根据上述的关系式独立估计中心深度。
最终结合 3 组估计的深度获得更好的深度预测结果。
图2:MonoFlex 通过引入 10 个关键点分别计算 3 组 2D 高度,从而分别得到 3 组深度
说到这里,其实很多人会很好奇既然高度之间满足这样的几何关系,那么同理,是不是物体的宽度和长度之间应该也会满足这样的关系?如果我们把宽度和长度也拿来计算深度,再一起综合起来是不是能获得更好的效果呢?
其实并非如此,宽度和长度这两种物体的属性在 3D 场景下和高度最大的不同之处就在于这两者会受到物体的转向角 (yaw) 的影响,如果物体的转向角 (yaw) 估计不准,那么网络预测得到的宽度和长度也会有较大的误差,从而进一步影响物体深度的估计,所以相对来说,物体的高度不受转向角 (yaw) 的影响,误差更小,用来进行深度估计也会更加准确。
既然物体实际高度 H 的估计存在误差,那我们就要想办法解决这个实际高度估计不准的问题,在这之前我们得先弄清楚实际高度的误差到底对计算物体的深度有多大影响,在 ICCV 2021 的论文 GUPNet 中进行了尝试探索,从下图中可以发现,仅仅是 0.1m 的实际高度误差会给计算得到的物体深度带来相当大的误差,在 60m-80m 这样较远的区间甚至会产生高达 4m 的深度误差,严重影响了检测结果。
图3:物体实际高度在 +/- 0.1m 误差时候造成的深度估计偏差图
GUPNet 针对这个问题做了相应的探索,由于高度的误差,使得深度的估计不确定性高,即其输出可靠性差,输出可靠性差会使得其得分/不确定性(uncertainty) 难以预测。
作者采用了基于概率模型的方法对不确定性的估计引入了一定的投影先验,假设投影过程中物体实际的高度符合拉普拉斯分布,带入到投影模型中,得到的深度也是符合拉普拉斯分布的,同时设计让神经网络额外预测一个深度修正值 depth bias, 作者假设深度修正值也是符合拉普拉斯分布,两者相加获取最终的深度值。
通过这种处理方法,使得深度的不确定性包含了经过投影模型的物体实际高度输入的不确定性以及网络 bias 所带来的不确定性,从而提高了深度估计的准确性。
此外,作者将最终深度的方差用于辅助修正对应 3D 检测框的分数 Score, 达到 IoU 高的物体最终得分更高的效果,而前文提到过 KITTI 上的评估指标是基于 3D IoU 的 mAP,只有那些足够准确(3D IoU > 0.7)的目标才能够对于 mAP 有正向贡献,所以要达到 IoU 高的物体得分也高才能获得好的 mAP 值。
GUPNet 主要探讨的是由于物体实际高度预测的误差导致计算得到深度的误差,想办法来解决这个问题。
我们再回看几何投影模型,会发现物体投影高度 h 的误差也会对深度计算产生影响,得益于 2D 检测方法的发展,2D 框的检测已经非常成熟了,所以从主观感受来看 h 相对来说更加准确,但是 h 真的没有问题吗?
其实也未必,与 GUPNet 相似但又有所不同,ICCV 2021 的另一篇论文 MonoRCNN 则同时考虑了物体投影高度 h 和物体实际高度 H 的不确定性,将这两个变量随物体的距离的关系进行了可视化:
不同距离的 H 和 h_rec 的不确定性 (方差),这里的 h_rec 是指物体投影高度 h 的倒数
根据作者的分析,h 和 H 都会在近处和远处获得较高的不确定性,其实这也是很好理解的,近处的物体经常会出现截断 (truncated) 现象,物体只有部分出现在图片中,而远处的物体由于距离原因,导致其在图片上的形态非常粗糙模糊,同时其包含的像素数目也非常小,这两种情况都会对物体的投影高度 h 和实际高度 H 的估计产生影响。
从作者的实验中可以看到物体的截断和粗糙视图会对物体实际高度 H 带来相对一致的不确定性,但是对于物体的投影高度 h 来说,随着距离的不断增加,其不确定性会有一个非常显著的提升,这一点和我们的实验结果其实是一致的,距离越远(投影到图片上尺寸越小)的物体,其投影高度 h 的估计就会越发不准确,同时作者的实验也表明物体的投影高度 h 相对于实际高度 H 来说可能会对不同距离的物体有更好的区分能力,所以不同于 GUPNet 固定预测的投影高度 h,将不确定性通过预测的实际高度 H 传到计算的深度,MonoRCNN 则是固定预测的实际高度 H, 将不确定性通过预测的投影高度 h 传到计算的深度,同时也和 GUPNet 一样用深度的方差值来辅助修改 3D 框的最终得分。
上面的几篇论文都是最近利用几何投影模型计算深度的尝试,想获得准确的深度,对于几何投影模型来说,如何获取两个准确的高度是最关键的,目前的做法是将不确定性 (uncertainty) 引入到高度估计中,但是有没有其他的思路来解决高度估计的准确性问题?针对物体的投影高度,距离远的物体由于投影到图片尺寸很小,导致高度难以确定,2D 检测中如何解决小物体这样的问题?针对物体的实际高度,同等的误差会随着距离的拉大导致深度估计误差的增大,有没有什么方法可利用到近处物体相对准确的高度估计,用来辅助到远处物体的高度估计?物体高度的预测还有很多空间值得等着大家去探索。
3. 借助 LiDAR
这里的借助 LiDAR 其实目前有两种方式,一种是借助 LiDAR 的形式, 借助 LiDAR 的形式就是我们老生常谈的 Pseudo LiDAR 方法,另一种是借助 LiDAR 的数据。
Pseudo LiDAR (伪激光雷达)
图5:伪激光雷达方法流程图
基于 Pseudo LiDAR 的方法:利用现有比较成熟的单目深度估计方法,对图片生成对应的 dense depth map,通过估计得到密集深度转换到 3D 空间得到伪激光雷达 (Pseudo LiDAR),然后再用基于点云的 3D 检测方法检测目标。这种方法的好处就是通过点云检测的方法,在 BEV 视角检测可以避免在前视投影的 RGB 图像中存在的形变和尺度变化的问题,同时物体的转向角的回归更加直观明确。当然,这种方法也是也有是有一定的缺陷:
(1)基于 Pseudo LiDAR 的方法目前都是 two-stage 的方法,先预测密集深度,再反投影到 3D 空间生成伪点云,在实际的使用过程中,会消耗非常大的内存,同时方法的速度也比较慢,无法做到端到端训练。
(2)目前来说基于 Pseudo LiDAR 的方法和真实 LiDAR 的方法性能差距主要还是来源于在生成 Pseudo LiDAR 过程中产生的深度误差,此外,在用单目深度估计方法生成 dense depth map 的过程中本身就有一个在不同 domain 的泛化性问题,训练好的单目深度估计模型在实际场景中不一定能有好的深度估计效果,导致生成的 Pseudo LiDAR 本身就存在比较大的问题,目前基于 Pseudo LiDAR 的方法基本都只在 KITTI 上进行实验,很大一部分原因就是 KITTI 提供了 depth 数据集,可以用来 finetune 单目深度估计模型。
同时需要注意的是 Pseudo LiDAR 仅仅在 KITTI validation set 上能大幅超过其他类型的单目 3D 检测方法,但是在 KITTI test dataset 上并没有优势。针对基于 Pseudo LiDAR 的方法在验证集和测试集的巨大 performance 差异的问题,ICCV 2021 的论文 Are we Missing Confidence in Pseudo-LiDAR Methods for Monocular 3D Object Detection? 做了更深入的研究。作者发现,KITTI depth training set 和 KITTI 3D object detection validation set 之间有很大程度的 overlap,depth training set 中包含了 detection validation set 中 1/3 的图片数据,从而导致 validation set 和 test set 之间明显的性能差距。此外作者也分析了即使重新划分 depth set,去除 overlap 的 depth data, 这种 validation set 和 test set 之间的 performance gap 依然存在,并且在 validation set 上的 performance 相比于其他类型的方法也并没有之前那么明显的优势。
既然基于 Pseudo LiDAR 的方法受益于大量数据的训练得到的单目深度估计方法,那么自然会尝试能不能将这种思想融入到端到端模型中去。
借助 LiDAR 数据预训练
ICCV 2021 的论文方法 DD3D 就对这个方向进行了尝试,通过设计在深度估计和 3D 检测之间进行有效的信息传输,使得能够在大量的未标记预训练数据上进行扩展学习。最终达到既可以像伪激光雷达方法一样从基于大量数据的深度估计预训练中受益,同时又拥有端到端方法的简单和强泛化性能力的目标。
图6:DD3D 网络结构图,主要关注添加的 Dense depth branch
论文将数据集的点云投影到图片上,构成了一个 dense depth map, 同时给常见的端到端模型添加了一个 dense depth 预测分支,从而达到对整个网络进行单目深度估计预训练的效果,让网络本身就具有一定的单目深度感知能力,接着再进行后续的 3D 目标检测训练。
更为关键的是,论文通过实验证明 DD3D 这种端到端的模型相比于基于 Pseudo LiDAR 的方法有更好的泛化能力,这一点在实际场景的使用中还是非常关键的。具体的性能对比参见原论文,这里由于篇幅原因就不做过多赘述。
4. 2D 特征 3D 化
除了通过显式的深度估计和基于图片构建 Pseudo LiDAR 之外, 还有一些方法则是尝试将 2D 图片特征映射到 3D 空间,不直接生成 Pseudo LiDAR,基于 3D 空间中的特征进行检测。
CVPR 2021 的论文 CaDDN 考虑到连续值的深度预测很困难,尝试将深度离散化,转换为一个深度离散值的分类问题。作者将深度网格化,对输入图片的每一个像素预测深度网格分布,获取具有深度信息的特征桶,接着将特征桶转换为体素网格,再转换到鸟瞰图 (BEV) 下进行目标检测。
与之前的工作不同,CaDDN 并没有显式地利用中间输出的 depth 得到点云再做检测,而是用 depth 来增强 BEV feature,然后再直接检测,这样在提升了模型的效率和易用性的同时也方便做到了端到端训练。整个方法流程如下图所示:
图7:CaDDN 流程图:图像→预测深度网格分布→构建体素网格→鸟瞰图(BEV)→3D检测
而在论文 ImVoxelNet 中,作者通过把体素投影到图像平面上进而采样图像特征作为该体素的特征,然后把体素块压缩成 BEV 的形式,这样就将任务转换为基于 BEV 平面做 2D 检测。
最近的一篇论文 DETR3D 则是将 DETR 用在纯视觉的 3D 目标检测中的尝试,如果说 DETR 是利用 object query 在 2D 图像上查询目标物体,那么 DETR3D 就是将查询范围从 2D 图像转为 3D 空间,每个 object query 对应的特征获取方法类似于 ImVoxelNet 中的体素特征获取方法,同样也是利用投影矩阵,投影到图像平面上进而采样获取 2D 图像特征作为其对应的特征。
其实这类方法非常适合于基于多视角 2D 图像的 3D 目标检测:对于单张图像来说, 在同一条相机射线上的所有 3D 空间中的点对应的 2D 图像特征其实是一样的,比如对于 ImVoxelNet 这种方法来说,大量的体素的特征其实是相同的,而通过基于多视角的图像,3D 空间中某个点的特征会来自于不同的图片,通过综合来自不同图像的特征,一是能扩大图像对应的可视空间,二是能提升 3D 空间中特征的表达能力,使得特征更有判别力,从而大幅提高了检测的准确率。
5. 更多的思路
1.单目 3D 检测目前来说还是单个物体独立检测的任务,也就是说图片上每个物体之间的深度估计、属性预测等等都是相对独立的,但是上面也提到,物体之间的形状特征和相对位置关系应该是对物体的深度、高度等属性的估计有所帮助的,比如说上篇文章中的 PGD 模型通过透视几何关系建立这些具有不确定性的检测目标之间的深度传播图,通过全局的信息来增强深度估计的准确度。在这个方向上更多的方法需要大家一起来探索。
2. 物体的外观 (类别)和物体的位置信息是能够互相辅助的,从人眼角度来说,如果我们知道了物体的类别和尺寸,那么我们就能对物体的距离有一个比较好的估计,反之也是如此。ICCV 2021 的论文方法 DFR-Net 通过这种思想将单目 3D 物体检测分为两个子任务分别处理,通过子任务间的信息相互辅助预测。
3. 增加 2D 和 3D 的一致性约束,一般来说增加约束的方法是设定更多的关键点进行约束,比如在 MonoFlex 中就利用了 10 个关键点的信息,而在 ICCV 2021 的论文 AutoShape 中则通过引入更多的关键点建模物体的形状信息,利用 2D 关键点和 3D 关键点的一致性约束来获取物体的位置信息。
6. 其他的难点
1.对于工业界场景来说,近处的物体的识别和定位相对来说更加重要,尤其是截断物体的检测,而截断的场景是非常常见的,例如有一辆车突然闯进视线里,这种情况如果没有被检测到是非常危险的,MonoFlex 针对这种情况设计了专门的分支来处理,提高了截断物体的准确度,但总体来说,这方面的研究目前在学术界还不是很多。
2. 目前大部分的做单目 3D 检测的论文都是在 KITTI 数据集上做的,很多 KITTI 数据集上比较 work 的方法迁移到 NuScenes 上效果可能就没那么好,甚至会掉点,数据集之间的 gap 和不同的评测指标也是一个值得探究的问题。
在单目 3D 检测这个方向,MMDetection3D 已经完整支持了 FCOS3D、SMOKE 两种算法,PGD 完整版即将 release,MonoFlex 也在持续推进中,未来我们还会支持该方向更多的 SOTA 算法,同时对该方向做更多的探索,欢迎各位使用和开发新的算法~~
(预告一下:关于 PGD 将会有一篇非常详细的作者大佬的本人解读,干货满满,不要错过~~~)
文章来源:公众号【OpenMMLab】
2021-11-17 19:27