PolarFormer:Multi-camera 3D Object Detection with Polar Transformer——论文笔记

news2024/11/15 23:45:32

参考代码:PolarFormer

1. 概述

介绍:在仓库RoboBEV中总结了现有的一些bev感知算法在不同输入情况下的鲁棒性,在这些感知算法中PolarFormer拥有较为不错的泛化性能。这个算法的思想是将之前由直角坐标系栅格化构建bev网格,转换到由极坐标构建栅格化bev网格,这样的bev特征构建方法其实是符合相机成像过程的,在W维度切分的单个竖向特征代表的便是由光心和两条射线组成的扇形区域。其大体过程为:首先需要使用transformer机制对各个扇形区域进行特征抽取,而完整的感知区域(一个由车体为中心的圆形区域)则通过双线性插值的方式在各个扇区取值得到,之后会经过self-attention网络完成特征优化,而且fov到bev特征转换的过程会在多个特征尺度上完成,因而这个过程构建的是一个多尺度bev特征,最后的感知头则是类detr的实现。整体上看这个算法从bev特征构建、获取、感知预测简洁明了,但是这样的算法构建要是上车部署估计还有一段路要走。

在RoboBEV中变化不同的输入情况下PolarFormer的退化情况:
在这里插入图片描述

2. 方法设计

2.1 整体pipeline

整个bev感知算法的结构见下图所示:
在这里插入图片描述
结合上图内容可以将整个算法结构划分为如下几个部分:

  • 1)使用backbone+fpn实现图像特征抽取
  • 2)以车体为中心对感知范围划分不同的扇区,并以扇区构建query,通过cross-attention的形式得到各个扇区的特征表达
  • 3)对各个扇区通过双线性插值得到完整bev特征,在此基础上通过self-attention完成bev特征优化和对齐
  • 4)设置需要感知目标的query通过mul-scale deformable attention实现在多尺度特征下的感知

2.2 fov到bev的转换

这篇文章中bev特征的表达和感知都是在极坐标下完成的,因而需要在特征转换的时候也需要直角坐标系到极坐标系的转换,如下图:
在这里插入图片描述

