自动驾驶~BEV感知
本文转载于大佬~~
这也可能成为当前最长的文章系列之一。从另一个角度来看待这个问题时,请注意以下几点:一方面观察到将分割大模型应用于小模型可以获得显著提升效果所需的时间较长;另一方面回顾起前期对自动驾驶领域的贝 V 算法进行了长时间地深入研究与探索之后也应当及时进行知识梳理与系统规划以更好地把握整体工作脉络。
许多事情都紧密相连,并且都需要做出选择。
比如将大模型拆解到小模型上能否带来性能提升?效果提升所需投入与产出是否平衡?如果提升空间不大,则是否有继续推进的价值?是在另辟蹊径还是继续深入探索?这些探索能获得多少支持资源?可能需要更多的资源支撑。
关于BEV预研何时能够落地的问题?What's the potential of turning these papers into practical outcomes?What can these outputs potentially yield?
其实在自动驾驶领域中存在一个较为广泛的概念叫做behavioral vision system(BVS),其中"behavioral"即行为感知层通常采用的是基于top-down和bottom-up相结合的方式进行目标检测;在具体实现上可将其划分为全视距感知系统、基于激光雷达的数据融合系统以及多源感知平台等多种架构形式;就感知数据源而言主要包括全视距激光雷达(LIDAR)、视觉摄像头以及两者的协同工作模式等
其实在自动驾驶领域中存在一个较为广泛的概念叫做behavioral vision system(BVS),其中"behavioral"即行为感知层通常采用的是基于top-down和bottom-up相结合的方式进行目标检测;在具体实现上可将其划分为全视距感知系统、基于激光雷达的数据融合系统以及多源感知平台等多种架构形式;就感知数据源而言主要包括全视距激光雷达(LIDAR)、视觉摄像头以及两者的协同工作模式等
这也存在诸多观点,在公司项目实施中选择的技术路线、所采用的传感器类型以及基于哪一个平台开展工作等具体方案均会对后续实施中的相关算法提出特定要求。即使是在各种现实考量下取得最优效果的算法也不一定能满足所有需求;即使性能指标较高的算法也可能无法直接应用
就先简单说一下,也给大家share一下自己的一些paper list:
camera bev :
Grip, Throw, Capture: Capturing and Encoding Visual Data across Diverse Imaging Systems via Implicit Depth Estimation in 3D
该方法在纯视觉BEV领域具有里程碑意义,在后续的文章中但凡需要用到将二维图像特征提升到三维空间并拍平到BEV网格上的操作都会用到其提出的Lift-Splat机制。代码编写非常直观简洁(shoot部分负责路径规划),虽然未展示具体的实现细节但整体逻辑清晰明了。(图示展示了各个视锥如何被拍平至栅格化的BEV网格上)

尽管作为首个版本不可避免地存在一些问题。主要问题集中在两个方面:第一,在splat(平方根)过程中计算开销较大;第二,在深度估计环节未能采用真实深度作为监督信号进行训练学习,在远处的表现相对较差,在性能上与当前的一些新算法相比仍有不足。然而这些缺陷并未削弱其在bev(鸟瞰图)算法中的重要地位
闲话:我也曾对LSS进行过调优的经历。扯淡一下吧大家不妨关注一下我之前发布的相关文章哦简单来说呢就是想着能想想看能不能想想办法把Nuscenes leaderboard这个榜单给想想搞掉掉掉(pun not intended),既对公司发展也有助于自身成长嘛所以决定从LSS入手来做些研究。那时候觉得它的plugin-and-play特性还挺不错的——得益于LSS下的贝叶斯估计(BEV)算法已经有很多现成实现可用呢如果能在这些基础算法上做出一点改进的话那么就能给所有依赖LSS模块的应用带来小小的提升这对于有意义的事情来说确实是值得探索的方向呀!至于后面的故事……呃……那就暂且不提了吧~毕竟这也算是工作之余的一点酸甜苦辣啦!
一个是对代码的解读
一个是对LSS做改进的nuscenes sota
一个是我之前搞得nuscenes 深度图
2. M2BEV: 基于多摄像头的一致鸟瞰图表示法下的三维检测与分割
点评:这篇评论指出它是一篇未提供开源代码的文章,在技术路径上与LSS相似,在三维贝V空间中的主要研究内容集中在将二维信息升维至三维贝V空间中。该方法基于沿相机射线方向假设各体素处的深度变化呈现均匀性这一前提条件,在实验结果上表现出更好的收敛性。相较于LSS方法,在实验结果上表现出更好的收敛性。相较于LSS方法,在实验结果上表现出更好的收敛性。
这里是一个关键点在于,这篇文章基于射线在深度上的均匀分布假设,在相机射线上所有体素均对应于二维空间中P中的单个像素相同的特征属性。这一假设带来的优点在于通过减少学习参数数量来提升计算效率和存储性能;然而相反地,在LSS方法中采用的是非均匀深度分布特性。

