智驾领域有一个非常重要的工作就是驾驶视频生成,在2024年这项任务的答案是3DGS,在2025年这项工作(可能)的答案是世界模型。这篇博客站在如何做这件事情的角度讨论方案的选择,纯属个人观点,如不赞同强烈欢迎评论区狂喷我爱看。
什么你的我的自行车,这是大家的共享单车
观点
先说世界模型,目前我看到的几个智驾领域世界模型的paper严格意义上说都不是世界模型,或者说是世界模型的子模块。经典的世界模型定义包括一个记录了世界观的模型,和基于该世界观模型的agent,这个agent可以根据记录的世界观作出未来的合理行为。当前发的paper基本不包括agent,他们都主要关注以视频生成为载体的未来状态预测。
然后说3DGS,我们要对他进行去魅,剥开各种续作里神乎其神的概念,这东西其实还是点云(NeRF可以理解成空间占据类模型,它是三维空间上的连续函数)。3DGS可以进行新视角合成,点云/surfel/mesh投影也可以呀,只不过3DGS新视角渲染的效果更好罢了。它牛逼的地方在于1次采集数据能变成N份训练数据从而减少数据采集和labeling的工作,实现的原理就是新视角合成。
举个例子,传统训练数据只包含采集那个时刻所行走轨迹时的数据,但是由于3DGS可以新视角合成,你可以人为设定一个新的轨迹(有无限种方案),让3DGS在这条新轨迹上不断渲染,这样就能做到源源不断的新数据生成。
3DGS在效果上主要有2个痛点:缺乏视角的范化性(如果训练时缺少该方向图片,你拖动位置时该方向渲染效果会失真);动态问题(这是三维重建普遍的难题)。经典3DGS的点云源自colmap类SfM方法,但是对于不差钱的大户而言这没有必要,用LiDAR点完全可以(现在LiDAR也不贵了)。
在智驾领域目前的落地需求上,3DGS和世界模型在部分需求上扮演着相同的角色,都要的是新视频生成的功能,从而获得低成本生成大批量保真的视频。对于世界模型而言,它是通过“猜”,“脑补”或者“dream”的方式“编”出来的,生成视频质量的高低取决于世界模型里抽象出来的世界观是否和真实世界规则一致。
举一个例子,人和人之间的差异性主要体现在认识水平上,具有高认知水平的人更容易获得世俗意义上的成功,具有低认知水平的人就容易采坑,根本因素在于不同人的世界观是否和当前时间线下的世界相匹配。如果训练出来的世界模型认知水平很低(也许某个平行宇宙就是这个样子的),它预测出来的视频你敢拿来训练当前世界的下游模块吗?
我个人觉得,世界模型不应该是这样,既然费很大劲训练出一套对世界规则理解的模型,它更应该直接用于pnc的端到端推理,而不是只是用于视频生成,它后面接的应该是规划决策decoder,而不是视频decoder,它应该具有根据外部感知输入和内部世界模型自主决策的agent,好在这类方案也逐渐出现了。
更重要的是,dream出来的视频真实性是比不过3DGS的。3DGS做渲染的过程可以理解为
真实的4D视频
,它是根据真实数据三维重建出来的,里面所有的物体的运动都是真实发生的,我不用担心它的运动合不合理,
3DGS保真,世界模型不保真
,因此训练视频生成的最合理方案应该是3DGS。
最近大火的各类chatGPT,已经有网友发现,当你问他一个专业性的问题时,他可能会一本正经引经据典有理有据地告诉你一个错误的信息,这是一件有风险的事情。
类似的,Carla和GTA等simulation方案同样不保真,因为这类方案里的规则全是人设的,只要是人设的,就有可能出现理解偏差和理解不全。
好了,现在大方向上把世界模型和游戏类方案否掉,接下来根据3DGS的2大痛点来进一步确定细分思考方向。
动态物体
先说观点,我不赞同4DGS,S3Gaussian等4DGS类方案,因为环境中绝大部分物体是静态的,所以不应该给所有gaussian体增加时间信息,这就好比为了这叠醋包了顿饺子,或者说为了兰博基尼5元代金券买了一台兰博基尼,什么意思,就是
为了满足只占少数的需求迫使所有对象都发生改变
。
更好的方式是用AirSim/Carla/GTA的方式来管理动态,只不过动态物体的运动不是仿真器根据规则推测的,而是数据里真实记录的。因此为了解决动态问题,3DGS更好的玩法是
动静态分离
。先说静态环境如何建立,我们已经有了3DGS的训练pipeline,那么对于它的输入数据(图片+点云)应该先把动态物体mask掉,静态物体按照经典3DGS流程建立,我在之前的博客里讨论了动态剔除的方法。
3DBox类方法被4DGS类论文里diss了,我的观点和他们恰恰相反,
图片+点云的目标检测才是3DGS里动态物体提取的最好方法
,因为方案成熟经过大量验证也有专业团队手到擒来无需再去想新的且效果未知风险不可控的骚操作,我在下面的链接里汇总了近年来经典的车载LiDAR目标检测方案。
根据目标检测方案,我们就能实现点云和图片的动静态分离,如果我们在目标检测的基础上增加目标追踪MOT,对于动态物体,我们有它的3D框,那么同一目标在不同帧上有多个3DBox和box内的点云,由于box内的点相对于box的位置是固定的,在box坐标系下,我们就可以把同一目标的多帧动态点合并到一个box内从而实现动态物体的完整重建。
进一步,利用所有观测到当前动态物体的图片对它的3DGS进行训练,就能获得当前动态物体在不同视角下的渲染。
目标追踪MOT是在目标检测的基础上进行的,不光实现对多帧同一动态物体的关联,还能
获得该动态物体的轨迹
,这一点是4DGS类方案做不到的。我们再进一步发散思维,如果说对于某次采集数据建立的3DGS场景,我把某个轨迹上的车给它删掉,是不是又多了一种数据?又如果说我把某个轨迹上的小白车换成大货车,是不是又多了一种数据?这里要再强调一下,基于真实数据建立出来的模型里物体的运动是真实发生过的,我们不用担心它是否合理(100%真实),而世界模型方案就不能做到这一点(哪怕99.99%真实你心里都会犯嘀咕)。
因此,
基于真实数据3DGS静态重建+MOT+物体替换是3DGS方案的重要优势,它实现了数据可信赖的范化和多模态
。
更进一步,对于动态物体的3DGS,我们不用采集的数据进行训练,而是干脆事先随便找个停车场把里面的劳斯莱斯奔驰马自达五陵弘光拍个遍,构建一个3DGS模型语料库(类似于游戏开发一样,都事先有树木NPC建筑武器的3D模型库),然后对于采集的数据进行MOT时,我只保留动态物体的运动轨迹,不保留动态物体本身,然后用语料库的模型进行随机替换,这样就和AirSim/Carla/GTA很像了。
最后说一说动态场景的渲染。动态物体我们可以理解为静态物体+posed time。在某一时刻,我们根据MOT查表找到动态物体此时在哪,然后把它放在那里,这就意味着,当
时间固定时动态环境就收敛为静态环境
了,此时就根据经典的3DGS渲染流程走就好了。
以上内容只针对车辆,对于行人,风吹杨柳,红绿灯需要单独处理。其实也没事,
行人和风吹树仍然可以理解为模型库里的基础模型,红绿灯仍然可以理解为动态物体,一样的处理逻辑
。
多视角
缺乏新视角泛化性是3DGS的一个难点。我想大家玩3DGS都有过这样的经历,拿自己的图片训练好后,训练图片视角附近渲染的很真,鼠标一拖开就露馅了,而且露馅得非常快。
为此思路一是增加几何约束,去年一些2DGS的surfel类方案是这个思路。
思路二比较简单,增加不同视角的训练图片就好了。采集数据的时候,本来只有1个相机,我现在按照nuScenes的方式搞6个相机,各个方向都能看到,用所有图片来训练3DGS。如果说囊中羞涩只有一个相机,那采集的时候东张西望各路美景都贪心地尽收眼底。