作者 | ZZZzz 编辑 | 汽车人
原文链接:https://zhuanlan.zhihu.com/p/635009397
点击下方卡片,关注“自动驾驶之心”公众号
ADAS巨卷干货,即可获取
点击进入→自动驾驶之心【占用网络】技术交流群
Learning Occupancy for Monocular 3D Object Detection github: https://github/.com/SPengLiang/OccupancyM3D
发表单位: 浙江大学、飞步科技
Abstract
我们提出了 OccupancyM3D,一种用于单目3D目标检测的占用学习方法。它可以直接学习视锥体 frustum 和三维空间的占用率,从而获得更具辨识度和信息量的三维特征和表征。
具体来说,通过使用同步的 synchronized 原始稀疏 LiDAR 点云,我们定义了 space status 并生成 voxel-based occupancy labels。 我们将占用预测定为一个简单的分类问题,并设计相关的占用损失。 由此得出的占用估计值被用来加强原始的 frustum/3D 特征。并在 KITTI 和 Waymo 数据集上进行了实验。
Introduction 从单一的 RGB 中恢复准确的 3D,以前的研究采用了几何约束 (geometry constraints) 和密集的深度估计(depth estimates)来促进三维推理,但他们往往忽略了三维空间中的 discriminative 和 informative 3D 特征的重要性,这对 3D 检测至关重要。他们主要关注改善 2D 空间的特征,而很少关注更好的特征编码和在 frustum 和 3D 空间的表示。
具体来说,我们采用同步的原始稀疏LiDAR点云,在训练阶段生成基于体素的 frustum 和 3D 空间的标签。关于LiDAR点的稀疏性,我们定义了三种占用状态:free, occupied, 和 unknown。 在此基础上,我们对三维空间进行体素化,并在每个激光雷达点上使用 ray tracing 来获得占用标签。有了占用标签,我们可以对中间的三维特征实施明确的三维监督。它允许网络学习当前三维空间的体素化的占用,从而增强原始三维特征。这个过程也是在体素空间中进行的,由于摄像机图像的透视性质,在提取近距离物体的三维特征时,能够采用更精细的方式。
我们把提出的占用学习方法称为 OccupancyM3D。

贡献可以总结为以下几点:
我们强调 feature encoding 的重要性,以及在 frustum 和三维空间中对单目 3D 检测的表示,我们建议在这两个空间中学习占用率。
我们提出了一种方法,使用同步的原始稀疏 LiDAR 点生成占用标签,并引入相应的占用损失,使网络能够在 frustum 和三维空间学习体素化的占用情况。这种占用的学习过程有利于在网络中提取具有辨别力和信息的三维特征。
实验证明了所提出的方法的优越性。在KITTI和Waymo公开数据集上进行评估,我们的方法取得了SOTA的结果,并以很大的优势超过了其他方法。
2. Related Work
LiDAR Based 3D Object Detection、Monocular 3D Object Detection、3D Scene Representations
最近的研究迅速推进了 implicit representations。隐式表征在建立三维场景模型方面具有任意分辨率的优势。这种隐式表征有利于细粒度的任务,如三维重建和语义分割。与之不同的是,单目3D检测是一个实例级(instance level)的任务 ,我们探索使用固定大小的体素进行显式占用学习。
与我们最相关的工作是 CaDDN。我们沿用了它的架构设计,除了提出的 occupancy 模块,我们用轻量级的 DLA34 替换了它的2D backbone。我们的工作侧重于单目,将该方法扩展到多相机是未来研究的一个潜力方向。
3. OccupancyM3D
3.1. Preliminary and Overview
Task Definition.
在推理时,输入单张 RGB 图,输出 3D 框。
在训练阶段,我们的方法需要RGB图像、在LiDAR点上注释的3D框和同步的LiDAR 数据。值得注意的是,该系统已被校准,相机和LiDAR 之间的相机内外参是可用的。
Network Overview.