对于图像中的点 ( x ( I ) , y ( I ) ) (x^{(I)},y^{(I)}) (x(I),y(I)),图像视锥坐标系下的点 ( x ( C ) , y ( C ) , z ( C ) ) (x^{(C)},y^{(C)},z^{(C)}) (x(C),y(C),z(C)),极坐标系下的点 ( ϕ P , ρ ( P ) ) (\phi^{P},\rho^{(P)}) (ϕP,ρ(P)),它们的转换关系为:
ϕ ( P ) = a r c t a n x ( C ) z ( C ) = a r c t a n x ( I ) − u 0 f x \phi^{(P)}=arctan\frac{x^{(C)}}{z^{(C)}}=arctan\frac{x^{(I)}-u_0}{f_x} ϕ(P)=arctanz(C)x(C)=arctanfxx(I)u0
ρ ( P ) = ( x ( C ) ) 2 + ( z ( C ) ) 2 = z ( C ) ( x ( I ) − u 0 f x ) 2 + 1 \rho^{(P)}=\sqrt{(x^{(C)})^2+(z^{(C)})^2}=z^{(C)}\sqrt{(\frac{x^{(I)}-u_0}{f_x})^2+1} ρ(P)=(x(C))2+(z(C))2 =z(C)(fxx(I)u0)2+1
上面的转换关系会在生成GT的过程中参与到,而在对应特征转换和预测过程中是不会怎么涉及的,这里没有假定扇形区域深度的概念,对于扇形范围的特征为 p ^ x , u , w ∈ R R u ∗ C \hat{p}_{x,u,w}\in R^{R_u*C} p^x,u,wRRuC,其中 ( x , u , w , R u ) (x,u,w,R_u) (x,u,w,Ru)分别代表camera_id,多尺度特征index,特征的宽度和极坐标的范围(也就是对应的range)。则对应的图像特征为 f x , u , w ∈ R H u ∗ C f_{x,u,w}\in R^{H_u*C} fx,u,wRHuC,那么后面就是根据cross-attention实现扇区特征的获取:
p n , u , w = M u l t i H e a d ( p ^ n , u , w , f x , u , w , f x , u , w ) p_{n,u,w}=MultiHead(\hat{p}_{n,u,w},f_{x,u,w},f_{x,u,w}) pn,u,w=MultiHead(p^n,u,w,fx,u,w,fx,u,w)
上面得到的是一个扇区的特征表达,那么周视的完整bev特征表达就是这些扇区的叠加:
p n , u = S t a c k ( [ p n , u , 1 , … , p n , u , w u ] , d i m = 1 ) ∈ R R u ∗ W ∗ C p_{n,u}=Stack([p_{n,u,1},\dots,p_{n,u,w_u}], dim=1)\in R^{R_u*W*C} pn,u=Stack([pn,u,1,,pn,u,wu],dim=1)RRuWC
按照上面的过程已经得到一个特征scale下的表达,则实际bev极坐标到图像视锥极坐标的转换就需要通过采样的方式实现了,这里也是借鉴了世界坐标到图像坐标的转换,也就是
( ϕ P , ρ ( P ) ) = C a m I C a m E ( ϕ W , ρ ( W ) ) (\phi^{P},\rho^{(P)})=Cam_ICam_E(\phi^{W},\rho^{(W)}) (ϕP,ρ(P))=CamICamE(ϕW,ρ(W))
然后对这些投影过来的点按照双线性插值的方式获取实际bev极坐标下的特征表达:
G u ( ρ i ( P ) , ϕ j P ) = 1 ∑ n = 1 N ∑ n = 1 Z λ n ( ρ i ( P ) , ϕ i ( P ) , z k ( P ) ) ⋅ ∑ n = 1 N ∑ n = 1 Z λ n ( ρ i ( P ) , ϕ i ( P ) , z k ( P ) ) B ( P n , u , ( x ˉ i , j , k , n ( I ) , r ˉ i , j , n ) ) G_u(\rho^{(P)}_i,\phi^{P}_j)=\frac{1}{\sum_{n=1}^N\sum_{n=1}^Z\lambda_n(\rho_i^{(P)},\phi_i^{(P)},z_k^{(P)})}\cdot\sum_{n=1}^N\sum_{n=1}^Z\lambda_n(\rho_i^{(P)},\phi_i^{(P)},z_k^{(P)})\mathcal{B}(P_{n,u},(\bar{x}_{i,j,k,n}^{(I)},\bar{r}_{i,j,n})) Gu(ρi(P),ϕjP)=n=1Nn=1Zλn(ρi(P),ϕi(P),zk(P))1n=1Nn=1Zλn(ρi(P),ϕi(P),zk(P))B(Pn,u,(xˉi,j,k,n(I),rˉi,j,n))
上面得到的特征还是比较原始的特征还需要经过几层self-attention网络进行特征优化和对齐操作。那么使用这样的坐标达标具体会有什么样的收益?见下表
在这里插入图片描述
而这里的扇形划分分辨率和range对性能的影响:
在这里插入图片描述
极坐标建模与直角坐标建模在不同距离下的性能差异:
在这里插入图片描述

2.3 感知头部分

前面得到的bev特征是多尺度的,则在感知头部分便使用multi-scale deformable attention构建head部分,其结构见下图所示:
在这里插入图片描述
对于multi-scale特征给网络性能带来的影响见下表:
在这里插入图片描述

3. 实验结果

nuScenes test set:
在这里插入图片描述

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

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

相关文章

Unity之透明度混合与ps的透明度混合计算结果不一致

一、问题 前段时间学习shader时发现了一个问题,一张纯红色透明度为128的图片叠加在一张纯绿色的图片上得出的结果与ps中的结果不一致。网上查找了ps中的透明混合的公式为 color A.rgb*A.alpha B.rgb*(1-A.alpha)。自己使用代码在unity中计算了一下结果总是不对。…

