本文经自动驾驶之心公众号授权转载,转载请联系出处。
背景
无疑,NERF和3DGS等神经渲染相关技术是自动驾驶仿真领域讨论最火热的前沿技术。NERF和3DGS使用神经网络表达空间,其在新视角合成方面的优越表现直击自动驾驶仿真的一大痛点:传感器仿真。如果这一类深度学习技术能够推广应用,就能够很大程度上解决传统计算机图形学渲染出的图像缺乏真实性的问题,可以广泛应用在自动驾驶算法的闭环测试和训练中。
目前已经有一些研究项目在围绕NERF和3DGS技术打造全新的面向闭环测试的自动驾驶仿真框架,例如以NERF为核心的OASim【1】、NeuroNCAP【2】以及更早的UniSim(在此不再贴出UniSim的论文链接,【1】项目中有UniSim的非官方实现,以及另一个非官方实现【3】)。目前笔者还没有发现围绕3DGS展开的相关工作。完全新开发一个仿真框架,使其具有现行场景仿真软件类似的功能将会有巨大的工作量。因此另一个应用场景合成新技术的思路是:将NERF和3DGS训练出的模型嵌入到现有场景仿真软件的框架中去,在保证实时渲染的前提下,将NERF和3DGS的渲染结果作为背景,动态物体仍然使用原有的3D数字资产,最终合成出新的真实程度更高的图像,整体框架如图1所示。
图1
目前,一个匈牙利公司的仿真软件产品aiSim已经以此为卖点展开了宣传:效果如图2、图3,在NeRF和3DGS生成静态场景后,aiSim将基于外部渲染API进一步增加动态元素,不仅可以重建原始场景,也可以根据测试需求构建不同的交通状态。
图2
那么,像图2、图3这种仿真效果,我们普通人是不是也能拥有呢;)本文就将通过笔者的一个小实验告诉你,这是有可能的!本文实验全程“无痛”:完全使用开源的学术研究,且无需程序编写。
CARLA插件
在NERF和3DGS的研究兴起之初,就已经有相关的工程工作旨在将训练好的模型嵌入到现行游戏引擎的渲染框架中去,以作为一个方便编辑的数字资产,在运行时达到实时渲染的效果。较早的工作例如【4】,只需要花几十美元就可以在Unreal的市场中买到这个插件。后续工作包括元象科技的【5】,应用于windows平台的UE5之上,以及一个高校研究项目中的NERF插件【6】,应用于windows平台的UE4。
那么是否有一款合适的插件可以直接应用于基于Unreal的开源场景仿真软件CARLA呢?笔者通过比较,最终选择了LumaAI的3DGS插件【7】,主要是因为从网站中我们可以下载到源码,方便我们和CARLA一起执行编译。
由于LumaAI只支持UE 5.0.0以上版本,而最新CARLA发行版0.9.15仍然使用UE4,因此本次实验只能选择CARLA代码库中仍在开发中的UE5分支进行测试。具体选择的分支是CARLA【8】和UE-CARLA【9】(请注意,笔者测试的是以上两个仓库中截至24年4月8日的版本)。
安装编译之前,需要从【7】中下载LumaAI的源码包,例如名为LumaAI_2023_25_12_marketplace_5.0.zip的压缩文件,解压缩后将内容复制到CARLA根目录下的Unreal/CarlaUnreal/Plugins路径下。
在这些开发分支中,官方教程中的编译方法不再适用,但CARLA根目录下的Setup.sh中记载了开发分支的编译过程。笔者的实验环境为ubuntu 22.04。编译过程中会提示图4中的内容,点击yes就好,让插件和CARLA一起编译。编译成功后,CARLA的UE editor会启动,你此时可以在Plugins列表中看到LumaAI,如图5。LumaAI的插件可以将任何3DGS模型输出的点云ply文件或者专门的luma文件导入UE editor,成为资产库中的一类Blueprint Class,比如将我们都很熟悉的狐狸头导入Town10(图6)。
图4图5
图6
(根目录下的CMakeLists.txt中显示,通过增加BUILD_PYTHON_API编译选项,可以对pythonAPI进行编译,成功后可以在pythonAPI目录下产生carla.so文件以供引用。)
街景重建
原版的3DGS(过于著名不再贴出链接)就可以完成街景重建,但3DGS项目本身不处理动态场景,也不是为街景这种开放式环境设计的。学术界一直有针对自动驾驶场景3DGS的研究项目,目前开源的有PVG【10】GaussianPro【11】S3Gaussian【12】等。本文实验中笔者选用的是有标注框监督派的代表,浙大的street gaussian方法,虽然原项目并未开源,但光轮科技已经将他们的复现版street-gaussians-ns发布到了github上:【13】。
street-gaussians-ns的训练过程不再赘述。为了在Unreal中呈现更好的效果,可以选择使用waymo的全部5路摄像头数据进行训练。训练完成后,street-gaussians-ns还提供了方法可以将场景的点云ply文件提取出来。
接下来我们就可以打开CARLA的UE editor,使用LumaAI插件,将street-gaussians-ns导出的ply插入仿真环境看下效果了。
安装了LumaAI插件的UE editor打开后,在左下角的content browser中,可以看到Import功能按钮,点击Import,可以在本地目录下寻找ply文件,导入到content browser中,如图7。导入成功后,点云就成为了资产库中的一个Blueprint Class,如图8,此时把Blueprint Class拖入场景,就可以在场景里对其进行编辑操作了。
图7图8
在UE editor中编辑以及Unreal场景运行起来后的效果如图9-13(图13使用的是方法【11】训练的结果)。至此你就拥有了一个自己的3DGS自动驾驶仿真器,过程是不是完全“无痛”!
图9
图10
图11图12
图13
理论上讲,接下来只要我们能够根据以上waymo场景做出简单的CARLA地图,再对插入的3DGS点云模型进行一点“微调”使其贴合地图,就可以流畅地在上面安排3D数字资产运行动态场景了!操作过程如图14。
图14
未来
如果真的想要严肃考虑以这个思路做神经渲染在自动驾驶仿真中的技术落地,笔者认为还需要解决的问题有:
- 前景动态物体的渲染:
尽管已经有研究项目在解决虚拟前景物体和真实合成背景间的融合问题了,如ChatSim【14】中的McLight方法,但笔者认为真实度仍然不够。我们是否也可以用NERF和3DGS训练出的模型来表示前景动态物体呢?在CARLA的框架下目前这一点比较难,因为LumaAI导入的点云Blueprint Class和Car等actor的Blueprint Class截然不同,应用难度较大。不过我们也看到了一些研究项目如gaustudio【15】,可以对3DGS方法训练出的模型提取mesh、texture等素材,也许这样我们就可以用CARLA原本的建立车辆模型的pipeline来建立一个“点云版”的车辆actor。再辅以另外一些解决少视角重建的研究如GaussianObject【16】,也许在CARLA中导入神经渲染动态物体有一天也会成为可能。
- 地图:
仿真场景离不开地图,除手工搭建外,也许也可以用一些诸如MapTR(过于著名不再贴出链接)的方法解决。
- 更多传感器:
截止到目前为止我们只讨论了相机图像的仿真,尽管自动驾驶进入了重视觉时代,但其他一些传感器仍然是不可或缺的,我们仍然需要其他途径来模拟这些传感器。