TPVFormer能治好我朋友的大模型玉玉症吗?

作者 | matrix明仔  编辑 | 汽车人

原文链接:https://zhuanlan.zhihu.com/p/614984007

点击下方卡片,关注“自动驾驶之心”公众号

ADAS巨卷干货,即可获取

点击进入→自动驾驶之心【占用网络】技术交流群

本文只做学术分享,如有侵权,联系删文

刚才有几个准备去考公务员的嗑盐爱好者问我,明老师发生什么事了,我说怎么回事,给我发了一几张截图,我一看!嗷!原来是前几天,有两个大模型,一中一外,一个参数可能只有几百B,一个参数,100多wB。其中一个准公务员说,我在炼丹房用chatgpt给一些自动驾驶场景生成文本信息,用来做(language and visual)L-V多模态BevFormer的研究。但是把GPU炼坏了,明老师你能不能教教我新的TransFormer技术,哎…帮助治疗一下,我的嗑盐玉玉症。我说可以,我说你在炼丹房炼死劲儿,不好用,他不服气。我说小朋友:你两个gpt-4来找我一个camera,他找不动。他说你这也没用。我说我这个有用,这是用钱买不来的,传统BEV感知是讲高效多视图信息融合的四两拨千金(四个camera打一个千元的lidar)。二百B的美国语言大模型,动我不动我这一个camera。啊…哈!他非和我试试,我说可以,等我写完这篇知乎吧。

4cdf403cb12e2d8140f9afcd45b27a3e.png
发来的截图

给各位已经对自动驾驶不感兴趣的投资人们先科普一下自动驾驶任务

整个自动驾驶简化来说系统主要是三个比较大的部分组成,包括感知,决策和控制。我们如果拿人的这个人类来举例子的话,感知就相当于这个人的一个视觉系统。自动驾驶就是通过对这个汽车增加一些摄像头和激光雷达来捕获周围的环境信息。对这个环境信息进行了处理之后,我还要做出一些决策,比如说我这个车是往哪个地方开,是想要往往左开还是往右开。其实这个过程就类比于人类大脑里边的这个决策。最后一个控制系统,这个比如说对汽车的一些转向系统,就比如这个发动机系统,这个就类似于对自己肌肉的控制。目前来说,其实决策这方面水比较深,我们把握不住的情况下不要轻易的去投资。控制这块的话,因为传统汽车就已经有很成熟的工艺了,改赚的钱别人已经赚了,所以基本也没啥赚大钱的机会。我是建议大家可以把注意力多放在这个自动驾驶中的感知的这个方面。自动驾驶感知说白了就是在我捕捉到环境信息后怎么对这个三维的场景进行进行一些信息的整合和处理,使得这个场景可以更清晰。比如说最右边的这两张图片就是两个比较典型的三维场景感知任务,在一张自动驾驶场面的图片通过一些车和行人这种参照物体来预测出来他的一个位置的信息。

9710286bd112491614189c8a76810a5a.png
背景介绍

三维场景感知任务介绍

这个三维场景感知的一个基础任务就是三维目标检测,这个任务其实就是预测一个三维的边界框。这个边界框是一个在三维空间中的一个立方体,但是我们除此之外还除了预测出来这个框的这个长宽高之外,我们还要预测出来他在这个空间中的位置。

常用的数据集包括一些比较早的像Kitty,然后后来就是最近几年出现了nuscenes和waymo,其中因为nuscenes有6个环式的摄像头的数据,所以在视觉的任务中比较受欢迎,用得也比较多。waymo这个数据集更常用于做做点云目标检测的任务

两种技术方案

主流的自动驾驶方案它其实是有两种路线

一种是基于激光雷达和相机融合的方案

这种方案优点就是定位准确,因为点云就是激光雷达的这套方案它是可以定位到空间中的物体的具体的位置,相当于捕捉到物体的三维一体混元劲,所以它的就是定位准确性和检测精度会高一点。它的缺点就是它的数据是稀疏的,并且缺乏一些纹理,他就只是返回的是空间中的某个点的三维坐标,就是没有像普通RGB图像信息这么完善,所以他的核心的挑战其实在于更好的对点云数据进行表达。因为点云他是不规则的,所以我怎么来对这些不规则的数据进行一些建模和后续的感知方案的设计,这是都是一些比较大的挑战。

