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

目录

    • 前言
    • 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.mzph.cn/news/212796.shtml

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

相关文章

基于Spring+Spring boot的SpringBoot在线电子商城管理系统

SSM毕设分享 基于SpringSpring boot的SpringBoot在线电子商城管理系统 1 项目简介 Hi,各位同学好,这里是郑师兄! 今天向大家分享一个毕业设计项目作品【基于SpringSpring boot的SpringBoot在线电子商城管理系统】 师兄根据实现的难度和等级…

高云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核可用) 以下根据官方…

vue3中关于echars的使用

今天介绍一个好用的插件echars&#xff0c;一个可视化插件Apache ECharts 一、使用步骤 1、安装 npm install echarts --save 2、导入 import * as echarts from echarts 3、正式使用 echars的使用非常的简单&#xff0c;直接点击官网有现成的代码的可用 代码示例 <t…

微服务——服务保护Sentinel

雪崩问题 在单体项目里面&#xff0c;如果某一个模块出问题会导致整个项目都有问题。 在微服务项目里面&#xff0c;单独一个服务出问题理论上是不会影响别的服务的。 但是如果有别的业务需要调用这一个模块的话还是会有问题。 问题产生原因和解决思路 最初那只是一个小小…

ChatGPT 应用开发(一)ChatGPT OpenAI API 免代理调用方式(通过 Cloudflare 的 AI Gateway)

前言 开发 ChatGPT 应用&#xff0c;我觉得最前置的点就是能使用 ChatGPT API 接口。首先我自己要能成功访问&#xff0c;这没问题&#xff0c;会魔法就可以本地调用。 那用户如何调用到我的应用 API 呢&#xff0c;我的理解是通过用户能访问到的中转服务器向 OpenAI 发起访问…

成都工业学院Web技术基础(WEB)实验四:CSS3布局应用

写在前面 1、基于2022级计算机大类实验指导书 2、代码仅提供参考&#xff0c;前端变化比较大&#xff0c;按照要求&#xff0c;只能做到像&#xff0c;不能做到一模一样 3、图片和文字仅为示例&#xff0c;需要自行替换 4、如果代码不满足你的要求&#xff0c;请寻求其他的…

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 内侧…

C语言动态内存经典笔试题分析

C语言动态内存经典笔试题分析 文章目录 C语言动态内存经典笔试题分析1. 题目一2. 题目二3. 题目三4. 题目四 1. 题目一 void GetMemory(char *p){p (char *)malloc(100);} void Test(void){char *str NULL;GetMemory(str);strcpy(str, "hello world");printf(str)…

Qt设置类似于qq登录页面

头文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QWindow> #include <QIcon> #include <QLabel> #include <QMovie> #include <QLineEdit> #include <QPushButton>QT_BEGIN_NAMESPACE namespace Ui { class…

数据分析基础之《numpy(2)—ndarray属性》

一、ndarray的属性 1、属性方法 属性名字属性解释ndarray.shape数组维度的元组&#xff08;形状&#xff09;ndarray.ndim数组维数ndarray.size数组中的元素数量ndarray.itemsize一个数组元素的长度&#xff08;字节&#xff09;ndarray.dtype数组元素的类型使用方法 数组名.…

大数据技术8:StarRocks极速全场景MPP数据库

前言&#xff1a;StarRocks原名DorisDB&#xff0c;是新一代极速全场景MPP数据库。StarRocks 是 Apache Doris 的 Fork 版本。StarRocks 连接的多种源。一是通过这个 CDC 或者说通过这个 ETL 的方式去灌到这个 StarRocks 里面&#xff1b;二是还可以去直接的和这些老的 kafka 或…

03-详解Nacos注册中心的配置步骤和功能

Nacos注册中心 服务注册到Nacos Nacos是SpringCloudAlibaba的组件也遵循SpringCloud中定义的服务注册和服务发现规范,因此使用Nacos与使用Eureka对于微服务来说并没有太大区别 主要差异就是依赖不同,服务地址不同 第一步: 在父工程cloud-demo模块的pom.xml文件中引入Spring…

nlkt中BigramAssocMeasures.pmi()方法的传参和使用

这个问题找遍全网没看到详细的介绍&#xff0c;最后用读代码数学公式的方法才理解怎么用。 BigramAssocMeasures.pmi 作用&#xff1a;计算x和y的互信息&#xff08;互信息是什么我就不科普啦&#xff09; 这里有个误区刚开始我以为是计算两个词之间的依赖程度&#xff0c;但…

flstudio21.3.2304高级版水果编曲音乐软件

flstudio高级版是一款适用于广泛领域的音频编辑软件。它支持多通道混音器和VST插件&#xff0c;包括数百种乐器和效果插件。它还为您提供了一个乐谱编辑器&#xff0c;需要对不同乐器的节奏进行必要的编辑。Flstudio具有许多内置电子合成声音&#xff0c;可提供更广泛的电子声音…

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

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

Spring 面向切面编程(AOP)

一、aop介绍 &#xff08;一&#xff09;前言 一般的后端开发流程是纵向开发&#xff0c;就是controller&#xff08;控制层&#xff09;->service&#xff08;业务层&#xff09;->mapper&#xff08;数据持久层&#xff09;&#xff0c;Spring采用动态代理技术可以在…

Wireshark添加自定义协议解析

最终效果如下&#xff1a; 参考文档&#xff1a;https://mika-s.github.io/topics/ 此参考文档中7个例子教我们如何编写lua脚本去识别我们自定义的协议 安装Wireshark https://www.wireshark.org/上下载安装包安装即可。我的安装路径是D:\Install\Wireshark&#xff0c;在W…

Leetcode—389.找不同【简单】

2023每日刷题&#xff08;五十五&#xff09; Leetcode—389.找不同 实现代码 char findTheDifference(char* s, char* t) {int len strlen(s);int len2 len 1;int a[26] {0};int b[26] {0};if(len 0) {return t[0];}for(int i 0; i < len; i) {int idx s[i] - a;…

HTML的img常见应用属性

1、src&#xff1a;指定图像的URL&#xff0c;即图像的路径。 2、alt&#xff1a;指定图像的替代文本&#xff0c;当图像无法显示时&#xff0c;会显示替代文本。 3、width&#xff1a;指定图像的宽度&#xff0c;可以使用像素值或百分比。 4、height&#xff1a;指定图像的…

【设计模式--创建型--建造者模式】

建造者模式 建造者模式概述结构结果优缺点使用场景 将上述案例改为链式调用结果 建造者模式 概述 将一个复杂对象的构建与表示分离&#xff0c;使得同样的构建过程可以创建不同的表示。 分离了部件的构建&#xff08;由Builder来负责&#xff09;和装配&#xff08;由Direct…