3. BEVDet: outstanding performance in multi-view 3D object detection in bird's-eye view
点评:作为后起之秀的LSS算法(Light Scattering Spectroscopy),其创新之处虽显简单直接但确实在技术细节上有诸多值得借鉴之处。相较于先前研究主要集中在分割问题上这项工作则聚焦于检测任务展开深入研究由鉴智机器人团队完成这项研究工作后续研究中不断出现了一系列优化版本与新进展尽管如此在这一领域中‘棱台求和’的相关技术仍受到广泛关注并不断被优化提升
题外话(+1):算作清华背景的创始人也不少,在大约21年后的半年期间有过一面的机会吧?那时候他们只是初创期团队,并未发展到几百人规模呢?遗憾的是当时自己也比较年轻,并没有找到合适的人选。后来回头看来他们确实做出了许多具有重要意义的工作呀!点赞!不过如今在自动驾驶领域的发展现状相对平缓呀……大家也都较为艰难地度过了难关呢!

这里给大家放一下bevdet系列的发展历程:

bevdet生成之后, 其中最突出的是bevdet4d (BEVDet4D: Exploit Temporal Cues in Multi-camera 3D Object Detection)这一技术. 主要通过引入时间序列, 将过去帧与当前帧的特征进行融合, 从而显著提升检测精度. 这一创新之处在于: 在特征融合过程中, bevdet4d相较于bevdet, 主要在于它保留了过去帧中的中间bev特征, 并通过精确对齐和拼接的方式实现特征的有效结合. 这样一来, bevdet4d便能够通过对比两个候选特征来获取时间线索, 同时仅需微不足道的计算增量即可完成任务简化. 具体而言, bevdet4d通过对自身运动及时间因素的有效去除, 简化了速度预测的任务. 这种设计使得bevdet4d能够在速度估计上实现更高精度的同时, 减少了速度误差. 此外值得注意的是: 在小模型测试中发现, mAP值有所提升主要是因为小分辨率难以覆盖50米以上的区域; 而历史帧则为检测提供了重要的线索信息.
在往后就是bevpoolv2专注于lift-splat的优化工作,并通过预处理技术来提高计算效率。这一技术实现了从4.6到15.1倍的速度提升,并且有效降低了内存占用。这是一个堪称一项高阶的技术方案,值得点赞!对于工程化落地具有重要意义。

截至2023年12月日, bevdet系列最新进展为DAL, 即Detecting As Labeling:Rethinking LiDAR-camera Fusion in 3D Object Detection, 这种方法通过LiDAR与相机融合实现了三维物体检测, 在性能上均有显著提升.从整体来看, DAL的基本流程与bevfusion(mit版本)相似, 主要区别在于其在处理视觉信息时更加依赖雷达, 并特别强调了"模仿数据生成过程"这一关键步骤.具体而言就是, 它通过模拟数据生成机制来优化模型参数.当然这并不影响其优异的效果, 同时它还进行了许多细化工作.此外, 对未来的研究方向也持高度期待.
以下是DAL paper中的框架图:

4. BEVFormer: Extracting Bird's-Eye-View Representation from Multi-Camera Images by leveraging the power of spatiotemporal transformers
点评:基于Transformer架构与时空注意力机制的BEV感知方法在检测与分割任务中表现出色。其中包含了BEV查询、时空交叉注意力以及时序自注意力等创新性设计。需要注意的是,在此方法中所采用的两个注意力机制并非传统的Transformer架构,在深入了解整个流程的过程中确实花费了一些时间去理解和掌握。实现这一方法所需的代码相对而言较为复杂
另外一位读者可能也会对此感到好奇:或许可以从这一路径入手了解一下detr的发展脉络呢?在这一过程中,这里的bev类型的查询项是被随机初始化的。回想起来,在nvidia在2023年的cvpr挑战赛中曾提出过一种名为fb-bev/fb-occ的方法,在初始化策略方面有所改进后能够提升学习速度更快。

这篇内容取自论文。由于最初阶段将FB-_OCC用于网格占用计算,并未取得显著成果。随后采用BEV生成后得到的FB-BEV显示效果并不十分突出。此外,在实际应用中发现打榜操作并非专为产品化而设计。前向与反向投影(包括2D至3D和3D至2D)的过程速度较慢因而未能深入探讨相关技术细节。因此略过了这部分讨论。

之后还有一些其他的优化版本。例如 BEVFormer++ 和 bevformerv2 等等。然而由于团队力量不足 这个项目并没有延续下去 所以暂且介绍下 BEVFormerv2 的基本内容。这篇主要是没有公开开源…… paper 上明确表示想要开源 但尚未完成 所以也只能看看 idea;而 BEVFormerv2 仍然是一个值得探索的方向。
则是一篇技术性综述,由同一团队组成的参赛队伍在Waymo Open Dataset Challenge 2022中取得了优异成绩
5. BEVDepth: Obtaining Accurate Depth Information for Multi-View Three-Dimensional Object Detection
bevdepth以其独特性而备受关注的一篇文章

CVT:基于交叉视图的实时地图视图语义分割 Transformer模型
点评:前视图投影顶视图的原理是该领域研究的核心内容;通过transformer注意力机制实现跨视图分割技术。