那么另一套其实基于图像的方案,这套方案其实也是爆炸奇侠特斯拉比较主推的一套就是纯视觉的方案。

这套方案的最大的好处就是它便宜,绝对是非常适合各大车商进行疯狂量产的方案。还有另一方面,其实就这套方案会更靠近人类一些,比如说我这个没有学习过马老师功夫的年轻人,没办法得到三维立体信息,一般开车就也是用两个眼睛看路,所以这套系统也可能跟人类的这个视觉系统可能更接近一点缺点是很明显的,没有三维信息。因为摄像头捕捉到的其实就是一个二维的图片,那么这个图片里面就缺少三维的感知,也就是缺少一些深度的信息那么这样的话对于这个检测任务来说,肯定会导致这个检测的精度是要比较低的。那么这里边的核心挑战也就在没有一些深度信息加持的基础上也能把任务做work,其实针对这个问题现在也有很多的很多解决方案,大多数方案都是打算做一个深度估计,不过这里就展开细说了,文章之后之后也会讲提到。

ad3540f3c4be9a0418f6495270d764f5.png

回顾2021-2022期间三维场景的高光时刻

1cd1c5c7d551a91bf92c6852bf148fb5.png

2021年到2022年其实三维场景感知的热潮是主要集中于基于BEV鸟瞰图的特征转换上。其实这段时间整个工业界或者说是学术界都受到了特斯拉的Vector space的影响,进而诞生了很多新式的BEV感知的工作。上图这套方案主要是将图片合点云信息通过一个模型后再经过一些特征转换,最后得到预测结果。用代码流程化一些的描述就是经过了图像的backbone和点云的backbone后经过一个特征转换的模块将输入的信息转换成空间化的表示。直观的理解,就比如说我们输入的RGB图像其实是个二维的信息,如果希望得到一个三维空间的表示最直接的就是建一个(x,y,z)的坐标系。但是在自动驾驶的这个空间中,其实对x y轴的表示的信息其实更丰富,在高度维度(z)上的信息表达就没有这么丰富。所以我们在构造这样一个空间的时候可以从这个性质出发,利用俯视图的性质,压缩对于z轴的依赖,所以说之前的方案就是提出了一种就像这种叫BEV或者鸟瞰图的这样一种空间表示。就像是之前所说的纯视觉的方案它其实是缺乏对深度的一个估计,那么从图像特征到BEV的这个三维的表示里边它会就涉及到一个特征的转换,我要怎么把这个深度的概念合理的体现出来。这部分其实也是之前这两年学术界的一个思考方向。除了这个预测任务之外其实还是有些做不同的task的一些工作,比如说刚才是提到3维目标检测和一些高精度图的检测的项目。

BEV特征转换

9e08324a980f6d48a3cb833eb2c446a0.png

我们继续来说BEV的特征转换问题,其实这些转换的工作主要是围绕着两大范式进行展开的。

第一种范式:我通过特征图预测出来一个深度,然后我根据这个深度把图像特征投到特定到三维空间上面,得到三维空间的表示,这个然后再把这个三维空间这个这种体素的表示来转换到其他的这个空间里,类似于拍扁操作,把信息投影到BEV的空间特征,

另一套范式是:直接在这个BEV空间中拿到一些query值,这个与最近的self-attention的思想结合的比较紧密。就是我在三维空间使用query然后,使用这些query,自适应的从图像的一些对应位置中采特征信息,这种方式也也可以把一些空间特性给学习到。

三维目标检测的新挑战

开放场景的研究:

25a075c3c103d0231de9840e6b7bf0de.png

如果想真正的将算法考虑到工业落地中,避开不了就是对开放场景的研究,也无法避免对于OOD问题的思考。首先一个开放的场景就肯定会出现许多奇奇怪怪的障碍物,比如说一些一个翻倒的大卡车或者说一个挖掘机突然出现在路上。因为这种场景其实在训练集里面是比较少见,所以对于这样的物体我们如果希望可以算法也可以用一个3D的矩形框来描述,其实非常困难。

76b36375c9bbbeb4cfce60ebd7fd0e31.png