与以前的工作相比,我们的方法采用了两个新提出的组件,用于学习 frustum 和 3D 空间中的占用。所有的网络块都是由 vanilla 3D convolutions 组成。
首先,一张RGB图像被送入 DLA34 骨干网络以提取特征。
然后,我们使用这些特征来产生 categorical depth distributions ,将二维特征提升到 frustum 空间。
之后,采用深度预测和骨干网络特征来生成 frustum features。它们被用于学习 frustum 空间中的占用;
然后使用grid-sampling 将其转换为 voxelized 3D features。这种 voxelized 3D features 被用来研究 3D 空间中的占用。frustum 和 3D 空间中的占用学习都能产生合理的占用估计值。
将最终 enhanced voxelized 3D features 传递给检测模块,获得最终的3D检测结果。
在训练阶段,使用占用损失,分别由 frustum 和3D空间中生成的占用标签监督占用估计。
3.2. Occupancy Learning
如果一个体素或常规三维体素包含一个物体的一部分,我们认为它是被占用的。我们将由此产生的 voxel states 分别表示为 frustum occupancy 和 3D occupancy。
3.2.1 Occupancy in Frustum Space and 3D Space
在提取 backbone features 后,我们采用 depth head 来获得dense category depth。为了节省GPU的内存,我们使用卷积层来减少特征通道的数量,并在深度估计的帮助下将得到的特征 提升为 frustum feature :

然后通过下述公式提取 frustum feature

f1表示两个三维卷积,然后是ReLU激活函数。

然后 ,我们使用一个3D卷积层 f2 和 sigmoid 函数来获得 frustum occupancy

frustum occupancy 表示 frustum 空间中的特征密度,因此本来就可以用原始 frustum features 进行加权,以获得 enhanced frustum features

表示 Hadamard 乘积(元素相乘)
Hadamard乘积是指两个相同大小的矩阵中对应元素的乘积,得到的结果矩阵的每个元素都是由两个原始矩阵中对应元素的乘积所得到的。这个操作通常用符号 ⊙ 表示。如果 A 和 B 是两个 n×n 的矩阵,那么它们的 Hadamard 乘积 C 就是一个 n×n 的矩阵,其中第 i 行第 j 列的元素为 Aij * Bij。

frustum feature通过 grid-sampling 被转换为 regular voxelized feature

然后在常规3D空间中重复占用学习过程。

为了更好地在常规三维空间中编码三维特征,我们在 f3 中用了 3D hourglass-like 设计,f4 是一个3D卷积。

最后,我们有更多信息的3D体素特征用于输入给检测模块。

在 frustum 和 3D 空间学习占用的原因是什么?
因为它们具有不同的性质。
frustum 空间的分辨率取决于相机内参和骨干网络的下采样系数,而体素化的三维空间的分辨率则由预先定义的体素大小和检测范围决定。
Frustum voxels 是不规则的,其大小根据与摄像机的距离而变化, 这导致较近的物体有细粒度的体素,较远的物体有粗粒度的体素。相比之下,常规的三维体素在整个三维空间中具有相同的尺寸。另一方面, frustum space 更适合相机图像,但 frustum space 中的物体不能精确地代表真实的三维几何。因此, frustum space 中的特征提取和占用对物体/场景来说是扭曲的。因此,在 frustum space和三维空间的占用学习是相互补充的,并能产生更多的信息表征和特征。
3.2.2 Occupancy Labels
给定一组稀疏的LiDAR点 ,其中N是点的数量,3是坐标 (X, Y, Z) 的维度。

生成 occupancy labels 的过程如图3所示,对每个 LiDAR 点进行操作。我们首先定义三个空间状态,并用数字表示:free:0, occupied:1, unknown:-1
然后,我们将分别描述 frustum 和三维空间中的占用标签生成过程。
Occupancy label in frustum space:

我们首先将 LiDAR点投影到图像平面上,形成一个 category depth index map。每个有效的投影点都有一个category depth index,而无效的点(没有LiDAR点的投影)则被赋予负索引,即 -1。然后对该 index map 进行下采样以适应图像的分辨率,得到Ind。受益于相机的投影性质,我们很容易区分空间状态,如下所示:

Occupancy label in 3D space:

我们将3D空间中的占用标签总结如下:

x, y, z ∈ X, Y, Z。在这个方程中,

3.2.3 Occupancy Losses

我们将占用预测视为一个简单的分类问题,并使用 focal loss 作为分类损失。只有有效的体素,即 free 和 occupied voxels,对损失有贡献,而未知体素被忽略。

