0. 笔者个人体会
这几年,NeRF可以说已经逐渐渗透进了各个领域,新视点合成、三维重建、SLAM等等很多应用都在想方设法得使用NeRF。那么自动驾驶领域呢?虽然在实车上直接边缘部署NeRF还有难度,但是NeRF可以应用到自动驾驶的场景合成上,再用合成的场景做其他事情!普通场景下的自动驾驶算法其实已经做的很好了,但是特殊场景还是很容易出错。主要还是因为特殊场景下的数据集太难找了!自己录制数据也非常麻烦。显然,NeRF强大的合成能力可以模拟极端场景下的路况,尤其是高动态场景,也就进一步模拟了真实的自动驾驶场景。
最近,清华、港科大、麦吉尔大学、北理工、新加坡国立、香港大学、帝国理工、浙江大学等11个单位联合开源了MARS,也是第一个基于NeRF的自动驾驶开源模拟器。直接模拟真实的自动驾驶RGB、深度图和语义分割Mask,这项工作具有实例感知、模块化和真实性等特点,支持多模态输入,可用于深度和语义感知组合渲染,已经获得CICAI 2023最佳论文Runner-up奖。今天笔者将带领大家一起欣赏一下这份工作,当然笔者水平有限,如果有理解不当的地方欢迎一起在「3D视觉从入门到精通」星球内一起探讨。
1. 效果展示
先来看一下具体效果!
下面这张图就是MARS的具体应用,第一行表示合成的图像(已经足够真实,用来做SLAM或者检测完全够用),第二行代表生成的语义分割Mask(可以直接用来做分割任务的训练),第三行代表生成的深度图(视觉效果很好,但是很多深度估计的定量效果都不是很准确,可以做一下三维重建验证),第三行代表生成的动态前景目标(可以直接在静态图像上生成动态目标来测试动态SLAM)。
还可以直接拖动进度条来控制动态目标的运行轨迹、尺寸、外观!
可以再看一下重建场景和原始RGB图的对比,可以说几乎找不到区别,这里不得不感叹一下NeRF的强大!
总之,效果非常好。代码即将开源,感兴趣的小伙伴可以关注一下。下面我们来看看具体的文章信息。
2. 摘要
如今,自动驾驶汽车可以在普通情况下平稳驾驶,人们普遍认为,真实的传感器模拟将在通过模拟解决剩余的极端情况方面发挥关键作用。为此,我们提出了一种基于神经辐射场(NeRFs)的自动驾驶模拟器。与现有工作相比,我们的工作有三个显著特点:(1)实例感知。我们的模拟器通过独立的网络分别对前景实例和背景环境进行建模,从而可以分别控制实例的静态(例如尺寸和外观)和动态(例如轨迹)属性。(2)模块化。我们的模拟器允许在不同的现代NeRF相关的主干、采样策略、输入模式等之间进行灵活的切换。我们期待这种模块化的设计能够推动基于NeRF的自动驾驶仿真的学术进步和产业部署。(3)真实性。我们的模拟器设置了新的最先进的照片现实主义结果,给出了最佳的模块选择。我们的模拟器将是开源的,而我们的大多数同行都不是。这里也推荐「3D视觉工坊」新课程《深度剖析面向自动驾驶领域的车载传感器空间同步(标定)》
3. 算法解析
MARS的输入是RGB图像、传感器姿态(由IMU/GPS解算)、物体轨迹(3D边界框、类别、实例ID),深度图和语义分割图可以在训练时辅助监督。神经场构建完成以后,就可以在给定传感器位姿时模拟RGB图、深度图和语义分割Mask,还支持对物体轨迹和外观的实例编辑。
下面来看看具体的Pipeline。
MARS建模背景节点和每个前景实例节点。具体来说,给定射线r,首先计算每个可视物体的3D边界框的交集来获取进入和离开距离。然后,背景节点和前景对象节点都进行query,而每个节点都会采样一组3D点集,并使用其具体的神经表征网络来获取点属性(RGB、密度、语义信息)。对于物体节点,根据对象轨迹将射线原点和方向从世界空间转换到实例帧。对于背景节点,直接像传统NeRF那样推理属性,最后,对来自背景和前景节点的所有射线样本进行合成和渲染,以产生像素级的NeRF结果。
那这里的模块化是什么意思呢?
其实就是说针对静态背景和动态前景对象采用不同的NeRF框架,MARS将场景分解为一个大规模无界的NeRF和多个以物体为中心的NeRF。当然笔者觉得模块化还有另一个意思,就是MARS可以支持各种NeRF主干,包括基于MLP的和基于网格的,还支持各种各样的采样策略。
注意,静态背景和动态前景对象的特性是不同的,而现在很多的NeRF都是针对两者使用统一的框架,这显然是不太对的。而MARS就很巧妙得为背景和前景对象设计了模块化的不同设计,并且可以很容易结合最新的重建方法。MARS的模块化设计还使用了很多的trick,比如使用unbounded scene warping来表征图像中的远距离区域。
MARS的采样方法很有意思。因为背景和前景对象的独立采样的,因此很可能会出现背景样本落在前景边界框的情况。渲染之后就会把前景样本误分类为背景,这样的话,去除前景实例以后背景就会出现鬼影。理论上输入足够多的视角图像,网络可以在训练过程中自动学习分区前景和背景。但是对于一个数据驱动的模拟器来说,车辆在道路上快速移动,获取丰富且高质量的多视角图像非常困难。
那么怎么解决呢?
这里是使用了正则化策略来最小化背景截断样本的密度和,其中P代表背景截断样本:
这样就很好得解决了鬼影问题。
4. 实验结果
实验主要是在KITTI和V-KITTI数据集进行的,作者目前也没有公布训练使用了多少GPU。对于具体的网络架构,作者的默认配置是:针对背景节点使用基于网格的NeRF和proposal sampler,针对前景对象节点使用改进的类别级表征和由粗到精的采样。这里简单提一句proposal sampler,来源于2022 CVPR论文"Mip-NeRF 360: Unbounded Anti-Aliased Neural Radiance Fields",主要思想是从无辐射NeRF模型中蒸馏密度场来生成射线样本。
模型训练了20万次迭代,每个batch有4096条射线,使用RAdam优化器,静态背景的学习率从1e-3降低到1e-5,动态前景对象的学习率从5e-3降低到1e-5,主要对比的baseline也就是原始的NeRF和各种NeRF变体。
根据图像重建的定量对比结果,可以发现MARS相较于其他SOTA方法有了很大的提升。
下面是新视点合成的定量对比结果,使用75 %的训练数据,MARS在V-KITTI上可以达到29.79的PSNR,而之前的最优结果为23.87,提升非常明显。
定性实验结果也很漂亮,可以发现针对动态场景,其他的NeRF都会不同程度得出现鬼影,但是MARS可以稳定合成静态背景和动态前景对象。
感觉实例编辑是MARS中很有意义的一个工作,由于MARS是分别建模静态背景和动态前景对象,因此可以以实例感知的方式编辑场景(好神奇)。具体来说,可以定性得删除实例、添加新实例、还可以编辑车辆轨迹!
消融实验验证了不同的设计模式对背景节点表示、前景节点表示等方面的影响。这里也有一个比较重要的点,以前的工作都是在90张图像的短序列上评估,但是MARS使用了完整的序列来评估。笔者觉得很好的一点是,MARS分别验证了基于MLP和网格的模型,这个工作量还是挺大的。
5. 总结
MARS这篇文章提出了一个基于NeRF的有真实感的模块化自动驾驶仿真框架,可以直接生成自动驾驶场景下的RGB图像、深度图和语义分割Mask,还可以单独生成前景动态对象以及实例编辑。MARS由一个背景节点和多个前景节点组成,实现了复杂动态场景的建模,整个Pipeline在数据集上展现了SOTA的渲染性能。
至于局限性,作者也提到了MARS不能达到实时渲染,这个也是NeRF的固有问题。而且,MARS没有考虑玻璃或其他反射材料上的动态镜面效应,这有可能会产生鬼影。