特斯拉可能也意识到了这一点,所以他们去年的时候他们就从vector space演进到了occupancy space。vector space其实只是在一个x,y平面空间内进行建模BEV空间对地面进行建模,这样的话基本可以把道路转化为一个地图类型的结构。去年引进到了这个occupancy space这个其实对空间描述的是更精确的一些,会有更精确的三维的几何的特征就是像右边这个图它其实就是相当于在高度信息上也有了一个更精确的表达。比如说这个车在三维空间中每一个体素都会有一个占有的语义。其实相当于变成一个分类问题,空间中的一个点他是会被这个车占有,还是说这是点只是一个路面的信息。

三维场景的表达方式

回到任务的表示上来说我就我们就认为三维目标检测他只能得到一些稀疏的场面表示,这个场景表示他就是一些3D框.使用这样的描述方案其实过于粗糙的。他忽略的物体的几何形状把所有的物理都建模成一个立方体,这样的方法其实很难对刚才那种挖掘机的形状进行描述的。第二个方面其实也是仅完成了对前景物体的预测,但却忽略了一些背景的信息。当然这个背景的环境信息是可以通过一些其他的任务解决的,比如说刚才提到的高精地图的重建来获得一些背景的信息,但这种方案就相当于将两个任务割裂开的。

受到了特斯拉的启发,提出了一个新的感受任务—三维感知的占有预测。其实这个任务就是通过对每个体素进行一个语义标签的预测,从而生成出密集的环境语义预测表示。具体来说,其实就是对空间中的每一个体素都要有一个这样的标签。到底这个点,它是属于一个车还是属于地面还是属于一个建筑物

三维感知的占有预测任务其实对物体的形状背景以及环境异常障碍都能很好的进行一些比较可靠的表示和识别。这样的一个密集预测的环境会使得感知信息变得更加可靠和稳定,对一些异性障碍物也能表示出来。这样的感知结果对后续的决策和控制都会有一些更精确的一些辅助。

cd9a07292c7fdaa2400812ee8464044f.png

之后我们可以注意到了去年的CVPR22的一篇场景语义补全的文章,这个其实和刚才所说的任务是非常接近。不过他们这个任务是基于刚才提到那个比较早的Kitty数据进行研究的。他们提到方法里边,最核心的就是刚才说到将二维图像转化为三维空间体素语义预测图。其实就是用一些体素来建模一个整个空间,相当于我把整个三维空间离散化分成一个一个的离散化小正方体或者长方体,这样的话我整个三个空间其实被划分为非常细密的小长方体,之后可以将语义图通过卷积的方式结合vector space进行一些后续的感知任务。但是这样操作有两个比较大的问题,就是计算量大合耗时较长。

498a1b81504122558c71111c9b292d5e.png

第二个问题是,因为这种方法占更高的计算量和构建了一个非常密集的体素空间,因为在环视场景对整个三维空间建模,整个空间是更加大的。基于以上的特点,如果我直接到scale到这个大的空间,肯定会引入大量的关于计算量以及密度图表达的问题,所以使得这类型的方法很难迁移到环视场景。

这就需要我们思考一个新的三维场景的表示方式,其实之前的一些很多的工作他们只是聚焦到了怎么来从二维空间到三维空间的这个步骤,会忽略对于三维空间表示问题的研究。其实这个问题也是三维感知的一个非常核心的点。就是我们通过对图片进行一些特征提取之后,我们肯定是要把它转化成一个场景的特征表示再来做后续的一些任务,所以这个特征的场景的特征表示的这一步就非常重要了。它决定了后续我可以做什么任务包括这个任务的性能和效率之类的。

3df477d1e3c0b2c764d11d454f0bd5d6.png

对相关的工作做了一些调研之后,我们发现将这类型的工作可以划分成两个维度,四种方法。一个维度是当前比较主流的一些方法,就是体素在整个三维空间(x,y,z)轴都进行一个离散的划分,得到一些大致的表示。那么另外一个就是刚才提到的鸟瞰图,它就是对场景进行的一个信息的压缩,只用x,y轴来表示整个三维场景。此外就是两种数据类型的输入,分别是激光雷达的输入相机输入。所以两个维度上各有两种数据输入类型,那么就组合成了上面的四种方法。