Python--异常处理

Python--异常处理 <font colorblue>一、异常<font colorblue>二、异常处理语句<font colorblue>1、try...except语句<font colorblue>2、try...except...else语句<font colorblue>3、try...except...finally语句<font colorblue>4、raise语…

leetcode354. 俄罗斯套娃信封问题(动态规划-java)

俄罗斯套娃信封问题 leetcode354. 俄罗斯套娃信封问题题目描述:解题思路代码演示 动态规划专题 leetcode354. 俄罗斯套娃信封问题 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://leetcode.cn/problems/russian-doll-envelopes 题目描述: 给你…

c++学习之模板

目录 一&#xff0c;模板的概述 二&#xff0c;函数模板 1.函数模板的定义 2.函数模板的注意事项 3.函数模板的重载 4.函数模板的局限性 三&#xff0c;类模板 1.类模板的概念 2.类模板定义方式 3.类模板的成员函数在类外实现 4.函数模板作为类模板的友元 5.在写程…

《大学英语4》期末考试复习(一)听力原文+答案速记

目录 Unit 1 Long conversation Passage 1 Unit 2 Long conversation Passage 1 Unit 3 Long conversation Passage 1 Unit 4 Long conversation Passage 1 Unit 5 Long conversation Passage 1 Unit 6 Long conversation Passage 1 Unit 7 Long conversat…

Java线程池小结

目录 一.什么是线程池 二.线程池的好处是什么 三.四种基本线程池及其使用 newCachedThreadPool newFixedThreadPool newScheduledThreadPool newSingleThreadExecutor 线程池的四种拒绝策略 选择一:AbortPolicy 选择二:CallerRunsPolicy 选择三:DiscardPolicy 选择四…

【Java】Java核心要点总结70

文章目录 1. volatile 如何保证变量的可⻅性&#xff1f;2. volatile 可以保证原⼦性么&#xff1f;3. synchronized 关键字4. synchronized 和 volatile 的区别5. synchronized 和 ReentrantLock 的区别 1. volatile 如何保证变量的可⻅性&#xff1f; 在Java中&#xff0c;使…

html实现多种风格的时间轴(附源码)

文章目录 1.设计来源1.1 对称风格时间轴1.2 横向风格时间轴1.3 回忆风格时间轴1.4 记事风格时间轴1.5 简易风格时间轴1.6 科技风格时间轴1.7 列表风格时间轴1.8 跑道风格时间轴1.9 人物风格时间轴1.10 容器风格时间轴1.11 沙滩风格时间轴1.12 双边风格时间轴1.13 图文风格时间轴…

【verilog基础】时钟无毛刺切换电路 Clock Glitch Free

文章目录 一、时钟切换电路:容易产生毛刺二、时钟无毛刺切换电路:在S端增加一些控制通路三、异步时钟无毛刺切换电路:使用同步电路解决亚稳态问题四、真题题目解答一、时钟切换电路:容易产生毛刺 1、在芯片运行时经常需要切换时钟源,通常的实现方式是:通过mux来选择不同的…

用试题这把“剑“帮你破除指针与数组之间的那些猫腻

作者主页&#xff1a;paper jie的博客_CSDN博客-C语言,算法详解领域博主 本文作者&#xff1a;大家好&#xff0c;我是paper jie&#xff0c;感谢你阅读本文&#xff0c;欢迎一建三连哦。 本文录入于《系统解析C语言》专栏&#xff0c;本专栏是针对于大学生&#xff0c;编程小白…

【linux】在Linux系统开机的时候卡在/dev/nvme0n1p1:clean / files / blocks界面进不去

一、问题背景 开机的时候没办法开机&#xff0c;一直停留在下面这个界面。 x86/cpu: SGX disabled by BIOS dev/nvme0n1p3:clean, 21118/30523392 fies, 122066176/122070272 blocks dev/nvme0n1p4:clean, 486125/61038592 fies,21657184/244140544b1ocks 试过网上的一些方法…

