BEV感知PETR-V1和PETR-V2
参考代码:PETR
1. 概述
介绍:这两篇文章提出了以位置编码转换(PETR,position embedding transformation)为基础的BEV感知方法,按照方法中组件不同可将PETR划分为V1和V2版本。在V1版本中提出了基础版本的PETR,首先使用一种类似LSS的方法构建相机视锥,里面编码了图像中每个点在不同深度下的3D空间位置,这些3D空间位置经过编码网络之后(几层1*1的卷积)得到3D空间位置的embedding编码,embedding编码再与2D相机特征做融合将3D空间位置信息嵌入到2D图像特征中去,最后在生成的特征图上使用DETR方法检测3D目标。V2版本相对V1版本增加了时间序列的支持,特别的是对于时序带来位置空间相对变化导致的位置不匹配问题,对于该问题文章通过pose变换对齐的方式实现特征图对齐。在下游任务中除了3D目标检测任务之外,还引入了分割分支。
2. BEV特征提取
2.1 PETR-V1
在V1版本中数据处理流程见下图所示:
对于2D图像可以根据相机内外参数和假定的3D空间范围内生成相机视锥数据,对应上图中的3D Coordinates Generator部分,3D视锥数据再与图像2D图像特征融合得到具备感知3D位置信息的2D图像特征,之后在接下游检测任务。这里的核心便是如何将3D位置信息如何添加到2D中,与之对应的部分便是上图中的3D Position Encoder。该部分的具体结构见下图所示:
对于图像特征生成的视锥数据维度为P3d={Pi3d∈R(D∗4)∗HF∗WF}P^{3d}=\{P_i^{3d}\in R^{(D*4)*H_F*W_F}\}P3d={Pi3d∈R(D∗4)∗HF∗WF},其中WF,HFW_F,H_FWF,HF代表生成视锥时特征图的宽高,DDD代表深度划分的steps。这些数据经过几个1∗11*11∗1的卷积之后得到3D位置编码,再与图像2D特征相加便使得2D图像特征中嵌入了3D位置信息。对于产生位置编码时使用的操作,以及3D位置编码和2D图像特征融合操作,它们对性能带来的影响见下表:
其中感到惊讶的是3∗33*33∗3的卷积竟然带来这大的负收益-_-||。
2.2 PETR-V2
2.2.1 网络结构
V2版本在V1版本上添加了对时序的支持,但是引入时序信息带来的问题便是在不同时刻下图像物体的3D相对位置是不一致的。这就要求在新版的PETR中对图像中的3D位置信息进行了对齐,对于对齐文中是使用pose变换的形式实现的。同时对于3D位置编码还引入了2D图像特征引导的attention操作用于优化3D位置编码。
在V2版本中算法的流程图见下图所示:
可以看到在图像的数据输入端添加了来自之前时序的数据。对于2D图像域的数据是直接通过concat组合起来,但是对于3D位置编码数据就不是直接这样处理了,其通过pose变换使其在车体坐标下对齐,也就是下图所示的样子:
将ttt时刻的相机坐标系记为c(t)c(t)c(t),激光雷达坐标系l(t)l(t)l(t),车体坐标系e(t)e(t)e(t),全局坐标系ggg。对于一个从src到dst的变换记为TsrcdstT_{src}^{dst}Tsrcdst。则从图像坐标系到激光雷达坐标系的变换为:
Pil(t)(t)=Tci(t)l(t)Ki−1Pm(t)P_i^{l(t)}(t)=T_{c_i(t)}^{l(t)}K_i^{-1}P^m(t)Pil(t)(t)=Tci(t)l(t)Ki−1Pm(t)
而激光雷达坐标系下t−1t-1t−1到ttt的变换描述为:
Pil(t)(t−1)=Tl(t−1)l(t)Pil(t−1)(t−1)P_i^{l(t)}(t-1)=T_{l(t-1)}^{l(t)}P_i^{l(t-1)}(t-1)Pil(t)(t−1)=Tl(t−1)l(t)Pil(t−1)(t−1)
其中的变换矩阵是借用了车体坐标系和全局坐标系作为中间变量迭代得到的:
Tl(t−1)l(t)=Te(t)l(t)Tge(t)Tge(t−1)−1Te(t−1)l(t−1)−1T_{l(t-1)}^{l(t)}=T_{e(t)}^{l(t)}T_g^{e(t)}T_g^{e(t-1)^{-1}}T_{e(t-1)}^{l(t-1)^{-1}}Tl(t−1)l(t)=Te(t)l(t)Tge(t)Tge(t−1)−1Te(t−1)l(t−1)−1
在V2版本中通过2D特征给3D位置编码做attention优化,也就是使用下图中的结构实现:
2.2.2 鲁棒性分析
此外,文章还分析了相机外参、相机缺失、时序对齐异常情况进行分析,从下表中可以观察网络的鲁棒性:
3. 下游任务
3.1 PETR-V1
在V1版本中下游检测任务DETR的anchor point类型和transformer decoder中points-num对向能的影响:
PETR收敛性和速度分析:
在nuScenes test下的性能比较:
3.2 PETR-V2
V2的版本在V1基础上添加了分割分支,这里为了减少计算量对分割query的数量进行限制,使用一个query代表一个16∗1616*1616∗16大小的网格,之后这个query负责这个区域的分割任务,其流程见下图所示:
nuScenes下检测检测性能比较:
nuScenes下分割性能比较:
BEV感知PETR-V1和PETR-V2相关推荐
- 自动驾驶中的BEV感知与建图小记
作者 | 石桥 编辑 | 汽车人 原文链接:https://zhuanlan.zhihu.com/p/597554089? 点击下方卡片,关注"自动驾驶之心"公众号 ADAS巨卷 ...
- 首篇!无相机参数BEV感知!(北航、地平线)
点击下方卡片,关注"自动驾驶之心"公众号 ADAS巨卷干货,即可获取 点击进入→自动驾驶之心[3D目标检测]技术交流群 后台回复[3D检测综述]获取最新基于点云/BEV/图像的3D ...
- 修改linux资源限制参数命令,Linux的资源限制功能cgroups v1和cgroups v2的详细介绍
cgroups - Linux control groups 早些时候简单了解过cgroup( Linux中cgroup的初级方法 ),当时了解地太浅了,想要做一些或调查一些和cgroup有关的问题时 ...
- python数字图像的行 宽的不同处 cv2.resize(1389,1500) p1列宽 p2 行高 stop2.shape 得(640,960,3) v1列宽 v2 行高 v3 通道数
python数字图像的行 宽的不同处 cv2.resize(1389,1500) p1列宽 p2 行高 stop2.shape 得(640,960,3) v1列宽 v2 行高 v3 通道数
- 细说Android apk四代签名:APK v1、APK v2、APK v3、APK v4
目录 简介 APK v1 APK v2 APK v3 APK v4 总结 简介 大部分开发者对apk签名还停留在APK v2,对APK v3和APK v4了解很少,而且网上大部分文章讲解的含糊不清,所 ...
- Kinect v1和Kinect v2的彻底比较
本连载主要是比较Kinect for Windows的现行版(v1)和次世代型的开发者预览版(v2),以C++开发者为背景介绍进化的硬件和软件.本文主要是对传感的配置和运行条件进行彻底的比较. 本连载 ...
- BEV感知,是下一代自动驾驶感知算法风向吗?
1 背景 在现代自动驾驶任务中,决策规划模块依赖于多个感知.预测任务模块以提供充足的环境信息,其中感知任务不仅需要检测场景中的动态物体,还需要识别道路边界.人行横道.车道线.路标等静态元素.而预测任务 ...
- 目标检测:YOLO V1、YOLO V2、YOLO V3 算法
日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) yoloV3模型 目标检测:YOLO V1.YOLO V2.Y ...
- 招聘Bev感知实习生
工作职责: 1.负责Bev感知算法调研和运用: 2.负责模型量化部署. 职位要求: 1.熟悉Bevformer/BevFusion等深度学习网络结构: 2.熟悉C++/Python程序开发: 3.具有 ...
最新文章
- UVA 1376	 Animal Run 最短路
- JS 触发服务器事件
- 关于jdk1.5之后的自定拆装箱
- 做一个常规的banner图——负边距的使用、banner图的拼法
- 数据库中,连接有哪些不同类型?请说明这些类型之间的差异,以及为何在某些情形下,某种连接会比较好。...
- 制作透明的图标ICO
- mysql查询字段转型_mysql转型
- 转 五种提高 SQL 性能的方法
- SSL/TLS的X.509证书
- 洛谷P3764 签到题 III
- armv6、armv7、armv7s、armv8、armv64及其i386、x86_64区别
- linux 的vi命令详解,Linux vi 命令详解
- 手机看html 图片,手机HTML怎么看
- LogViewer-Unity日志的插件
- 硬件结构框架_北桥_带宽
- BeanFactory和ApplicationContext的异同点
- 陆奇:开源开发是更优越的开发方式
- 重温经典(三)-百年思索
- linux办公文件格式,Linux终端文件类型与颜色
- web安全性测试——XSS跨站攻击