现有的三维空间表示方式

3200ee379562b0360dbfe0255a496c1b.png

简单介绍一下,体素表示的特点就是每个体素都会分配一个特征向量。又因为体素是x ,y,z轴三个维度的表示,所以体素表示方法的计算和空间复杂度是和N的三次方成正比。

这个复杂度其实是比较大是一个明显的不足点。但它的优势就是对三维空间的描述是更为精确。因为相较于比鸟瞰图来说它多了一个z轴的信息。所以在三维语义分割,激光雷达分割的这些基于体素表示的任务上都取得了比较好的性能。

那另外一个鸟瞰图表示,它其实主要是应用于刚才提到的这个三维目标检测的这个任务,它特点就是用一个特征向量来编码整个柱状区域,这个柱状区域就是一个(x, y, z)它的z是可以变化的。它对三维空间的描述是比较粗糙的,因为BEV其实只描述了两个维度,另一个维度只使用了一些特征向量进行表示。这种描述是非常粗糙的。但它的优势就是计算空间复杂度是仅和N的二次方成为正比,那么它主要应用的就是三维目标检测中取得了比较好的性能,这个任务只需要预测出来一个3D的框,只用几个数字就能描述他的一个几何信息,所以说我就可以很轻松的把这样几个信息给他encode-decode到一个BEV的一个特征向量中。

对于刚才就是这个三维更加精确的这个三维语义占有的一个任务来说BEV其实还缺失了一维度,所以BEV就不能直接应用于这样的任务之上。

786554988768fc9cf40f44b13d5afb75.png

那么我们就会想,会不会有这样一种常见的三维场景表达。我希望这总表达可以综合上述的优点而放弃上述方法的缺点。第一点就是计算量足够的小,最好合N的二次方成正比。第二点是还可以尽可能的将z轴上的信息显示的表达出来,而不是使用encode-deocde的方法做成一个特征向量的表达。基于这种方向的思考,查到了CVPR2022的还有一篇关于Nerf的工作。在这篇文章中指出Nerf是一种隐式的表达,Voxels是一种显示的表达

其中隐式是指输入x,y,z坐标,我只输出对于这个坐标的描述。显示是直接利用信息进行一个建模处理。

那么他们提出的一个思路就是使用三个平面对整个三维空间进行建模。

可以看到右边他们的一个结果就可以发现我如果只用三个平面对我整个3D的空间描述其实也是非常精确的,像是这种非常细腻度的这种纹理也是能描述的是很精确的,而且它的这个也是能达到我们刚才想要的就是计算量也是比较小,因为只是用来三个平面的信息,其实也只是跟N的平方成正比。

TPV是啥

3a7d18940eb9d2f0349a3ab51b155137.png

很自然提出了一个在自动驾驶的场景里边的这种Tri-Perspective View的方法,就类似上图这样的一个三平面表示。那么这样的这样的表示方法它的一个好处就,它是显示和隐式相结合的表示。优势是能显示表达明确而且计算量少很多。这个优势就非常适合三维感知占有这样的一个任务,第二方面也是比较好兼容BEV。如果要直接把BEV扩展成voxels的表达,其实不太显示,所以,使用了TPV的方式对BEV的性能进行延伸。它将单平面推广成一个正交三个平面,而且可以很好的集成BEV这两年的工作,而不是摒弃之前的工作发展。

ebfd49c16d5e56c8bcc988655ad7c8a4.png

具体介绍这个空间的优势以及动机把这个点可以投影到3个平面上比如说我x,y,z这个点我可以投影在(x,y)(x,z)(y,z)三个平面上。可以把一个点投入到三个平面上对应的feature相加起来,我们就认为是这个对这个点在空间中一个特征的描述

然后我们还可以使用线形插值,比如说我投影到这个二维空间中点不是一个整数的点,那我们可以用一些线形插值的方式比如周围4个邻域上的特征来进行一个线性插值来实现无限的分辨率

三个平面之信息互补,比如下面这个例子对于一个这个房间我们如果只看这样的俯视图的话他会损失很多的信息。所以你就不知道这个桌子是到底有多高,但是他如果有另外两个平面辅助的话。我们其实是可以拼凑出来整个三维场景中更细粒度的一些信息这个也是TPV为啥要使用三平面来建模整个空间表示的一个动机

