BEV-YOLO 论文学习

1. 解决了什么问题?

出于安全和导航的目的,自驾感知系统需要全面而迅速地理解周围的环境。目前主流的研究方向有两个:第一种传感器融合方案整合激光雷达、相机和毫米波雷达,和第二种纯视觉方案。传感器融合方案的感知表现鲁棒,但是成本高,所要面临的环境挑战不少,因此大规模部署不太现实。纯视觉方案只依赖于相机传感器做感知,成本低廉,可以持续迭代。因此,纯视觉方案可能是自动驾驶行业的终极方向。

在这里插入图片描述
目前,纯视觉领域的研究焦点就是如何生成环境 BEV 图,赋能车载感知系统。传统的方法受限于相机的角度,生成的感知范围有限,制约了实时决策所需的空间感知能力。BEV 方法通过提供丰富的环境信息,提升自动驾驶,从而在复杂场景中做到实时决策。人们通常用高精地图来得到道路布局、车道线和其它静态元素。在这些静态信息之上是各种动态元素(车辆、行人和其它物体),为实时导航提供了必要的信息。本文试图在车辆各相机画面的坐标和 BEV 图之间构造直接的空间对应关系。BEV 图的各画面取决于它是哪个相机采集的,如上图所示,车辆前视相机采集的画面肯定落入 BEV 的上半部分,后视相机的画面肯定落入 BEV 的下半部分。

在这里插入图片描述

2. 提出了什么方法?

本文提出了 YOLO-BEV,通过环视相机的画面生成出一个 2D BEV 的车辆环境。通过设置八个相机,每个相机负责 4 5 ∘ 45^\circ 45,该系统将获取的图像整合成一个 3 × 3 3\times 3 3×3 的网格形式,中间是空白的,提供一个丰富的空间表征。本文采用了 YOLO 检测机制,YOLO 具有速度快和模型简洁的优点。作者对检测头做了特殊的设计,将全景数据转换为自车的统一的 BEV 图。

概览

YOLO-BEV 使用相机矩阵来采集数据,利用 YOLO 的主干网络做特征提取。针对 BEV 输出设计了一个检测层和相应的损失函数。本文关键创新点就是相机布局的设计,无缝地匹配生成的 BEV。该布局包括八个相机的安装,每个负责 4 5 ∘ 45^\circ 45角,从而得到 36 0 ∘ 360^\circ 360的视角。然后用一个 3 × 3 3\times 3 3×3矩阵的布局做图像预处理,根据 YOLO 特征图产生相应的 BEV。

下图展示了这个想法,相机在 BEV 视角下和各个区域对齐。输出的合成图像与车辆自上而下的视角保持对齐,目的是提高目标检测和空间识别的准确性。此外,作者将画面矩阵最底下的一列图像做了 18 0 ∘ 180^\circ 180 的旋转,认为这样做更能匹配 BEV 的空间位置。

在这里插入图片描述

数据采集和预处理

nuPlan 数据集是自动驾驶领域非常重要的基准,包含了 1200 小时精心采集的高质量驾驶数据,场景涵盖了波士顿、匹兹堡、新加坡和拉斯维加斯的城区道路。它提供了多样化的驾驶场景和详尽的传感器数据,包括激光雷达、不同视角的相机、IMU 和高精度的 GPS 坐标。本文重点关注并优化自驾方案的计算效率,基于 nuPlan 数据集的八个相机的画面。

这些图像可以构建出一个 3 × 3 3\times 3 3×3画面矩阵,和 BEV 位置场景具有空间对应关系。为了生成可靠、准确的 ground-truth 数据,作者使用了一个直接的提取方法。nuPlan 数据集里的 tokens 是独一无二的,于是作者在输入图像和表示车辆位置的 BEV 坐标之间构建了一一对应的关系。本文的分析不包括行人和交通信号灯等信息,只考虑了车辆。这样,该方法可以加速计算过程,大幅度缩短获取有价值的结果的时间。

模型结构

