四. 基于环视Camera的BEV感知算法-环视背景介绍

news2025/3/6 19:15:10

目录

    • 前言
    • 0. 简述
    • 1. 环视背景介绍
    • 2. 环视思路
    • 3. 主流基于环视Camera的算法详解
    • 总结
    • 下载链接
    • 参考

前言

自动驾驶之心推出的《国内首个BVE感知全栈系列学习教程》,链接。记录下个人学习笔记,仅供自己参考

本次课程我们来学习下课程第四章——基于环视Camera的BEV感知算法,先来了解下环视的背景

课程大纲可以看下面的思维导图

在这里插入图片描述

0. 简述

从我们第四章开始我们会对环视 BEV 感知算法去进行详细的讲解,那环视背景我们主要分为三个模块,4.1 到 4.3 节是主要针对背景介绍,第一个是环视背景,我们为什么要做环视,环视有什么优势;另外一个是对环视思路的一个讲解;另外第三个是我们本次课程当中涉及到的一些环视 Camera 算法的讲解

1. 环视背景介绍

OK,我们先看一下环视是什么,我们说的 BEV 环视,环视是什么,那我们在讨论环视之前,先来了解一下为什么需要摄像头?

与其他传感器相比,相机具有最密集的信息,所以说信息非常密集非常丰富那从中提取到信息也是非常具有挑战性的一件事情,但同时它的信息也是非常有用的,那所以我们要用环视的相机的设置来去做我们自动驾驶任务。另外一个是成本的考虑,与其他的利用激光雷达的传感器相比,相机也是很便宜的,而且相机在探测长距离物体方面它的性能往往表现是比较好的,那提取完环视信息之后可以做一些视觉的任务,比如像道路探索,比如像交通灯的状态,行车标志等等,像这些东西是需要视觉去感知的,像普通的激光雷达是很难做到这些事情的

那我们知道我们说的环视是一种环绕摄像头的设置,那摄像头的数量可能会因为不同的自动驾驶公司产生一点点的区别,通常情况下来讲每辆车一般是 6-12 个摄像头,可能需要这些多个相机覆盖车辆周围的 3D 场景,那如果只有单一相机会出现什么问题呢,比如我们可能只有前视角的图像,那前视角的数据是一个比较局限的数据,如果利用单一视角的数据去做后续的一系列的感知任务的话,那对我们的安全性是具有严重的挑战的

在这里插入图片描述

那另外一个我们再看一个事情,我们说的环视传感器是我们相机的本身硬件带来的优势,那环视为什么要做 BEV 呢?那俯视空间跟环视传感器是什么关系呢?鸟瞰图其实是非常适合环视的一种特征表达方式,我们在鸟瞰图中使用 3D,为什么呢,因为它与 360° 的传感器融合会很自然

我们举个简单例子,比如像 LiDAR,比如像 Radar,我们在多视角场景下怎么样把这个多视角的数据统一到一个特征空间上面去做融合判断呢,哪个空间很适合做这个事情呢,俯视空间很适合做这个事情,BEV 当中操作可以很好的模拟动态场景的时间一致性,与普通的透视视图相比,透视视图就是所谓的相机视角,BEV 中的运动补偿就是平移,还有旋转的建模,是要简单很多的。

那比如在 BEV 视图当中车辆自身的这个姿态变化取决于运动,那我们如果在透视视图当中,普通的相机视角下如果车辆自身发生变化的话,它的姿态变化取决于什么呢,取决于深度和运动,所以说在 BEV 空间当中考虑车辆的姿态变化是一个相对简单的事情。另外一个在 BEV 视图当中我们也讲过目标是具有尺度一致性的,而透视图不是比如前视图物体离我们前视图越近,它看起来越大,离我们相机视角越远看起来越小,那所以透视图具有尺度变化差异,同一个物体可能产生特征上的差异性,那这就给我们后续的检测会带来一些困难

然而 BEV 视图不是,BEV 视图下同类目标尺度差异我们可以认为近似没有,小轿车应该都差不多大,它的差异也只是微小差异,所以我们说 BEV 视图学习特征尺度一致性会变得更加容易

那如果构造出一个比较好的 BEV 空间的话对后续的下游任务也是更好的,后续下游任务有哪些呢,比如说像运动预测,运动规划,那在 BEV 视图下有一个通用坐标系去处理这个事情,那所以我们说环视的优势就在于它可以利用 360° 的相机数据来看我们的 3D 场景,那 BEV 环视的优势呢,是将多视角数据可以统一的融合到 BEV 视角下去做后续一系列的处理任务,那它难点在哪呢,难点就是我们怎么把环视数据统一的都能映射到 BEV 空间上面,那这是任务的难点。

