用BEVformer来卷自动驾驶-4

news2024/10/6 2:28:58

书接前文

     前文链接:用BEVformer来卷自动驾驶-3 (qq.com)

   上文书介绍了BEVformer是个啥,以及怎么实现Deformable-attention

     我们继续

BEVformer的输入数据格式

  • 输入张量(batachsize,queue,cam,C,H,W)

  • queue表示连续帧的个数,主要解决遮挡问题

  • cam表示图像数量/per 帧

  • C,H,W就是chw也就是图片通道数(3),高度,宽度

      其他都好理解,可能queue和cam不好理解

      比如你当前时刻是t,那么queue我想设置成3,就意味着,除了当前时刻以外,t-1和t-2时刻的信息我要一并拿来计算

       cam:可以简单理解成摄像头的数量,比如按我前几章的逻辑图画的 样子,那么cam<=6

BEVformer Backbone:

图片

  • Backbone就是提取特征的网络

  • 啥网络都行,最好要速度快,比如Resnet,也可以VIT(带Transformer的都得优化)

  • 按上图来说就抽6个摄像头的特征,给空间注意力用

  • BEV的特征空间里面的每个点,都要在这些特征里采样(可以参见上节课讲的逻辑)

回顾一下上节课我们时间注意力的时候,采样采了4个点,可以理解为4N

图片

      那么是不是有点少呢,比如我可以采8N或者N^2,是不是特征值摘取的更多,我的结果越和现实拟合呢?

图片

      论文上的结果和大家理解的大相径庭,可以看到采样为global的大家可以简单理解为跟所有的点都做attention计算,就是N^2,而Local就是4N,就是我们之前讲过的方式,明显看到在NDS和mAP的这些数据里都是Local(4N)更有优势,当然FLOPs算力效率更高,Memory也占用更小

      这个东西怎么解释,没法解释...

      如果强解释,我个人认为,和数据采样有关,因为你的BEV高维空间上的点(向量),在计算attetion的时候,实际上跟你有关的可能就那么几个点,如果你把所有的点都引入,也许带来了不必要的噪音,使结果反而没有就几个点的计算方式好

      那我们总结一下:

图片

      在不考虑空间注意力机制的情况,我们用DeformableAttetion单靠时间注意力机制,在没有和其他的摄像头特征融合的时候,我已经有了先验数据,这部分先验数据哪来的?就是历史上t-2时刻和t-1时刻给我拿来init用的

       下面讨论空间注意力机制:

      

图片

      从时间维度的注意力,我已经得到了先验的特征的向量(t-1,t-2带过来算出来的)然后我这个点(向量)相当于一个query,这个query要和周边的几个带颜色(cam)一起算空间注意力了

      这就引入了一个新的概念Cross-attetion,因为x'y'这个向量它要和其他的特征空间(摄像头)里的不同的点做attetion计算,所以叫Cross

      BEV是个3D空间,摄像头出来的是2D空间,所以要做3D到2D的投影

      如上图所示,和时间注意力一样,我也不能和所有的点都做attetion,所以我又找出来个4N,依旧是DeformableAttention的思想,4N>8N>N^2

      找出来一个摄像头就给我贡献了4个特征,剩下就是考虑到几个摄像头给我贡献了(参见第二章,第三章的逻辑),然后把所有的拿到的特征一起计算

      最后一个需要注意的,论文里提出来需要考虑的一个特征"高度",因为在现实社会里,我们实际上的物体是有高矮的区分,所以如上图所示,其实并不是一个向量,比如图里画了4个向量,就是不同高度的向量分别去和跟它们相关的摄像头去计算。

      心细的读者已经有想法了,这是啥啊?是不是就是和Transformer里的多头注意力MHA机制很像啊?我个人也很倾向于把这个当多头注意力机制去理解,因为高度这个东西就更抽象了,多高算高呢,怎么把一个合理的高度空间分成4份呢?

      