GKT: Highly Efficient and Reliable 2D-to-BEV Representation Learning Based on Geometry-Guided Kernel Transformers
对核心代码
lidar det:
对于雷达来说,并不是特别必要做BEV(Bird's Eye View)。在使用雷达进行检测时通常有哪些范式?这个问题可能不太容易直接回答清楚。一种常见的做法是基于点进行处理(如PointNet和PointNet++),另一种是基于视角来进行处理(比如顶视图即为BEV),也可以是前视图或者其他视角的变化形式;还有一种方法是基于体素化的处理方式(如 voxels)。需要注意的是这些方法之间存在相互借鉴的地方,并非完全独立
1. pointpillar
点评:
2. centerpoint
该系统采用基于激光雷达的标准主干网络架构,并结合VoxelNet和PointPillars两种方法进行处理。该系统通过分析前后连续帧之间的物体运动速度信息,并利用贪心算法将这些帧进行连接以实现目标追踪功能。从而将3D物体跟踪问题转化为贪心匹配最近点的过程,并最终实现高效率与高准确度的结果。该系统已在nuScenes基准测试中展现出卓越的表现,并在Waymo开放数据集上的表现超越了现有单一模型方法的所有竞争者
以青出超越蓝色,则同样值得推荐;这也是一篇值得推荐的论文;目前仍在工业界中广泛应用;值得点赞!
fusion bev:
BEVFusion: Multi-task and multi-sensor fusion based on a unified bird’s-eye view representation
**

点评:bevfusion是一篇图像激光雷达融合的bev算法,支持同时检测和分割任务。在nuScenes detection task
榜单上有许多该方法的变体,从总体架构上来看基本方法很清晰,camera分支和lidar分支分别提取特征,然后转移到共享的bev空间下,再提取bev特征来做多任务,真可谓是大道至简。值得一提的是,bevfusion对于camera to bev 部分的优化做了不少工作,预计算部分减少了13ms,gpu计算间隔优化减少了498ms,真是把优化做到了极致,很多公司都做不到这样。

此外,从paper实验对比部分我们也能看出bevfusion的强大,对于许多想学习bev的工程师来说bevfusion真是一个很优秀的框架了,正如团队所说希望BEVFusion可以作为一个简单但强大的基线,启发未来多任务多传感器融合的研究。但遗憾的是,尽管团队针对速度做了很多工作但仍不能达到实时。(8.4 FPS) whaosoft aiot [http://143ai.com](http://143ai.com/ "http://143ai.com")
在实际的工程项目中,如果想要使用bevfusion最大的问题其实还是优化问题,因为作者的优化都是基于cuda是做的,一旦离开nvidia的平台很多地方会受到影响,这部分就需要针对不同平台来编写定制化的算子。

**2\. Cross Modal Transformer: Towards Fast and Robust 3D Object Detection
**

毫无疑问,在算法领域它始终处于不断进步与更新的状态之中。每一次新的算法出现往往展现出更高的性能与更强的优势;例如,在nuscenes这样的知名榜单上也能见到CMT的身影。既然如此,则不妨简单阐述一下CMT的核心理念吧——它确实展现了position encoding方面的卓越能力。
在图像处理中,将每个pixel先左乘内参矩阵的逆矩阵操作后进行外参矩阵相乘运算以转换至雷达坐标系,并再利用多层感知机(MLP)生成其位置编码

代码如下:这个参考点是可以学习的

主要操作即为此,在论文中对此进行了详细阐述。具体而言(bevfusion)是将两个模态转换至behind view(behind view, bev)空间后进行融合;(transfusion)则是在lidar特征层生成查询向量,并基于top-k的结果在图像特征层进行检索。(CMT)则通过直接与多模态特征交互并施加位置编码以实现对齐。该方法取得了显著的实验效果

Transformer-based fusion architecture: Resilient LiDAR and Camera Fusion System for Three-Dimensional Object Detection using Transformer Models.
**
点评:transfusion当然也是一篇不错的工作,而且除检测外还做了跟踪,当时在nuScenes跟踪排行榜上排名第一。一个主要的亮点是,使用了一种软关联机制,可以处理图像质量较差和传感器未配准的情况。这种机制使得模型能够自适应地确定从图像中获取何处和何种信息,从而实现了一种鲁棒且有效的融合策略。简单说就是利用cross-attention建立了激光雷达和图像之间的soft association。翻译一下论文就是:
(Spatially Modulated Cross Attention,SMCA)模块通过在每个查询的投影2D中心周围使用一个2D圆形高斯掩膜来加权交叉注意力。权重掩膜M的生成方式与CenterNet[66]类似,使用了以下公式:

当然他的问题在于如果图像质量极差,例如在照明条件较差的情况下,其性能可能会受到影响。由于使用了Transformer解码器,因此会增加计算复杂度和内存需求。(不过毕竟是fusion的bev跑实时确实不容易,更不用说之后的占用网格)
从上面对比的一系列表格也可以看出,bev相关的paper还是很多的,大家感兴趣可以随便找一篇相关文章,然后从对比表格中找到一连串同类型文章。此外,这篇博客也只是粗浅的写一些与我相关的见过的部分paper,也只是个开篇,等有空的时候会陆续再更新吧。
**Interesting thing**
写到这里了就再分享个自己觉得有趣的事情,那就是有一件看似很反直觉的事情,单从fusion bev的三个算法来看cmt明显性能不错,速度也可以,其次是bevfusion,最后是transfusion。但如果去看这三者的github就会发现,最好的cmt其实是受关注最少的,transfusion是fork最多的,bevfusion是star最多的。以下数据截止到2023年12月27日.
Transfusion 1.4k fork,539 star
CMT 30 fork,259 star
bevfusion 322 fork,1.8k star