2. 环视思路

那前面我们学习了一个简单介绍,我们再来看一下环视思路是什么,那大家现在都是怎么做环视的呢

在这里插入图片描述

博主这里以 2023/12/10 当天的 nuScenes 榜单为例,模态选的是 Camera 是相机模态,也就是纯相机方案,排名是按照 mAP 指标排名的,那 mAP 应该是越高越好的一个指标。我们从这些排名靠前的算法名称来看,因为名称是能体现算法的主体思路的,入眼的第一个词是什么,是 BEV,那 BEV 也是我们课程的核心内容;第二个词是什么呢,是 Former,Former 是什么,那我们比较直观的理解就是 Transformer,属于什么呢,属于技术方法

所以环视算法就目前来看使用特征空间最好的是什么呢,是 BEV 空间,通用的技术模块是什么呢,是 Transformer,那我们榜单上面的做法大家都是这么做的。OK,我们就这里简单看一下

3. 主流基于环视Camera的算法详解

下面我们结合课程当中的主要方法对各种环视算法进行一个简单介绍,给大家介绍一下我们课程涉及到的一些方法它们的思路是什么,是涉及哪个方面的,那我们按照大纲的顺序一个一个看,那详细的算法是怎么实现的呢,后续在详细的章节中我们再展开

我们说 BEV 感知算法的核心是什么,是 BEV 特征空间的构建,我们怎么把环视图像输入转换到 BEV 上是我们算法的核心内容,我们这里要说的第一个算法叫 DETR3D,它的框图如下所示:

在这里插入图片描述

DETR3D 从名字上看很明显是 DETR 从 2D 到 3D 领域的延伸,那 DETR3D 怎么构建 BEV 特征的呢,它如何去生成我们要的 BEV 表征呢,其实 DETR3D 特征构建围绕的是 Query 展开,通过 Object Query 找到对应的 3D Reference Points 去利用 Reference Points 到 2D 图像上采特征,通过 3D 到 2D 这样取特征的方式得到目标的 BEV 表征,后续我们会对这个表征不断地迭代不断地优化,然后输出最终的检测结果,那我们刚刚说的流程其实就是我们在第二章中提到的从 3D 到 2D 的流程,是 DETR3D 中做的

我们再说第二个 BEVFormer,它的框图如下所示:

在这里插入图片描述

BEVFormer 输入的同样是多视角图像,输出的是分割和检测的结果,BEVFormer 想建立的 BEV 表征中依赖什么呢,我们看到上图中有两个模块,一个模块是 Temporal Self-Attention 时序注意力,一个模块是 Spatial Cross-Attention 空间注意力。这意味着 BEVFormer 它在构建 BEV 空间的时候它需要既关注当前时刻的 BEV 特征也要关注到我们历史 BEV 特征,那所以它这里历史 BEV 是作为时序信息引入到当前 BEV 表征生成当中的。那空间注意力什么意思呢,空间注意力融合的是跨视角的信息,不同视角其实对应的 3D 空间不同位置的表征嘛,图 (b) 中蓝色和绿色其实对应的是多视角的特征,那这样跨视角的融合我们叫空间融合

那所以 BEVFormer 它关注的并不是我们怎么拿特征,而是关注的是我们怎么样利用时序信息利用空间信息让我们的 BEV 生成得更好,有了更好的 BEV之后呢,我们是不是就可以得到更准确的检测结果了,那这就是 BEVFormer 的主要思路

我们再看第三个内容 BEVDet,它的框图如下所示:

在这里插入图片描述

BEVDet 它还有一个后续的延伸框架叫 BEVDet4D,那两个工作其实是一脉相承的,4D 其实是比普通的 BEVDet 这个框架多了一维信息,这个信息是什么呢,我们通常说 3D 空间是三维维度,4D 是啥意思,那就是额外添加了一维嘛,添加了时序维度,也就是说除了我们通用的空间维度之外呢,BEVDet4D 引入了时序维度所以叫 4D

那 BEVDet 它的一个整体流程其实非常简单,它对于输入的多视角图像先提取图像特征,然后将图像特征转换到 BEV 空间,再通过一个 BEV 编码然后输出后续的检测结果,所以 BEVDet 这个工作其实更偏向一个偏工程性的一个工作,那也就是说本身这个工作没有特别有创新的地方,那本身是没有设计出任何新的模型的,而是更关注于我们基于 BEV 去做 3D 检测的可行性,能不能使用 BEV 去做,是不是很实用,它关注的是工程性质上的一些应用,是通过一些成熟的框架来构建这个完整的 BEVDet 的一个模块