本文模型基于 YOLO 架构构建,特征提取能力强、效率高。借鉴了主干和检测头的结构,模型将初始的 3 × 3 3\times 3 3×3 图像矩阵转换成一组丰富的多尺度特征图。这些特征图然后通过 CustomDetect 层做处理,实现准确的 BEV 目标定位。下图展示了该架构,它包括初始的 3 × 3 3\times 3 3×3 输入矩阵、主干网络和检测头,以及特殊设计的 CustomDetect 层。

CustomDetect 层包括 n l n_l nl层, n l n_l nl 与通道维度数组 c h = [ c h a n n e l 1 , c h a n n e l 2 , c h a n n e l 3 ] ch = [channel_1, channel_2, channel_3] ch=[channel1,channel2,channel3] 对齐。每一层 i i i都有一组卷积层。该序列卷积操作的数学表示如下:

Conv i , j = ReLU ( Conv2D ( X i , j − 1 , W i , j , b i , j ) ) , ∀ j ∈ { 1 , 2 , 3 } \text{Conv}_{i,j}=\text{ReLU}(\text{Conv2D}(X_{i,j-1}, W_{i,j}, b_{i,j})), \forall j\in \{1,2,3\} Convi,j=ReLU(Conv2D(Xi,j1,Wi,j,bi,j)),j{1,2,3}

其中 X i , j − 1 X_{i,j-1} Xi,j1表示第 i i i个检测层里第 j j j个卷积层的输入, W i , j , b i , j W_{i,j}, b_{i,j} Wi,j,bi,j表示相应的权重和偏置参数。使用了 ReLU 激活,为模型引入非线性。

前向计算时,将一组特征图输入 CustomDetect 层,每个特征图的维度都是 BatchSize × Channels × Height × W i d t h \text{BatchSize}\times \text{Channels}\times \text{Height}\times {Width} BatchSize×Channels×Height×Width。随后,将这些特征图变换为一组坐标和置信度得分张量。对于每个特征图 X i X_i Xi

Y i = Conv i , 3 ( Conv i , 2 ( Conv i , 1 ( X i ) ) ) Y_i = \text{Conv}_{i,3}(\text{Conv}_{i,2}(\text{Conv}_{i,1}(X_i))) Yi=Convi,3(Convi,2(Convi,1(Xi)))

Y i Y_i Yi包含了 BEV 下目标定位的关键信息,目标位置和置信度得分。这些数据会用生成的网格进一步做优化,与输入特征图 X i X_i Xi的空间维度对应。该模型不仅利用了 YOLO 的特征提取机制,也扩展了边框回归方法,更准确地定位目标。CustomDetect 层输出关键的参数,如 物体的 x , y x,y x,y 坐标、朝向角、置信度。然后会用一个动态构建的网格来进一步优化这些参数,与输入特征图的空间维度对齐。

在这里插入图片描述

网格补偿机制

CustomDetect 模块加入了一个网格补偿机制,用于优化预测的目标位置。该机制将相对坐标变换成一组富含全局信息、上下文相关的坐标,即相对于特征图的整体空间范围。

网格创建

对于每个检测层,记作 i i i,会初始化一个精心构建的网格 G i G_i Gi。该网格与 i i i层输出的特征图 F i F_i Fi维度一致。 G i G_i Gi的每个格子都有一个中心坐标 ( x c e n t e r , y c e n t e r ) (x_{center},y_{center}) (xcenter,ycenter)。这个格子在网格 G i G_i Gi里的笛卡尔坐标是 ( m , n ) (m,n) (m,n)

x c e n t e r = m + 0.5 width of  F i x_{center}=\frac{m+0.5}{\text{width of }F_i} xcenter=width of Fim+0.5
y c e n t e r = n + 0.5 height of  F i y_{center}=\frac{n+0.5}{\text{height of }F_i} ycenter=height of Fin+0.5

精度驱动的坐标修正

( x p r e d , y p r e d ) (x_{pred}, y_{pred}) (xpred,ypred) 表示网络预测的特征图 F i F_i Fi上某一格子的坐标。该预测坐标需经过一个复杂的修正过程,利用到 G i G_i Gi对应的格子的中心坐标,