图片

    整体流程就如上图所示了,在回忆一下我们前面的学习的知识串讲一下

  • 首先,有一个backbone,确定自己有几个视角

  • 其次,生成一个BEV的3D(4D加入了时间的概念)特征空间

  • 再次,做基于时间的attention,主要一定是先做基于时间的,因为有了先验数据(比如t-2,t-1)

  • 最后,做空间(和几个摄像头做attetion,cam的取值)的cross-attetion

后来又出了一系列的feature优化,看看就行

  • Corner pooling(针对性检测)

  • 多尺度特征图

  • 偏移量的预测增大卷积核(比如1*1换成3*3)

  • 做好的BEV空间可以集成多检测器,比如基于Anchor的收敛速度快,适合检测大物体,基于DETR的,对小物体更友好,给了更多的选择

      以上这些可能在下一篇或者后续新开连载再讲

      BEV和BEVformer理论部分就到此结束了,其实方法没那么复杂,挺简单的,但是思路很棒,基本也会成为纯视觉自动驾驶的标配

本节完

图片

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

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

相关文章

工厂设计模式看这一篇就够了

本文将重点介绍几种工厂设计模式&#xff1a;简单工厂、工厂方法模式、抽象工厂模式和建造者模式。这几种设计模式在生产制造的流程下层层递进&#xff0c;可以满足不同的使用场景。在实际运用时&#xff0c;没有一个万能的工厂模式可以套用&#xff0c;要结合具体业务场景选择…

【华为GAUSS数据库】IDEA连接GAUSS数据库方法

背景&#xff1a;数据库为华为gauss for opengauss 集中式数据库 IDEA提供了丰富的各类型数据库驱动&#xff0c;但暂未提供Gauss数据库。可以通过以下方法进行连接。 连接后&#xff0c; 可以自动检查xml文件中的sql语句是否准确&#xff0c;表名和字段名是否正确还可以直接在…

基于 IoT 物联网 + 5G 技术搭建 100万台电梯智能化运维平台

随着近20年我国房地产的蓬勃发展&#xff0c;电梯已经成为人们现代生活中不可或缺的一部分&#xff0c;也是城市化建设中重要的建筑设备之一。据中国电梯行业协会统计&#xff0c;截至2022年底&#xff0c;我国电梯保有量为990万台&#xff0c;电梯运营健康度&#xff0c;减少事…

Pyro —— Sparse vs dense simulations

目录 Simulation area Sparse solving Understanding resizing Simulation area 在模拟的期间&#xff0c;pyro场都在当前容器内定义&#xff1b;开始非常小&#xff0c;随模拟的进行&#xff0c;解算器会不断的对其扩展或收缩&#xff1b;为重置流体框&#xff0c;解算器会…

Android 基础技术——addView 流程

笔者希望做一个系列&#xff0c;整理 Android 基础技术&#xff0c;本章是关于 addView 在了解 addView 流程之前&#xff0c;先回答下以下几个问题&#xff1a; PhoneWindow是什么时候创建的&#xff1f; DectorView 是什么&#xff1f; DectorView 是什么时候创建的&#xf…

conda国内加速

1、配置国内源 conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ 2、显示源地址 conda config --set show_channel_urls yes

外呼机器人有什么优势?

外呼机器人有什么优势&#xff1f;值得受到大多数电销企业的追捧&#xff01; 1、电话外呼效率高&#xff1a; 每天可拨打的电话数量是人工的5-10倍&#xff0c;人工一天只能拨打200-300通电话&#xff0c;机器人每天能打3000通电话以上&#xff0c;无须休息&#xff0c;按照…

PWM之舵机

舵机又称直流电机&#xff0c;如下图 本节承接上节&#xff0c;具体的PWM技术已经在上一节讲的很详细了&#xff0c;本节就不再讲了&#xff0c;那么我们的重点就放在直流电机的工作原理上了。 一、工作原理 我们研究直流电机&#xff0c;主要式研究直流电机旋转速度的调节&a…

linux LPT和COM回路测试(基于python+Qt+C++)

软件UI: 回路治具&#xff08;COMLPT&#xff09;&#xff1a; lpt_test.cpp&#xff08;c 源代码&#xff09;&#xff1a; #include <iostream> #include <fstream> #include <sstream> #include <unistd.h> #include <fcntl.h> #include <…