所以也给了我们一个启发,我们不一定要有非常好的 idea 才能发文章,往往业界更关注的是工程能力,实际的性能,那 BEVDet 也开源了一个 tensorRT 的版本,性能也非常强劲,也是比较推荐学习的,大家感兴趣的可以看看:https://github.com/LCH1238/bevdet-tensorrt-cpp

我们课程第四块内容是围绕 PETR 展开的,它的框图如下所示:

在这里插入图片描述

PETR 看名字我们可以知道它是 DETR 的延伸,我们知道 DETR 是 2D 目标检测,所以在位置编码的时候引入的是 2D 位置编码,输出的特征我们通常认为已经隐式的感知到了 2D 位置关系。那 PETR 做什么事情,我们需要处理的任务是 3D 检测任务,那所以我们如果仅仅使用 2D 位置编码肯定是不够的,所以 PETR 引入了 3D 位置编码,将 3D 坐标编码进多视角图像当中,我们从图中可以看到它有一个 3D 坐标生成器,通过 Encoder 网络将 3D 坐标编码到 2D 特征当中。我们认为这种隐式的对应关系可以让 2D 特征能够很好的感知到 3D 空间位置关系,也就是说输出的特征对 3D 空间位置是比较敏感的,我们位置一旦发生了变化,所对应的输出特征也会发生变化

所以隐式是什么意思,我们为什么一直强调隐式和显式,隐式的意思是说我们没有一个明确的监督信息,没有一个明确的提示,它对深度是一种隐式的学习,我们也不知道网络怎么做的,反正学得挺好,我们没有给明确的提示,但网络就是能学出来,所以我们一般把这种行为叫隐式

另外第五部分我们围绕 BEVDepth 展开,它的框图如下所示:

在这里插入图片描述

我们课程规划还是希望尽可能地覆盖全面,BEVDepth 从名称上看是给我们提供了一种不一样的 BEV 视角,它更关注什么呢,深度信息,那深度已经是我们强调的非常重要的概念了,在 2D 到 3D 的特征重构当中不可或缺,我们也讲过以往的深度怎么做,2D 到 3D 离散深度分布,2D 到 3D 还有连续的深度预测

那 BEVDepth 其实是属于离散的一个范畴,离散深度分布估计的范畴,但是它的不同点在于为了深度分布提供了显式的监督信息,那这个监督来源在哪呢,它这个监督是官方提供的标注嘛,其实不是,深度监督信息来源于对应的 3D 点云的投影,我们知道 3D 点云其实是包含了深度信息的,那这个深度信息其实是可以作为我们 2D 深度估计网络的监督使用的,用于辅助深度预测网络的训练,利用 3D 点云提供的深度信息作为监督帮助深度信息网咯学习得更好

所以总的来说,BEVDepth 这篇文章还是围绕一个如何预测更准确的深度展开

那我们最后一块叫 BEVDistill,它的框图如下所示:

在这里插入图片描述

BEVDistill 这个工作其实是给大家提供了一个完全不一样的看问题的视角,我们说现在的 LiDAR-based 的方法比 Camera-based 的方法性能要更好,那这个更好的信息来源是什么呢,那信息来源其实是因为本身 LiDAR 它的 3D 位置空间信息更好,那所以它塑造一个更好的 BEV 特征,那我们能不能将这个更好的 BEV 特征迁移到图像 BEV 上呢,图像 BEV 能不能从点云 BEV 上学习到这种更好的特征表达呢,那这就是 BEVDistill 考虑的核心内容

所以说 BEVDistill 通过这样的一个 Teacher 和 Student 学习蒸馏的模式,我们促使图像 BEV Featute 向点云 BEV Feature 学习到更好的特征表示。所以从另外的角度它也告诉我们一个道理,除了网络最终的相互竞争以外,我们还可以对中间特征还有中间预测集合去进行约束,利用特征我们可以使得图像特征向点云特征学习,通过预测集合的约束我们可以知道图像预测结果可以点云的预测结果学习,那如果学的好这个损失就小,学得差这个损失就偏大。通过这样的方式促使我们环视算法尽可能的在特征提取上在性能上可以逼近 BEV-LiDAR 的方法