3.2.4 Occupancy and Depth
Occupancy 与二维深度图有一些相似之处,特别是 frustum occupancy。它们都可以代表空间中的物体几何表面。然而,深度图是二维的,而 occupancy 是三维的。occupancy 是超越深度的,并且可以以深度为基础。它能够表达物体的密集特征,而不仅仅是表达物体的表面,从而有利于下游的任务。对于因遮挡而产生的未知空间,occupancy 可以推断出合理的结果。此外,与二维空间相比,在frustum 和 3D 空间中学习 occupancy 使网络能够在更高的维度下研究更多的信息特征。
occupancy 和深度并不是相互排斥的表征。事实上, 它们在三维物体检测任务中相互补充。如果没有深度,网络必须处理一个很大的搜索空间,使得学习 occupancy features 具有挑战性。纳入深度估计为网络提供了一个良好的起点,有利于学习 occupancy features 。因此,建议同时利用深度和 occupancy 的信息来实现单目3D检测的更好的表示和特征。
4. Experiments
在 4 个 NVIDIA 3080Ti (12G)GPU上训练的,total batch size 大小为8, 共80个epochs。
KITTI

红色代表最高的结果,蓝色代表第二高的结果。该方法优于其他方法,包括基于单目和基于视频的方法。

WaymoOD

该方法在大多数指标上明显优于其他方法。值得注意的是,我们的方法的检测范围限制为[2,59.6]m,而基于透视视图的方法DID-M3D不存在这个缺点。因此,在IoU=0.5的标准下,我们的方法对于[50m,∞]范围内的目标表现较差。
我们在表4中提供了主要的消融情况。可以很容易地看出,占用学习对最终的检测性能有很大的好处。

我们在图4 中展示了占用预测和三维检测的定性结果。

在三维检测中,红色方框是我们的结果,绿色方框表示真值 。三维检测中的LiDAR点云仅用于可视化。我们可以看到,所提出的方法对当前场景产生了合理的占用预测,有利于下游的单目3D检测任务。然而,我们的方法可能无法估计严重遮挡的物体(见底部图片的右侧物体)。


5. Limitation and Future Work
这项工作的一个重要缺点是体素大小的限制。大体素可以减少计算开销和GPU内存 ,但代价是由于量化错误而无法精确描述场景的三维几何。相反,较小的体素尺寸能够表达精细的三维测量,但代价是增加计算开销和GPU 内存的使用。
另一方面,基于体素的方法具有有限的检测范围。这项工作主要集 中在单目三维检测任务中的占位学习,而对其在更多下游任务中的应用,如 multi-camera detection 和分割的探索较少。我们认为这是一个有趣且有前景的课题,并鼓励未来的工作减轻上述限制,以推动自动驾驶社区的发展。
6. Conclusion
在本文中,我们提出对单目3D检测进行占用学习 ,以获得更有鉴别力和信息量的三维特征。为了进行占用学习,我们通过使用同步的原始稀疏LiDAR点云来设计占用标签,并引入相应的占用损失。消融实验验证了每一个组件的有效性。据我们所知 ,这是第一项将占用学习引入单目3D检测的工作 。我们在具有挑战性的KITTI和Waymo公开数据集上进行了实验。结果表明,所提出的方法取得了新的sota结果,并以很大的幅度超过了其他方法。
(一)视频课程来了!
自动驾驶之心为大家汇集了毫米波雷达视觉融合、高精地图、BEV感知、多传感器标定、传感器部署、自动驾驶协同感知、语义分割、自动驾驶仿真、L4感知、决策规划、轨迹预测等多个方向学习视频,欢迎大家自取(扫码进入学习)
(扫码学习最新视频)
视频官网:www.zdjszx.com
(二)国内首个自动驾驶学习社区
近1000人的交流社区,和20+自动驾驶技术栈学习路线,想要了解更多自动驾驶感知(分类、检测、分割、关键点、车道线、3D目标检测、Occpuancy、多传感器融合、目标跟踪、光流估计、轨迹预测)、自动驾驶定位建图(SLAM、高精地图)、自动驾驶规划控制、领域技术方案、AI模型部署落地实战、行业动态、岗位发布,欢迎扫描下方二维码,加入自动驾驶之心知识星球,这是一个真正有干货的地方,与领域大佬交流入门、学习、工作、跳槽上的各类难题,日常分享论文+代码+视频,期待交流!
(三)【自动驾驶之心】全栈技术交流群
自动驾驶之心是首个自动驾驶开发者社区,聚焦目标检测、语义分割、全景分割、实例分割、关键点检测、车道线、目标跟踪、3D目标检测、BEV感知、多传感器融合、SLAM、光流估计、深度估计、轨迹预测、高精地图、NeRF、规划控制、模型部署落地、自动驾驶仿真测试、产品经理、硬件配置、AI求职交流等方向;
添加汽车人助理微信邀请入群
备注:学校/公司+方向+昵称