c18c9d25279bb194d49bd09638394010.png

具体而言个在特征表示之后

因为我们目的是要做一个纯视觉来做这样的一个三维语义占用的任务一个很核心的任务就是怎么把图像特征来转化到TPV特征

TPVformer整体的流程

使用一个图像的特征提取网络来提取图像特征,后面再加上FPN的结构,之后再通过一个TPV的construction的过程来得到TPV的这个这个特征表示那我拿到这个TPV的特征表示之后,后面就可以做一些不同的下游任务。比加一个分类的头就可以做三维语义占有的任务。值得注意的是,这里对图像进行特征提取的网络是ResNet,主要是为了和之前的工作进行一个公平的比较。这个任务网络的head也用了一些比较简单的分类头,加了两层MLP就搞定了。至于怎么从图像特征到TPV特征的这个过程使用的两种注意力,下面会慢慢说来~(来看到这里大家可以先喝口水缓一下)

怎么得到TPV的表示

95ef04ccef6bc2379e42eefe44a437b5.png

最核心的一步就是怎么从图像特征转化得到TPV的特征。对于这一步的转化,TPV借鉴了BEV感知里边的一个比较有名的一个工作,BEVFormer(这里可以跳转回顾一下)matrix明仔:宵夜杂谈:BEVFormer治好了我的精神内耗!

与BEVFormer所提出的Spatial Cross-Attention的大致思路一致。因为TPV空间中不是每一个query都能与图像特征的信息进行关联,所以为了避免浪费大量的计算能力

所以采用的做法就是在(x ,y)平面上的一个query,我们在三维空间中延着query可变的z轴均匀采些点,然后把这些点通过相机参数,给投影到图像的平面上。

还有一种是hybird-attention,就是对于每一个query,都希望可以在邻域之间进行交互,比如自己平面里边,与的周围3x3的邻域范围的query进行交互。除此之外,hybird-attention其实还有一个目标,就是希望三个平面可以进行相互的关联。同样是利用平面中可变的轴,将三个平面的信息进行相互的投影,从而减少计算量。三个平面的交互对整个TPV空间表达是有积极意义的。

值得注意的是,在网络中,采用了三层的cross-attention和两层的hybird-attention

缺数据集

79a973021d4db8f150e4116c0177c25c.png

因为当时是做这个任务比较早,当时其实还是没有这样的一个数据集,也就没有这种环视场景的标注,更没有办法提供有效的监督信号。没有带语义的体素标注信息,也就是没有一个标注告诉我们,这个点是空的,这个点是车,这个点是行人。但是由于激光雷达,采集时候的分辨率的问题,可能有些体素是非空的,但是没有标记到,所以也在这个工作中当空进行处理。

只能说受制于数据集,在这个工作中只能无视这些误差,将没有点的体素都认为空,进行操作,但是值得欣慰的是效果也还是可以

结果分析

同时期与特斯拉进行比较

总体来说,即使是在不同量级的比试,但是很多地方是可以进行一番较量的。(比如说对于显卡的消耗,还有训练的时间,而且对于资源的消耗更少)

19de5696d356fe735c4bcb8ad5cbf286.png 705d436adede99336e69b477fe02accb.png d9b9217c663b691081299c32da12333d.png

最后一个比较核心的就是从监督信号对比可以看到他们的监督信号就是这样一个离线的一个稠密监督,而TPVFormer就是用了一个稀疏的典型的标注就可以完成一些和稠密数据集差不多的效果。

论文中的对比实验展示

e139bd8f0daa9ba4d905a327857db634.png 16fcbf5fdb143f66cab5a977f759dd61.png 1ef60727b3fbf0ae8d57d5b224402450.png

1/5的计算量,就可以达到一致的性能。

db18049fe8743d1c6e2bbf661a83adc1.png
分布外以及小物体都有了很明显的提升

小物体和分布外也可以取得的更好的效果!