以上是我们第四章涉及到算法的基本介绍,那我们最后一节会挑选 BEVFormer 作为实例代码来给大家讲解

总结

在这节课程我们主要对环视 BEV 感知算法进行了一个背景介绍,BEV 环视的优势在于可以将多视角的图像数据统一的融合到 BEV 视角下做一系列的任务,其难点在于如何把环视数据统一的映射到 BEV 空间上面。此外我们还简单介绍了课程接下来会讲解的一些主流的环视 Camera 的 BEV 感知算法,包括 DETR3D、BEVFormer、BEVDet、PETR、BEVDepth、BEVDistill 等等。

下一节我们会讲解具体的环视 BEV 感知算法 DETR3D,敬请期待😄

下载链接

  • 论文下载链接【提取码:6463】
  • 数据集下载链接【提取码:data】

参考

  • [1] Singh et al. Surround-view vision-based 3d detection for autonomous driving: A survey

  • [2] Wang et al. Detr3d: 3d object detection from multi-view images via 3d-to-2d queries

  • [3] Li et al. Bevformer: Learning bird’s-eye-view representation from multi-camera images via spatiotemporal transformers

  • [4] Huang et al. Bevdet: High-performance multi-camera 3d object detection in bird-eye-view

  • [5] Huang et al. Bevdet4d: Exploit temporal cues in multi-camera 3d object detection

  • [5] Liu et al. Petr: Position embedding transformation for multi-view 3d object detection

  • [6] Li et al. Bevdepth: Acquisition of reliable depth for multi-view 3d object detection

  • [7] Chen et al. Bevdistill: Cross-modal bev distillation for multi-view 3d object detection

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1300804.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Kafka Streams:深度探索实时流处理应用程序

Apache Kafka Streams 是一款强大的实时流处理库,为构建实时数据处理应用提供了灵活且高性能的解决方案。本文将深入探讨 Kafka Streams 的核心概念、详细原理,并提供更加丰富的示例代码,以帮助读者深入理解和应用这一流处理框架。 1. Kafka…

Redis,什么是缓存穿透?怎么解决?

Redis,什么是缓存穿透?怎么解决? 1、缓存穿透 一般的缓存系统,都是按照key去缓存查询,如果不存在对用的value,就应该去后端系统查找(比如DB数据库)。一些恶意的请求会故意查询不存在…

ELK简单介绍二

学习目标 能够部署kibana并连接elasticsearch集群能够通过kibana查看elasticsearch索引信息知道用filebeat收集日志相对于logstash的优点能够安装filebeat能够使用filebeat收集日志并传输给logstash kibana kibana介绍 Kibana是一个开源的可视化平台,可以为ElasticSearch集群…

【Spring教程25】Spring框架实战:从零开始学习SpringMVC 之 SpringMVC入门案例总结与SpringMVC工作流程分析

目录 1.入门案例总结2. 入门案例工作流程分析2.1 启动服务器初始化过程2.2 单次请求过程 欢迎大家回到《Java教程之Spring30天快速入门》,本教程所有示例均基于Maven实现,如果您对Maven还很陌生,请移步本人的博文《如何在windows11下安装Mave…

react.js源码二

三、调度Scheduler scheduling(调度)是fiber reconciliation的一个过程,主要决定应该在何时做什么?在stack reconciler中,reconciliation是“一气呵成”,对于函数来说,这没什么问题,因为我们只想要函数的运行结果&…

高云GW1NSR-4C开发板M3硬核应用

1.M3硬核IP下载:Embedded M3 Hard Core in GW1NS-4C - 科技 - 广东高云半导体科技股份有限公司 (gowinsemi.com.cn) 特别说明:IDE必须是1.9.9及以后版本,1.9.8会导致编译失败(1.9.8下1.1.3版本IP核可用) 以下根据官方…

【后端开发】Next.js 13.4:前端开发的游戏规则改变者!

自我介绍 做一个简单介绍,酒架年近48 ,有20多年IT工作经历,目前在一家500强做企业架构.因为工作需要,另外也因为兴趣涉猎比较广,为了自己学习建立了三个博客,分别是【全球IT瞭望】,【…

云计算大屏,可视化云计算分析平台(云实时数据大屏PSD源文件)

大屏组件可以让UI设计师的工作更加便捷,使其更高效快速的完成设计任务。现分享可视化云分析系统、可视化云计算分析平台、云实时数据大屏的大屏Photoshop源文件,开箱即用! 若需 更多行业 相关的大屏,请移步小7的另一篇文章&#…