Ubuntu20.04+Intel SGX(一):环境安装与测试

文章目录 测试环境一、检查服务器是否支持SGX方法1&#xff1a;cpuid查看是否支持SGX方法2&#xff1a;test-sgx.c测试是否支持SGX验证是否支持SPS 二、启动 SGX 服务参考文档启动 SGX方法1&#xff1a;BIOS 启动SGX方法2&#xff1a;软启动 SGX检查SGX是否开启成功 三、安装 S…

C++在线五子棋对战(网页版)项目:环境搭建

Centos-7.6环境搭建 安装wget工具 wget工具是Linux中的一个下载文件的工具&#xff0c;支持通过 HTTP、HTTPS、FTP 三个最常见的TCP/IP协议 下载&#xff0c;并可以使用 HTTP 代理。可以使用以下命令进行下载&#xff1a; sudo yum install wget 下载后&#xff0c;可以使用以…

【Linux】CentOS7 设定本机当前地区时间为虚拟机时间的简单操作

目录 情景系统环境操作 情景 新安装的虚拟机时间和当前本地系统时间不一致&#xff0c;现在想要将虚拟机和本机地区的时间调节为一致。 系统环境 CentOS Linux 7 系统界面大致如此。 操作 点击虚拟机界面左上角的 Applications 选项&#xff0c; 选择System-Tools-- Sett…

【C++】C++关于异常的学习

文章目录 C语言传统的处理错误的方式一、异常的概念及用法二、自定义异常体系总结 C语言传统的处理错误的方式 传统的错误处理机制&#xff1a; 1. 终止程序&#xff0c;如 assert &#xff0c;缺陷&#xff1a;用户难以接受。如发生内存错误&#xff0c;除 0 错误时就会终止…

【Python】元组 创建 访问 切片 拼接 解包

2.3 元组 元组在输出时总是有括号的。 元组在输入时可以没有。 像字符串一样&#xff0c;元组是不可变的。 索引、切片以及一些方法很多与列表相似。 1&#xff09;定义 元组是一种不可变序列&#xff0c;它与列表类似&#xff0c;但元组的元素不能修改。元组中的元素可以是任意…

【Vuejs】1720- 详细聊一聊 Vue3 动态组件

&#x1f449; 「相关文章」 深入浅出 Vue3 自定义指令6 个你必须明白 Vue3 的 ref 和 reactive 问题初中级前端必须掌握的 10 个 Vue 优化技巧分享 15 个 Vue3 全家桶开发的避坑经验 动态组件[1]是 Vue3 中非常重要的一个组件类型&#xff0c;它可以让我们在不同的场景下灵活地…

Git远程仓库使用

说明&#xff1a;使用Git&#xff0c;可以实现版本控制和协作开发。需要协作开发&#xff0c;当然需要建立一个Git代码托管的平台。目前可以使用GitHub、码云、GitLab等&#xff0c;码云相当于国内的GitHub&#xff0c;在国内访问速度高于GitHub&#xff1b;而GitLab是搭建私服…

阿里云服务器的可靠性和稳定性如何?是否有SLA保障?

阿里云服务器的可靠性和稳定性如何&#xff1f;是否有SLA保障&#xff1f;   一、阿里云服务器的可靠性   阿里云服务器作为全球领先的云计算服务平台&#xff0c;以其高性能、高可靠性和高安全性获得了广泛好评。为满足企业客户对稳定、可靠云服务的需求&#xff0c;阿里云…

「译文」用ChatGPT助力SEO工作

大家好&#xff0c;我是可夫小子&#xff0c;《小白玩转ChatGPT》专栏作者&#xff0c;关注AIGC、读书和自媒体。 那些使用ChatGPT的先进人士&#xff0c;也没还能完全掌握它内容生成的能力&#xff0c;特别是像博客那样的长文写作能力。 现在&#xff0c;跟大家介绍 一下SEO优…