2024年下半年回答的v3版本
上次写v2版本的回答的时候, 对e2e具体怎么做的认知, 还只是靠自己的想象. 回看了一下, 虽然原理没问题, 但是想真的训练出来一个这样的world model, 难度巨大, 具体原因为:
-
输入history video, 预测future video, 大量计算被浪费在背景的那些pixel or latent space pixel上
-
从而导致这样的模型, 需要model capacity足够大也就是参数足够多, 相应的需要的数据也要足够多
-
所以要把无意义的背景去掉, 只预测和自车planning有关系的那部分信息就可以. 具体做法我们投了一篇cvpr2025, 方法非常简洁, 效果也SOTA, 同时在这个细分方向上, 创新性独一无二, 开宗立派(哈哈哈吹的有点过了), 就是不知道能不能中, 过段时间出结果后放出来.
同时, 我们还正在做下一代的e2e模型:
-
基于VLM + diffusion做的, 这样可以利用VLM对通用世界的理解能力输出离散类型的决策信息, 并以这个为condition, 利用diffusion优秀的生成能力输出精细的高频信息, 即3d感知+planning轨迹
2024年上半年回答的v2版本
技术发展很快,上次回答还仅仅局限在bev本身。随着chatGPT和diffusion model的发展,这种思路也在向视觉和自动驾驶蔓延。所以自动驾驶的下一步,应该是基于world model这种fundamental model的end-to-end pipeline来取代现在的感知-预测-决策-规控的模块化方式。
world model代表了一个模型对其所负责的领域的基础理解能力,而反应理解水平的最佳方式就是可以准确的做出对未来的预测。
chatGPT是根据上文预测next token,我们可以说他对人类的自然语言有了一个基本的理解。openAI 首席科学家 Ilya Sutskever 前段时间接受的一个采访也提到:大语言模型看起来所做的事情是预测下一个词,但实际上在这个过程中,大语言模型学会了表征这个世界,是一个世界模型。
自动驾驶场景中的视觉也一样,如果输入前面几帧image,模型可以预测出来后面几帧,这个模型就对自动驾驶场景有了基本的理解能力。
只不过语言是人类高度抽象出来的,信息熵高,视觉是天然的,信息熵低,所以训练一个具有更大压缩比的视觉world model更难,需要巨大的数据和算力。
这个world model,其输入可以是多模态,比如加上场景描述text,驾驶action,导航信息等等,这些模态经过encode后作为生成模型的condition,具体实现可以基于diffusion model。
还有一个问题就是自动驾驶camera都是multi view的,如果生成multi view,耗费更大的计算资源不说,multi view之间的同步性也不好控制,所以可以基于bev space作为stable diffusion的latent。
有了这样的一个world model后,我们就可以利用其对未来的预测能力,再增加一个planning network或者直接输出control信号的network继续进行finetune,预测出未来的planning或者要采取的action。
最近也有一些paper在做这个方向,比如drivedreamer,gaia-1等。
2023年回答的v1版本
先回答问题
现在bevformer和voxel pooling平分秋色,但是这种dense的方法感知范围都会受到算力限制。
下一步应该是基于sparse的表示,计算复杂度完全不会受感知范围影响。特别是sparse下的时序怎么做,因为dense feature可以很方便的做前后两帧的spatial alignment。
目前的dense方法
voxel pooling不仅仅在hw维度上dense,在depth上也dense,比较浪费计算,但是优点是把2d feature投到了所有的depth bin中,理论上不同depth上feature不同,可能会对depth估计更准。
而bevformer正好反过来,是把3d往2d投,在远处的时候,经常会出现一个ray上的3d点被投到了相同的2d点,远处经常深度估计不准,经常出现预测一串物体的现象。
关于representation
普通的2d detection,从anchor based到point based(centernet),再到detr系列,和深度学习相关的东西的本质是没有变的,变化的只是我们对问题的表示方式:representation。
bev也是如此,从后融合不同camera的3d detection,到直接从网络出来bev detection,变化的也只是representation。
对物体的表示方法,是朝着越来越精简和优雅的方向来发展的,比bev更好的representation,也是bev后面的发展方向。
所以说,bev这种方式,在于从表示方法上的创新,他该有的问题一样有,比如depth估计不准,比如长尾分布带来的corner case。
从信息论的角度
一个通信系统,包括信源,编码,信道,解码,信宿。对于神经网络来说,信源就是网络输入,编码和解码都是网络结构,信宿就是输出,可以认为没有信道,或者是一个identity的信息传输通道。
以下的任何一个模块的创新,都可以成为bev下一步的发展方向。
同样的模型,输入融合camera和lidar等多种传感器,比单纯输入camera效果要好,因为提供了更多的信息。
同样的输入,使用不同的编码,效果也不一样。比如刚才提到的bevformer和voxel pooling就是不一样的编码方式。还有MLP和IPM这两种效果不太好的。
bevformer v2,可以认为是改进的解码部分,增加了mono3d head作为decoder的一部分reference points。
如何做sparse
只说大体思路:init一组bev坐标系下的reference points(比如900个),然后投到2d points去2d feature做sample。时序,就是把这组reference points根据ego pose得到t-1的points,去t-1的2d feature上sample, 但是这样做计算量有点大, 可以像sparse4d这样, history query取topk和当前帧query concat, 即query propagation的方式