用BEVformer来卷自动驾驶-2

时间:2024-01-21 18:01:46

回顾上一期:用BEVformer来卷自动驾驶-1 (qq.com)

用BEVformer来卷自动驾驶-2_3D

      

      上一期我们讲到了从3D到4D(加了时间概念)以后使得BEV能变得更厉害,具体这种厉害其实是可以解决纯视觉解决方案里面最难解决的问题,就是基于恶劣天气,或者拍的不清楚的时候,或者突然有遮挡的时候,融入时间的概念,可以很大一定程度上提升解决方案的准确度

       总结一下上一期我们介绍的

  • 2D:一个摄像头2维平面特征
  • 3D:多摄像头特征融合的BEV高维空间
  • 4D:  加了时间序列的BEV更高维空间

       

        我们继续

        思考一下在特征融合的时候我们可能会遇到哪些问题?

  1. 自动驾驶它不是静态画面对吧?那必然涉及到不同时刻的特征,这部分差异要对齐
  2. 不同传感器的时间绝对相同么?不一定,那时间差异要对齐
  3. 把多个特征最后都要映射到同一个坐标系里面,空间位置也要对齐
  4. 谁来对齐?


还是拿图来举例说明

用BEVformer来卷自动驾驶-2_3D_02

       比如上图看2维空间的一个自西向东行驶的汽车,它的座舱位置在T-1时刻和T1时刻是覆盖在不同的像素点之下的,T-1时刻座舱玻璃是绿色的像素点,T时刻是粉丝的像素点,我们要开启BEV上帝视角,就自然要设定一个偏移量,比如T-1到T时刻,座舱的像素点取数据要在X轴上加a。

       那么这个a偏移量假设世界上真的有足够聪明的人,或者足够有经验的人可以定义,但是还要考虑定义此时Y轴上的偏移;还要定义可能和这个车存在同一个摄像头画面里的其他的对象的偏移定义,所以用人是不现实的,这块我们交给模型做预测就可以了。

      另外空间上的补偿也用一个图来说明,这个相对简单点

用BEVformer来卷自动驾驶-2_3D_03

       比如针对左上角视角的摄像头a。正常它负责的区域,就是左上角扇形区域的视野,但是你保证摄像头的内外参的映射和校对一定是完美的吗?包括由于日常行驶的时候的一些突然发生的问题,所谓是未必的。这个空间上的差异也需要通过模型去矫正,进而在2D转3D的时候映射到相对准确的特征空间

      当校对并且融合完毕后,我们可以近似理解为我们得出了BEV,就是上帝视角下的被重构的一个特征空间,当然在这个特征空间的大小我们可以自己定义

      BEV可以想象成一个Tensor

      假设我画的下面这个图是200*200的矩阵(实在画不下).....

用BEVformer来卷自动驾驶-2_3D_04

       这个每一个对应的小方块(在现实世界一般是米为单位的,1米或0.5米完全取决于你要求的细致程度),每一个方块我们其实可以把它理解为一个向量,那么我们形成的BEV可以干什么呢?

       特征空间你可以给它想象成一个网络,特征空间的大小,也就是网格的间隔决定了你的精度,你可以弄200*200,那是不是得到了4万个向量组成的在高维空间上融合的tensor呢?

       你甚至可以做400*400那就是16万了,做多大都可以,看你显存的实力了。特征空间稀疏的,那计算肯定就快,如果你是个密集的特征空间,那肯定速度上要牺牲一些。

       在特征空间里,我们可以以全局视角来进行预测,整个空间的长和宽(比如200*200)都给出来了,只需要来计算每个方块的具体特征是啥就可以了。

       如果在任务中把每个点的特征都做出来了,你在高维空间中做物体检测啥的,这就是已经现成了(传统比如Yolo,DETR,还得先构建特征空间和向量)

        又或者你拿着这些做分割或者其他的下游任务,那也是手到擒来了,现在的主流本来就是同一个共享的特征空间,不同的下游任务,愿意做啥做啥,打个比方就好像打游戏时候别人还在新手村探索地图,而你已经开挂了,知道所有藏宝的位置

        我们继续以一个图来讨论可能会发生的问题

用BEVformer来卷自动驾驶-2_特征空间_05

      当特征空间确认了下来,比如200*200,那它需要和我的6个摄像头来计算特征吧?

      比如每一个摄像头是100*100,那4万个点中的每一个点要和6个摄像头都算一遍,我就需要进行6万次计算

     200*200的特征空间每一个点去和6个100*100摄像头计算就要24亿次...

     我相信这个时候会有读者想到,要不做空间压缩,把200*200变为20*20,那这种以牺牲细节为代价的想法,可能又没法真正商用,我们还是要考虑现实世界的最起码精度要求...

     那我想又当又立怎么办?可以实现吗?

     答案是可以的,这个时候BEVformer就出来了

     今天就讲到这,后面讲BEVformer, 铺垫了2天,才讲完BEV还没说BEVformer是啥...