浅析不同NAND架构的差异与影响

SSD的存储介质是什么,它就是NAND闪存。那你知道NAND闪存是怎么工作的吗?其实,它就是由很多个晶体管组成的。这些晶体管里面存储着电荷,代表着我们的二进制数据,要么是“0”,要么是“1”。NAND闪存原理上是一…

TCP为什么可靠之“重传机制”

TCP重传机制 TCP针对数据包丢失的情况,会通过重传机制解决,包括像超时重传、快速重传、选择确认SACK、D-SACK 超时重传 TCP会设置一个定时器,如果在发送数据之后的规定时间内,没有收到对方的ACK报文,就会触发重新发…

基于SpringBoot+JSP+Mysql宠物领养网站+协同过滤算法推荐宠物(Java毕业设计)

大家好,我是DeBug,很高兴你能来阅读!作为一名热爱编程的程序员,我希望通过这些教学笔记与大家分享我的编程经验和知识。在这里,我将会结合实际项目经验,分享编程技巧、最佳实践以及解决问题的方法。无论你是…

基于JavaWeb+SSM+Vue微信小程序的科创微应用平台系统的设计和实现

基于JavaWebSSMVue微信小程序的科创微应用平台系统的设计和实现 源码获取入口Lun文目录前言主要技术系统设计功能截图订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 源码获取入口 Lun文目录 1系统概述 1 1.1 研究背景 1 1.2研究目的 1 1.3系统设计思想 1 2相关技术…

Unity中Shader黑白阀值后处理效果

文章目录 前言一、我们先来PS看一下黑白阀值的效果二、使用step(a,b)函数实现效果三、实现脚本控制黑白阀值1、在Shader属性面板定义控制阀值变量2、把step的a改为_Value3、在后处理脚本设置公共成员变量,并且设置范围为(0,1)4、在Graphics.B…

Echarts 环形图配置 环形半径(radius) 修改文本位置(label) 南丁格尔图(roseType)

数据 const data [{ name: 华为, value: 404 },{ name: 小米, value: 800 }, { name: 红米, value: 540 }, { name: 苹果, value: 157 }]设置南丁格尔图 roseType: area设置标签位置 label: {show: true,position: center // center 中间展示 outside 外侧展示 inside 内侧…

案例026:基于微信小程序的原创音乐系统的设计与实现

文末获取源码 开发语言:Java 框架:SSM JDK版本:JDK1.8 数据库:mysql 5.7 开发软件:eclipse/myeclipse/idea Maven包:Maven3.5.4 小程序框架:uniapp 小程序开发软件:HBuilder X 小程序…

Vue 纯css方式实现自定义进度条组件

组件源码 <template><div><div class"bar" :style"{--precent: precent}"></div></div></template><script>export default {name: ProgressBar,props: {precent:{},},data() {return {}},methods: {}}</sc…

GoLong的学习之路,进阶,微服务之使用,RPC包(包括源码分析)

今天这篇是接上上篇RPC原理之后这篇是讲如何使用go本身自带的标准库RPC。这篇篇幅会比较短。重点在于上一章对的补充。 文章目录 RPC包的概念使用RPC包服务器代码分析如何实现的&#xff1f;总结Server还提供了两个注册服务的方法 客户端代码分析如何实现的&#xff1f;如何异步…

kali linux无法使用root打开vlc观看视频的解决办法

kali linux陆续装了几个视频播放器&#xff0c;都比较不够友好&#xff0c;无奈安装vlc,vlc安装方法就是 apt install vlc这个没什么好说的&#xff0c;多数源都集成这个著名软件了&#xff0c;kali linux打开闪退&#xff0c;终端下运行出现&#xff1a; VLC is not supposed…

【数学建模】《实战数学建模:例题与讲解》第七讲-Bootstrap方法(含Matlab代码)

【数学建模】《实战数学建模&#xff1a;例题与讲解》第七讲-Bootstrap方法&#xff08;含Matlab代码&#xff09; 基本概念习题7.31. 题目要求2.解题过程3.程序4.结果 习题7.51. 题目要求2.解题过程3.程序4.结果 如果这篇文章对你有帮助&#xff0c;欢迎点赞与收藏~ 基本概念…

软件设计师——计算机网络(二)

&#x1f4d1;前言 本文主要是【计算机网络】——软件设计师——计算机网络的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是听风与他&#x1f947; ☁️博客首页&#xff1a;CSDN主页听风与他 &#x1…