x a d j u s t e d = ( x p r e d 2 × width of  F i ) + x c e n t e r x_{adjusted}=(\frac{x_{pred}}{2\times \text{width of }F_i}) + x_{center} xadjusted=(2×width of Fixpred)+xcenter
y a d j u s t e d = ( y p r e d 2 × height of  F i ) + y c e n t e r y_{adjusted}=(\frac{y_{pred}}{2\times \text{height of }F_i}) + y_{center} yadjusted=(2×height of Fiypred)+ycenter

该修正机制不仅极大地提升了模型的定位能力,也提升了算法的效率和稳定性。如下图所示,假设有一个 3 × 3 3\times 3 3×3特征图 F i F_i Fi,格子的索引从左上角的 ( 0 , 0 ) (0,0) (0,0)到右下角的 ( 2 , 2 ) (2,2) (2,2)。用特征图 F i F_i Fi的宽度和高度来计算每个格子的中心坐标。例如, ( 0 , 0 ) (0,0) (0,0)格子的中心坐标是 ( 1 2 × width of  F i , 1 2 × height of  F i ) (\frac{1}{2\times \text{width of }F_i}, \frac{1}{2\times \text{height of }F_i}) (2×width of Fi1,2×height of Fi1)。我们假设网络预测该格子的坐标是 ( x p r e d , y p r e d ) (x_{pred}, y_{pred}) (xpred,ypred),其可以通过下面的方式做修正:

x a d j u s t e d = ( x p r e d 2 × width of  F i ) + 1 2 × width of  F i x_{adjusted}=(\frac{x_{pred}}{2\times \text{width of }F_i}) + \frac{1}{2\times \text{width of }F_i} xadjusted=(2×width of Fixpred)+2×width of Fi1
y a d j u s t e d = ( y p r e d 2 × height of  F i ) + 1 2 × height of  F i y_{adjusted}=(\frac{y_{pred}}{2\times \text{height of }F_i}) + \frac{1}{2\times \text{height of }F_i} yadjusted=(2×height of Fiypred)+2×height of Fi1

在这里插入图片描述

损失函数

采用了 multi-faceted 方法来设计损失函数,优化模型的性能,在该目标函数中融合了空间和置信度的信息。

空间部分引入了边框损失,使用 MSE。给定预测边框坐标和朝向角,转化成轴对齐边框(AABB)来计算与 ground-truth 框的 IOU。下图展示了该轴对齐边框 AABB 以及 IOU。AABB 简化了 IOU 的计算,与更准确的带朝向角的边框方法相比,它的 IOU 值可能会大一些。这是因为与轴对齐的边框可能会覆盖一些非重叠的区域。实验表明该误差是可以接受的,它仍能有效地帮助损失的下降。边框损失定义为:

L b o x = MSE ( I O U p r e d , I O U g t ) L_{box}=\text{MSE}(IOU_{pred}, IOU_{gt}) Lbox=MSE(IOUpred,IOUgt)

选用 MSE 作为 IOU 损失,能保证梯度流比较平滑。

置信度部分是用一个二值交叉熵损失实现的。对正负类别的样本计算损失。预测框如果与 ground-truth 框的 IOU 超过一定阈值,则判定正样本。对于正样本,损失为:

L p o s = B C E ( C p r e d , 1 ) + L b b o x L_{pos}=BCE(C_{pred}, 1) + L_{bbox} Lpos=BCE(Cpred,1)+Lbbox

若预测框和任意一个 ground-truth 框的 IOU 都很低,则判定为负样本,损失如下:

L n e g = B C E ( C p r e d , 0 ) L_{neg}=BCE(C_{pred}, 0) Lneg=BCE(Cpred,0)

最终的损失是这些损失的加权和,

L t o t a l + α L b b o x + β ( L p o s + L n e g ) L_{total}+\alpha L_{bbox} + \beta(L_{pos}+L_{neg}) Ltotal+αLbbox+β(Lpos+Lneg)

