当我们在说到 3D 检测时,我们会谈论什么?
如果我们拥有一个通用的 2D 检测器,怎么将它 3D 化 ("3Dfy")?
这篇文章将沿着近年来 3D 检测的发展脉络,通过和 2D 检测对比,分析 3D 检测中的核心问题,并着重探讨对于纯视觉 3D 检测的再思考。
主要内容来自我们基于 MMDetection3D 做的最新工作:
[FCOS3D] https://arxiv.org/abs/2104.10956
[PGD] https://arxiv.org/abs/2107.14160
本文内容
过去的故事
“风水轮流转”
纯视觉3D检测中的核心问题
How to "3Dfy" a general 2D detector
Accurate depth estimation
彩蛋:绕坑而行
1. 过去的故事
随着深度学习的浪潮从 2D 图像席卷至更加广泛的数据模态和应用场景,3D 物体检测作为现实应用场景中极其重要的一个任务被越来越多的研究者所关注。
在这一波浪潮中,最早取得成功和巨大现实影响力的当属基于 LiDAR 点云的针对室外驾驶场景的检测方案们(最早如 MV3D, VoxelNet, Frustum PointNet 等)。
与此同时,也有一少批研究人员利用这些新的模型和方法去研究一个更为困难的任务——基于 2D 图像去做更高维的感知任务,例如基于单目、双目和多视角的视觉解决方案。这是符合人类直觉的,因为人就是这样感知环境的;同时这也是反常理的,因为二维信息终究是二维信息,当提取出来的深度信息不准确时,一切三维感知任务都会变得异常困难。
因此,如人们所料,纯视觉方案的检测性能远不如基于 LiDAR 的一众方法,于是后者也因此成为了前两年的研究热点。
图1:单目 3D 检测和 2D 检测具有相同的输入数据模态和不同的预测目标。2D 检测任务一般要求在给定一张输入图像后,检测出物体的类别和 2D 框;单目 3D 检测则设定在给定同样的一张二维图像下,检测出物体的类别和 3D 框,其中 3D 框通常拥有至少 7 个自由度:三维位置,三维框大小以及转向角。
2.“风水轮流转”
伴随着不同流派方法的出现(point-based/voxel-based & one-stage/two-stage)和越来越多各有特色的数据集的蓬勃发展(KITTI, nuScenes, Waymo),基于 LiDAR 的方法确实也在近年来取得了长足的进步。
同时,也随着这个设定下的核心问题被逐渐解决,这两年整体的研究重点也发生了一定偏移,比如开始关注新的训练方法或者模型泛化性等问题。
事实上,从 PointPillars 被提出,工业界也基本会基于之前一些相对结构简单的模型进行训练和部署,学术界用来刷榜和提升性能的很多方法并没有很大的实用意义,实践中通常被简单的增加数据和调参所代替。除此之外,根据我们之前做标注工具(FLAVA)时的一个简单分析,在这一场景中的“工业红线”——根据人类标注得到的可参考的准确率上限也即将被现有的方法所逼近(特别是大物体)。因此学术界在这一方面的研究空间也已经被明显压缩。
与之形成对比的是,虽然近年来对于纯视觉的 3D 检测研究逐步推进,却始终没有显著缩小和LiDAR方案的差距,因此越来越多的研究人员也将目光投向于此。
3. 纯视觉3D检测中的核心问题
首先说明,由于双目视觉的设定在实际应用中可能会带来标定上的诸多困难,在这里我们主要讨论研究较多的基于单目视觉的方案(多视角方案一般也需要基于单目来做起)。
在讨论单目 3D 检测之前,我们首先回顾下 2D 检测的研究路线。通常而言,当我们谈论 2D 物体检测时,我们会讲这个模型的设定有没有依赖于 anchor,是单阶段还是双阶段的,用了什么样的 backbone/head/loss,于是我们发现所有的发展都是基于这种系统化的共识。
然而,当我们回顾之前的单目 3D 检测方法时,更多的感受是有些“零敲碎打”,这来加一个预训练的深度估计模块解决一下深度问题,那来改一个卷积或者 loss 。想要找一个成系列化成体系的工作尝试用一用 2D 的经验也非常困难。这些也就形成了我们开始再思考这个问题的动机。
如果说前两年基于LiDAR的研究主要是针对如何从点中提特征并结合到检测的范式中去(例如 point-based 的 PointRCNN/STD , voxel-based 的 SECOND 和 PointPillars , hybrid 的 PV-RCNN 以及进一步细化到怎么进行 spatial quantization 的 Reconfigurable Voxels 和 Cylinder3D ),那么单目 3D 检测的设定应当主要是解决输出部分的问题,毕竟它和 2D 目标检测的输入都是相同的二维图像。
因此,首先在提取特征层面来讲,我们是可以借助多年以来的 2D 经验的,各种 pretrained model 都为我们提供了良好的方案来处理形变和尺度变化的问题。同时我们也可以依然采用 2D 检测的流程设计,例如 target assignment 方式以及 FPN 的设计。那么主要问题在于哪呢?这点在 FCOS3D 中首先进行了初步研究。
图2:FCOS3D总览图。通过保留成熟的2D特征提取骨架和检测范式设计,针对回归目标的不同进行了分解和特别的设计,并协同调整了训练时目标分配方式和center-ness的定义。
4. How to "3Dfy" a general
2D detector
我们基于 2D 中比较常见的 anchor-free 方法 FCOS 进行初步探索。首先我们需要将 3D 的检测目标和输入的图像模态统一到同一个 domain 中,因此可以采用基于中心的分解方式,把物体中心投影到图像上,计算当前点和中心的距离,另外再去回归深度、 3D 框的长宽高和角度。
此时我们发现,除了深度和角度,其他的目标回归会相对简单一些,例如当我们明确物体类别时,可以有一个大概的 3D 框大小。深度估计是一个非常常见的问题,也并没有太好的分解方法,于是我们进一步再将角度分解。
一方面我们采用纯视觉方案中回归 local yaw/allocentric yaw 的方式以保证它的合理性,另一方面在计算损失函数时我们进一步将其分解成物体正反朝向分类和角度残差的正弦值。通过这种建模,我们可以让任意的 2D 检测器用来回归这些 2D 和 3D 目标从而具备 3D 检测的能力。
这也和这一年涌现的很多 anchor-free 的纯视觉方法的方式非常类似。基于此,我们进一步调整了 target assignment 策略和 center-ness 的定义,从而使一个非常简单而高效的 2D 检测器具备了基本的 3D 检测能力,也在 NeurIPS 2020 的 NuScenes 3D Detection Challenge 上实现了超过之前所有纯视觉方法的性能,取得了纯视觉方案的第一名。值得一提的是,由于方案的简单易用好部署,我们的方法也吸引了不少来自工业界同行的兴趣。
图3:不准确的深度阻碍了其他所有预测目标对于总体 3D 检测性能的提升。
5. Accurate depth estimation is
"all you need"
但这显然还不够,我们只是完成了最基本的改装。同时,随着我们将方法迁移到 KITTI 上,我们发现方法的性能远不如想象的好。事实上这一问题也存在于诸多 KITTI 榜单的方法之中,很多方法在 KITTI 上适用但放到 nuScenes 上怎么都调不出来。因此,我们对当前限制这类方案更进一步的因素进行了系统性的分析。
在我们的文章 Probabilistic and Geometric Depth 之中,我们展示了依次用真值来替换我们的 3D 检测器不同输出结果时最终的检测性能(注意是替换不同 attribute 的 dense prediction map,这样可以将回归目标建模所带来的影响包含在内)。
我们发现,在深度估计的准确率只有当前水平时,其他的回归目标用真值替代并不能带来预期提升,反而有时候甚至会有副作用。而当深度估计准确时,检测性能可以实现质的提升。因此我们可以推断,纯视觉 3D 检测问题在当前发展阶段几乎可以被归结为一个 instance depth estimation 问题。
图4:利用几何关系对具有不确定性估计的物体构建深度传播图来增强物体深度估计的准确性。
于是我们一方面建模了深度估计的不确定性,另一方面通过透视几何关系建立这些具有不确定性的检测目标之间的深度传播图,通过全局的信息来增强深度估计的准确度。结果在 KITTI 和 nuScenes 上都一致地提升了模型的3D检测性能,同时我们也通过实验验证了深度估计的准确度在这一过程中实现了符合预期的提升。
值得一提的是, probabilistic depth 是将 FCOS3D 能够拉到与当前 KITTI 最好方法们竞争的首要功臣。这主要源于 KITTI 上的评估指标是基于 3D IoU 的 mAP,只有那些足够准确(3D IoU > 0.7)的目标才能够对于 mAP 有正向贡献,一个足够严格的筛选标准用来抑制那些不太准确的目标是提升 KITTI 性能的重要 “trick” (不是)。
而 nuScenes 的评估指标是基于不同严格度的标准(中心距离0.5m, 1m, 2m, 4m),因此对于单目 3D 检测这种设定也更加的合适和友好,毕竟近处物体位置估计差个1m 肯定和40m 外的情况不一样。所以如何设计一个更适合于单目 3D 检测的评价指标也是一个值得探索的方向。
讨论到这里,大家应当已经明确了纯视觉 3D 检测中的核心问题,其实就是深度估计的准确性,因此如何进一步利用 2D 图像中的几何信息挖掘深度线索也将是未来这一领域发展的重中之重,而这些也将可以直接结合到当前基于 2D 检测器所开发的一切通用 3D 检测方法,希望大家可以沿着这条路做出更加有意义的工作,真正让纯视觉 3D 感知变成可靠的现实。
6. 彩蛋:此处有坑,请大家绕路而行
最后来总结一下这一路做过来踩到的一些坑,供大家参考:
1.各数据集的坐标系一定要弄清,熟到倒背如流,在进行坐标系之间的变换时一定要保证朝向角始终是跟随着物体长边的,不然即便通过角度和 3D 大小的 hack 对上了框,角度也会变得很难学;
2. 在进行图像的 resize 和 flip 的时候,本质上相机内参也要相应变化,这样才具有实际的物理意义。正是由于此,目前纯视觉3D检测方案的数据增强还处在探索阶段,并不能像 2D 情况那样自如;
3. KITTI 中的 projection matrix 并不是完全的 intrinsic matrix ,是包含了相对于 referenced camera 的 baseline offset 的,因此不同于 nuScenes 的 camera intrinsics;
4. Anchor-free 的范式非常适用于单目 3D 检测,特别是不需要专门设计和统计 2D 和 3D anchor 的对应关系,也更方便适用于不同数据集不同检测类别的情况;
5. 在回归深度的时候,由于 nuScenes 的数据量远大于 KITTI ,复杂情况也多一些,因此如果设定权重过大会出现难以训练的情况,此时可以调小权重使得训练更平稳,之后考虑到深度估计的重要性,可以再调大权重 finetune 模型;
6. 对于 multi-view 的情况,目前简单的做法是每张图单独检测物体,最后在测试时一帧的检测结果统一做一个 NMS 。实验显示,这个 NMS 对于每张图的真值拼到一起最终的性能提升很大,而对于我们的检测结果提升可以忽略;
7. PGD 中有提到, nuScenes 上即便我们将所有有关于 localization 的预测替换为真值后,性能竟然依旧不如 LiDAR-based 的最好方法——分类的不准确性在 nuScenes 上体现得比较明显。目前分析有两个原因:一方面确实 nuScenes 上类别多,分类可能会是一个难点;另一方面可能标注时主要是基于点云这种数据模态,对于障碍物等类别的标注标准不统一,导致纯视觉方法学出来的分类标准存在偏差。也期待大家对于这一有趣的现象开展更多的研究;
8. 篇幅有限,虽然还有好多,但靠大家自己悟了,祝好运……
以上讨论的两个工作中,FCOS3D 已经在 MMDetection3D 中支持,未来将继续推进 PGD 的 code release 以及在 KITTI 上的 baseline ,欢迎大家关注。
文章来源:公众号【OpenMMLab】
2021-08-19 12:05