什么是游戏盾?哪家效果好。

游戏盾是什么呢&#xff0c;很多做游戏开发的客户估计都是听说过的&#xff0c;但是也不是所有的游戏开发者会运用到。因为&#xff0c;游戏盾是针对游戏行业APP业务所推出的高度可定制的网络安全管理解决方案&#xff0c;除了能针对大型DDoS攻击(T级别)进行有效防御外&#xf…

Python(18)--文件输入/输出 Ⅱ

​ 大家好&#xff01;我是码银&#x1f970; 欢迎关注&#x1f970;&#xff1a; CSDN&#xff1a;码银 公众号&#xff1a;码银学编程 前言 前一篇文章&#xff08;python(17)–文件的输入/输出-CSDN博客&#xff09;介绍了如何操作文本文件和二进制文件&#xff0c;以及对应…

设计亚马逊按销售排名功能

1&#xff1a; 定义 Use Cases 和 约束 Use cases 作用域内的Use Case Service 通过目录计算过去一周内最受欢迎的产品User 通过目录去View过去周内最受欢迎的产品Service 有高可用 作用域外 整个电商网站 设计组件&#xff08;只是计算销售排名&#xff09; 约束和假设…

【Python】模块

&#x1f6a9; WRITE IN FRONT &#x1f6a9; &#x1f50e; 介绍&#xff1a;"謓泽"正在路上朝着"攻城狮"方向"前进四" &#x1f50e;&#x1f3c5; 荣誉&#xff1a;2021|2022年度博客之星物联网与嵌入式开发TOP5|TOP4、2021|2222年获评…

C++ :命名空间域

目录 冲突与命名&#xff1a; 举个例子&#xff1a; 全局与局部&#xff1a; 域作用限定符&#xff1a; 命名空间域&#xff1a; 冲突与命名&#xff1a; 在C语言中&#xff0c;我们通常会使用stdlib.h 而stdlib.h 本质上是一个函数的库&#xff0c;在程序中使用的大多数…

django邮件通知功能-

需求&#xff1a; 1&#xff1a;下单人员下订单时需要向组长和投流手发送邮件通知 2&#xff1a;为何使用邮件通知功能&#xff1f;因为没钱去开通短信通知功能 设计 1&#xff1a;给用户信息表添加2个字段 第一个字段为&#xff1a;是否开通邮件通知的布尔值 第二个字段为: 用…

Python 折线图的绘制(Seaborn篇-04)

Python 折线图的绘制(Seaborn篇-04)         🍹博主 侯小啾 感谢您的支持与信赖。☀️ 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹…

详解Redisson

第1章&#xff1a;Redisson简介 大家好&#xff0c;我是小黑&#xff0c;咱们今天来聊聊Redisson&#xff0c;Redisson不只是简单地对Redis进行了封装&#xff0c;它还提供了一系列高级的分布式Java数据结构&#xff0c;像是分布式锁、原子长整型这种。 首先&#xff0c;Redi…

React 初次接触

背景 还是为了完善高大上的在线文档系统&#xff0c;虽然比着葫芦画瓢的修改了一些所谓的代码&#xff0c;慢慢的才发现&#xff0c;原来这就是传说中的React&#xff0c;所以有比较又要囫囵吞枣一下React。 基本原理 参照《React技术揭秘》 网上有电子版 &#xff0c;应该是…

Makefile编译原理 条件判断语句

一.makefile中支持条件判断语句 可以根据条件的值来决定make的执行 可以比较两个不同变量或者变量和常量值 条件判断语句语法说明&#xff1a; 条件判断关键字&#xff1a; 条件判断语句注意点&#xff1a; 条件判断语句之前可以有空格&#xff0c;但不能没有Tab字符&#x…

【Java】SpringBoot实现事件监听(异步执行)

在Spring Boot中&#xff0c;事件监听是一种机制&#xff0c;通过该机制&#xff0c;你可以定义和触发自定义的事件&#xff0c;以及在应用程序中注册监听器来响应这些事件&#xff0c;提供了一种解耦的方式来处理应用程序中的事件。 文末有源码gitee地址&#xff01;拉取可进…