α , β \alpha,\beta α,β 平衡空间和置信度部分的权重,微调模型时提供一定的灵活性。该损失受到 YOLO 启发,构建了一个灵活且鲁棒的损失函数,能够解决自动驾驶任务内在的挑战,如实时目标跟踪和高精定位。

在这里插入图片描述

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

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

相关文章

DO LARGE LANGUAGE MODELS KNOW ABOUT FACTS?

本文是LLM系列文章,针对《DO LARGE LANGUAGE MODELS KNOW ABOUT FACTS?》的翻译。 TOC 摘要 大型语言模型(LLM)最近推动了一系列自然语言处理任务的显著性能改进。在预训练和指令调整过程中获得的事实知识可以用于各种下游任务&#xff0c…

一句话说明:企业架构框架鼻祖Zachman

问:禁止废话,一句话表达,Zachman是什么?包含哪些内容? 韩老师正经回答:Zachman是企业架构框架鼻祖,包含6行6列的矩阵式架构内容。6列是5W1H(What、How、Where、Who、When、Why&…

Vue3 简单实现虚拟Table,展示海量单词.利用WebAPI speechSynthesis,朗读英语单词

目录 本页面完整代码 视频演示 完整的页面代码 利用webapi speechSynthesis帮助我们自动郎读英语单词,可以利用这个API,做一些小说朗读或到账提示。 本页面完整代码 用Vue写了一个简单页面,里面还写了一个简单的虚拟Table支持海量数据展示…

kubernetes存储-volumes

目录 一、Volumes的简介 二、emptyDir卷 1、emptyDir的引入 2、emptyDir 的使用场景 3、多容器共享volumes 4、emptyDir缺点 三、hostPath卷 1、hostPath卷简介 2、创建hostPath卷 3、NFS共享文件 四、PersistentVolume(持久卷) 1、PV与P…

免费音效素材,不能错过这6个网站

找免费音效素材,那必须要上这6个网站,热门音效、BGM都能免费下载,赶紧收藏起来。 1、菜鸟图库 https://www.sucai999.com/audio.html?vNTYwNDUx 菜鸟图库是一个综合性素材网站,站内涵盖设计、图片、办公、视频、音效等素材。其中…

数据可视化:动态柱状图

终于来到最后一个数据可视化的文章拿啦~~~ 在这里学习如何绘制动态柱状图 我先整个活 (๑′ᴗ‵๑)I Lᵒᵛᵉᵧₒᵤ❤ 什么是pyecharts? 答: Python的Pyecharts软件包。它是一个用于Python数据可视化和图表绘制的库,可用于制作…

tomcat默认最大线程数、等待队列长度、连接超时时间

tomcat默认最大线程数、等待队列长度、连接超时时间 tomcat的默认最大线程数是200,默认核心线程数(最小空闲线程数)是10。 在核心线程数满了之后,会直接启用最大线程数(和JDK线程池不一样,JDK线程池先使用工作队列再使用最大线程…

力扣最热一百题——盛水最多的容器

终于又来了。我的算法记录的文章已经很久没有更新了。为什么呢? 这段时间都在更新有关python的文章,有对python感兴趣的朋友可以在主页找到。 但是这也并不是主要的原因 在10月5号我发布了我的第一篇博客,大家也可以看见我的每一篇算法博客…

【23真题】易!题源全部定位!带讲解!

今天分享的是23年长春理工大学808的信号与系统试题及解析。 本套试卷难度分析:22年长春理工808考研真题,我也发布过,若有需要,戳这里自取!本套试题内容难度中等偏下,题量较少,没有选择填空题&a…

算法学习打卡day41|栈和队列:栈和队列相互实现、括号匹配、逆波兰表达式、滑动窗口最大值问题、求前 K 个高频元素

栈和队列相互实现 力扣题目链接:用栈实现队列、用队列实现栈 题目描述: 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty): 实现 MyQueue 类: void push(…

Android菜单Menu详解

菜单资源文件通常放置在res\menu目录下&#xff0c;在创建项目时&#xff0c;默认不自动创建menu目录&#xff0c;所以需手动创建。 Android Resource Directory→ value menu 或在创建根元素为<menu></menu>标记的xml文件对自动气建眼 res→Android Resounce File…

无人机航迹规划:狐猴优化算法LO求解无人机路径规划MATLAB(可以修改起始点,地图可自动生成)

一、狐猴优化算法 狐猴优化算法&#xff08;Lemurs Optimizer&#xff0c;LO&#xff09;由Ammar Kamal Abasi等人于2022年提出&#xff0c;该算法模拟狐猴的跳跃和跳舞行为&#xff0c;具有结构简单&#xff0c;思路新颖&#xff0c;搜索速度快等优势。狐猴优化算法&#xff…

JavaScript 进阶问题列表,巩固自己的知识。

不定时更新 JavaScript 进阶问题列表 从基础到进阶&#xff0c;测试你有多了解 JavaScript&#xff0c;刷新你的知识&#xff0c;或者帮助你的 coding 面试&#xff01; &#x1f4aa; &#x1f680; 答案❤️ 1. 输出是什么&#xff1f; function sayHi() {console.log(na…

代码汇总【数据结构与算法】【精致版】

代码汇总【数据结构与算法】【精致版】 学习 第一章 引言 第二章 线性表 顺序表 1-顺序表.h 1-顺序表的测试.c //1.顺序表的初始化 //【算法2-1】 顺序表的初始化 //创建顺序表函数 初始化前n个数据 //2.顺序表的插入 //【算法2-2】顺序表的插入 //3.顺序表的删除 //【…

iSlide2024一款基于PPT的插件工具包含38个设计辅助功能

根据使用者情况表明iSlide 是一款拥有30W素材的PPT高效设计软件&#xff0c;可提高90%工作效率&#xff0c;现全球已有超过1400万使用者&#xff0c;智能排版原创高品模板可商用图形&#xff0c;真正摆脱PPT的束缚&#xff0c;把精力用在该用的地方。我们都明白islide插件功能特…

vue项目中页面遇到404报错

vue页面访问正常&#xff0c;但是一刷新就会404的问题解决办法&#xff1a; 1.解决方法&#xff1a; 将vue的路由模式 mode: history 修改为 mode: hash模式 //router.js文件 const router new Router({//mode: history, mode: hash,routes: [{ path: /, redirect: /login …

nodejs 操作rabbitMQ rascal库(针对amqplib的封装)

Rascal 是一个围绕amqplib 的丰富的 pub/sub 包装器。amqplib 最好的事情之一是它不会对您如何使用它做出假设。另一个是它不尝试抽象AMQP Concepts。因此&#xff0c;该库提供了大量的控制和灵活性&#xff0c;但您有责任采用适当的模式和配置。您需要注意的是&#xff1a; 默…

基于Python OpenCV的金铲铲自动进游戏、D牌...

基于Python OpenCV的金铲铲自动进游戏、D牌... 1. 自动点击进入游戏1.1 环境准备1.2 功能实现2. 自动D牌3. 游戏结束自动退1. 自动点击进入游戏 PS: 本测试只用于交流学习OpenCV的相关知识,不能用于商业用途,后果自负。 1.1 环境准备 需要金铲铲在win10的模拟器,我们这里选…

Vue 3 中,watch 和 watchEffect 的区别

结论先行&#xff1a; watch&#xff1a;需要指明要监听的数据&#xff0c;而且在回调函数中可以获取到属性变化的前后值&#xff1b; 适用于需要精确控制监视范围的情况&#xff1b;也就是需要针对特定数据变化执行操作。 watchEffect&#xff1a;不用指明监听哪个属性&…

python单元测试框架(继承、unittest参数化、断言、测试报告)

一、继承 继承能解决什么问题&#xff1f; unittest每个模块都要用到前提条件以及清理&#xff0c;如果有上百个模块&#xff0c;我们要改域名和浏览器&#xff0c;就会工作量很大特别麻烦&#xff0c;这时我们可以用继承的思想只用改一次 我们可以将前提和清理提出来单独放…