四. 基于环视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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【杂项】程序的执行目录和程序的当前目录

当32位应用程序运行时,系统将为它分配一个4GB的地址空间,加载模块会会分析该应用程序的输入信息,从中找到程序将要访问的动态链接库信息,在用户机器上搜索这些动态链接库,进而加载它们,搜索的顺序依次是 程…

基于C++11标准的Vector容器与多维数组编程规范学习

一、基本概念 泛型编程:所谓泛型程序设计,就是编写不依赖于具体数据类型的程序。C中,模板是泛型编程的主要工具。泛型程序设计的主要思想是将算法从特定的数据结构中抽象出来,使算法成为通用的、可以作用于各种不同的数据结构。以…

Vue3 使用图片涂鸦插件

一、安装插件 npm i toast-ui/vue-image-editor npm i tui-code-snippet npm i tui-image-editor Image-editor | TOAST UI :: Make Your Web Delicious! 官网介绍说是“凭借简单和美观的完美结合,图像编辑器是一个功能齐全的编辑器,非常适合日常使…

kafka入门(四):消费者

消费者 (Consumer ) 消费者 订阅 Kafka 中的主题 (Topic) ,并 拉取消息。 消费者群组( Consumer Group) 每一个消费者都有一个对应的 消费者群组。 一个群组里的消费者订阅的是同一个主题,每个消费者接收主题的一部分分区的消息…

基于SSM+JSP网上订餐管理系统(Java毕业设计)

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

原来JMeter 分布式执行原理这么简单,为什么没有早点看到呢!

在使用 JMeter 进行性能测试时,如果并发数比较大(比如项目需要支持 10000 并发),单台电脑(CPU 和内存)可能无法支持, 这时可以使用 JMeter 提供的分布式测试的功能,使用多台测试机一…

当初为什么选择计算机-希望一直干下去

还记得当初自己为什么选择计算机? 当初你问我为什么选择计算机,我笑着回答:“因为我梦想成为神奇的码农!我想像编织魔法一样编写程序,创造出炫酷的虚拟世界!”谁知道,我刚入门的那天&#xff0…

LLMs 应用程序的构建利器:LangChain 助您驰骋 AI 世界 | 开源日报 No.100

langchain-ai/langchain Stars: 67.9k License: MIT LangChain 是一个旨在通过组合性来构建 LLMs 应用程序的库。它可以帮助开发者快速将 LangChain 应用程序部署到生产环境,同时提供了统一的开发平台,用于构建、测试和监控 LLM 应用程序。该项目主要功…

Bypass open_basedir

讲解 open_basedir是php.ini中的一个配置选项,可用于将用户访问文件的活动范围限制在指定的区域。 假设open_basedir/var/www/html/web1/:/tmp/,那么通过web1访问服务器的用户就无法获取服务器上除了/var/www/html/web1/和/tmp/这两个目录以外的文件。…

【数据结构】——排序篇(下)

前言:前面我们的排序已经详细的讲解了一系列的方法,那么我们现在久之后一个归并排序了,所以我们现在就来讲解一下归并排序。 归并排序: 归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法…

分类预测 | SSA-HKELM-Adaboost麻雀算法优化混合核极限学习机的数据分类预测

分类预测 | SSA-HKELM-Adaboost麻雀算法优化混合核极限学习机的数据分类预测 目录 分类预测 | SSA-HKELM-Adaboost麻雀算法优化混合核极限学习机的数据分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.SSA-HKELM-Adaboost麻雀算法优化混合核极限学习机的数据分类…

Kubernetes -Kubernetes中的Network组件

Network是Kubernetes体系中的重头戏,相比于其它组件来说也比较难,因为Kubernetes中所有的Pod或者服务之间一定是需要进行网络通信的,如果不能解决网络通信的问题,那可以说整个Kubernetes体系中的Pod是没有灵魂的。 所以必须要把N…

dlib是什么?

dlib C Libraryhttp://dlib.net/ dlib是什么? Dlib is a modern C toolkit containing machine learning algorithms and tools for creating complex software in C to solve real world problems. It is used in both industry and academia in a wide range of…

面试官:性能测试瓶颈调优你是真的会吗?

引言:性能瓶颈调优 在实际的性能测试中,会遇到各种各样的问题,比如 TPS 压不上去等,导致这种现象的原因有很多,测试人员应配合开发人员进行分析,尽快找出瓶颈所在。 理想的性能测试指标结果可能不是很高&…

小目标检测模型设计的一点思考

1. 小目标的特性 目标之间的交叠概率比较低,即使有交叠,其IoU多数情况下也是比较小的 AI-TOD Tiny Person Dateset 小目标自身的纹理显著度有强弱区别,但是总体来说纹理特征都较弱,很多时候需要借助一定的图像上下文来帮助确认 …

SpringBoot 官方脚手架不再支持Java8和Java11

Spring 官方脚手架不再支持初始化 Java8 和 Java 11 项目,目前仅支持初始化Java17 和 Java21 项目。 阿里巴巴Spring脚手架支持初始化Java8、Java11、Java17、Java19 的项目,不支持初始化Java21的项目。

一文搞懂Lombok Plugins使用与原理

目录 一文搞懂Lombok使用与原理 1.前言2.什么是Lombok3. IntelliJ安装Lombok3.1通过IntelliJ的插件中心安装3.2在项目中使用Lombok Plugins 4.Lombok 注解大全说明4.1POJO类常用注解4.2其他注解 5.Lombok常见问题6.总结7.参考 文章所属专区 超链接 1.前言 2.什么是Lombok Lo…

WPS宏批量修改图片尺寸

致谢 感谢网络各位大佬的分享,可以让我快速的学习这块内容。 JS宏代码

上班必备——项目部署环境

大家都知道,互联网行业有很多的岗位,前端,后端,产品,测试,ui等。 ui,产品和测试的同事在前端开发的过程中,都会时刻关注着进度,是要看页面效果的,这个时候怎…

MIT线性代数笔记-第28讲-正定矩阵,最小值

目录 28.正定矩阵,最小值打赏 28.正定矩阵,最小值 首先正定矩阵是一个实对称矩阵 由第 26 26 26讲的末尾可知正定矩阵有以下四种判定条件: 所有特征值都为正左上角所有 k k k阶子矩阵行列式都为正( 1 ≤ k ≤ n 1 \le k \le n …