a8c397ac165cbf48bd6275b79ef56f54.png
更稠密的预测结果
eb620a3f2c32d30ac1552b970b0a0631.png
因为可以无限分辨率,所以在根据预测的实时性效果,来调整图像的分辨率。
f4895fef5753a618246b78f39a923d2f.png
参考之前的工作,进行使用了两个loss
88b2642471c09cfea24a48e907365d77.png
要注意的是这里的Voxel不是新的VoxelFormer

未来的展望

对于三维的占有图进行可视化后,发现对于小物体和行人的预测不太好。(监督信号的使用有误,占有预测过于稀疏,与点云的数据的线图产生了一致的分布)提供更好的benchmark。

surround0cc,通过多个点云叠加,实现稠密的标注

OpenOccpany、3D Occupany提供数据集和指标

做一个通用标准的benchmark,将现在的指标和数据集进行一个充分实验和统一。同时尽可能的实现整体架构的模块化,方便使用。同时可以将以前的BEV都进行扩展。

491495be7ac0c62b6cbe6db358cc2c7d.png 962b89cbd01c40d3219a97e3801cbcc5.png b0d3a6680849c3f7e95b3fe692cea14a.png 24965af0bbf94cd22b984e481388ca2a.png

总结

文章总结

这是一个非常完整的研究逻辑链路,通过对于现有问题的总结非常清晰。这也是为啥我今晚宵夜和大家谈谈的问题。其实我们可以理解为是Nerf+BEV的工作,扩展了BEV的可能性。通过新设计(魔改)的attention打通了Nerf与BEV之间的壁垒,之后意外的扩展了模型的许多特性,延伸了很多的可以发挥想象力的方向。这类型的方法其实对于许多多视图的工作都由很多很棒的启发,我相信大家已经开卷了吧。但是因为这个工作其实对于数据的要求比较高,其实壁垒更多也是像作者说的一样,是在监督信号上。所以其实要想有更好的参出,就要尽可能的摆脱对于监督信号的依赖。或者通过一些手段对当前的信息进行补全处理

升华

一起开始还能非常的诙谐幽默,但是写着写着,确实是没有办法用一种比较轻松的语气把这个故事讲完了。其实在大模型不断冲击的今天,其实大家都放弃了思考,很明显也包括了我朋友,但是我其实清晰的知道,我朋友只考虑了BEV,他没有意识到深度信息上的差距,没有尝试拓展出其它的平面,更没有和其它平面进行有效的关联!

① 全网独家视频课程

BEV感知、毫米波雷达视觉融合、多传感器标定、多传感器融合、多模态3D目标检测、点云3D目标检测、目标跟踪、Occupancy、cuda与TensorRT模型部署、协同感知、语义分割、自动驾驶仿真、传感器部署、决策规划、轨迹预测等多个方向学习视频(扫码学习)

641bf4d1e7cd07610626b15ec4fce8d7.png 视频官网:www.zdjszx.com

② 国内首个自动驾驶学习社区

近2000人的交流社区,涉及30+自动驾驶技术栈学习路线,想要了解更多自动驾驶感知(2D检测、分割、2D/3D车道线、BEV感知、3D目标检测、Occupancy、多传感器融合、多传感器标定、目标跟踪、光流估计)、自动驾驶定位建图(SLAM、高精地图、局部在线地图)、自动驾驶规划控制/轨迹预测等领域技术方案、AI模型部署落地实战、行业动态、岗位发布,欢迎扫描下方二维码,加入自动驾驶之心知识星球,这是一个真正有干货的地方,与领域大佬交流入门、学习、工作、跳槽上的各类难题,日常分享论文+代码+视频,期待交流!

522989a2929a851bff0280192b369d99.png

③【自动驾驶之心】技术交流群

自动驾驶之心是首个自动驾驶开发者社区,聚焦目标检测、语义分割、全景分割、实例分割、关键点检测、车道线、目标跟踪、3D目标检测、BEV感知、多模态感知、Occupancy、多传感器融合、transformer、大模型、点云处理、端到端自动驾驶、SLAM、光流估计、深度估计、轨迹预测、高精地图、NeRF、规划控制、模型部署落地、自动驾驶仿真测试、产品经理、硬件配置、AI求职交流等方向。扫码添加汽车人助理微信邀请入群,备注:学校/公司+方向+昵称(快速入群方式)

dc9ee996653e14870fb49da9446264e2.jpeg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值