【论文笔记】RCM-Fusion: Radar-Camera Multi-Level Fusion for 3D Object Detection
原文链接:https://arxiv.org/abs/2307.10249
1. 引言
目前的一些雷达-相机融合3D目标检测方法进行实例级的融合,从相机图像生成3D提案,并与雷达点云相关联以修正提案。但这种方法没有在最初阶段使用雷达,依赖于相机3D检测器;且融合发生在图像视图,多模态数据关联可能因为雷达点云的高度模糊性而不精确。
本文提出雷达-相机多级融合(RCM-Fusion)方法,在BEV融合特征。首先会进行特征级融合,使用雷达数据指导图像特征变换到BEV下,并生成3D边界框。然后使用基于网格点的提案特征融合,进行实例级融合以修正提案,
对于特征级融合,本文设计了雷达指导的BEV查询,使用雷达的位置信息将图像特征转换到BEV。然后雷达-相机门控模块加权聚合多模态BEV特征。这种自适应特征聚合模块被整合到Transformer中,解码密集的BEV查询特征。对于实例级融合,提出提案感知的雷达注意力模块,考虑雷达点与3D提案的相关性,获取雷达点特征。
2. 相关工作
2.3. 两阶段3D目标检测
基于激光雷达的两阶段3D目标检测器利用提案框内的激光雷达点云来修正提案。可分两种方法:第一种方法将与提案相关的一些点视为关键点,使用PointNet++基于关键点提取特征。第二种方法定义一组虚拟点,称为网格点,并基于网格点提取特征。本文认为考虑提案内的点云分布是两阶段检测器的关键部分,使用网格点方法根据点云分布生成关键点。
3. 方法
网络结构如下图所示。
3.1. 雷达和图像主干
使用ResNet-101和FPN提取多尺度图像特征 F C F_C FC;使用PointPillars提取雷达BEV特征图 F R ∈ R H × W × C F_R\in\mathbb{R}^{H\times W\times C} FR∈RH×W×C。
3.2. 雷达指导的BEV编码器
首先使用 F R F_R FR生成雷达指导的BEV查询(RGBQ),该查询包含雷达的位置信息。然后,使用RGBQ将多模态特征转换为增强BEV特征。最后,雷达-相机门控(RCG)根据各模态的信息量,进行多模态的门控聚合。
雷达指导的BEV查询:本文利用雷达的位置信息,使用 F R F_R FR生成BEV查询(RGBQ) Q R G ∈ R H × W × C Q^{RG}\in\mathbb{R}^{H\times W\times C} QRG∈RH×W×C。具体来说,将 F R F_R FR与BEV查询 Q ∈ R H × W × C Q\in\mathbb{R}^{H\times W\times C} Q∈RH×W×C拼接后通过可变形注意力(DeformAttn)模块生成 Q R G Q^{RG} QRG: Q p R G = ∑ V ∈ { Q , F R } DeformAttn ( Q p , p , V ) Q_p^{RG}=\sum_{V\in\{Q,F_R\}}\text{DeformAttn}(Q_p,p,V) QpRG=V∈{Q,FR}∑DeformAttn(Qp,p,V)其中 Q p R G Q_p^{RG} QpRG和 Q p Q_p Qp分别表示BEV像素 p = ( x , y ) p=(x,y) p=(x,y)处的查询。然后 Q p R G Q_p^{RG} QpRG通过空间交叉注意力(SCA)块生成修正的相机BEV特征 B C B_C BC和修正的雷达BEV特征 B R B_R BR: B C = SCA C ( Q p R G , F C ) B R = SCA R ( Q p R G , F R ) B_C=\text{SCA}_C(Q_p^{RG},F_C)\\B_R=\text{SCA}_R(Q_p^{RG},F_R) BC=SCAC(QpRG,FC)BR=SCAR(QpRG,FR)其中SCA是将 Q p R G Q_p^{RG} QpRG投影到模态特征然后进行可变形交叉注意力的操作。
雷达-相机门控:通过加权组合融合 B C B_C BC与 B R B_R BR: B R C = { σ ( Conv C [ B C ; B R ] ) ⊙ B C } ⊕ { σ ( Conv R [ B R ; B C ] ) ⊙ B R } B_{RC}=\{\sigma(\text{Conv}_C[B_C;B_R])\odot B_C\}\oplus\{\sigma(\text{Conv}_R[B_R;B_C])\odot B_R\} BRC={σ(ConvC[BC;BR])⊙BC}⊕{σ(ConvR[BR;BC])⊙BR}其中 B R C B_{RC} BRC表示融合BEV特征图, σ ( ⋅ ) \sigma(\cdot) σ(⋅)表示sigmoid函数, ⊙ \odot ⊙、 ⊕ \oplus ⊕和 [ ⋅ ; ⋅ ] [\cdot;\cdot] [⋅;⋅]分别表示按元素乘法、按元素加法和通道拼接。然后, B R C B_{RC} BRC以和基准方案BEVFormer相同的方式,通过归一化和前馈网络。重复BEV编码器(本节所有内容) L L L次后,生成最终的BEV特征图。和BEVFormer相比,本文的方法可以生成更精确的BEV特征图(特征更集中在真实边界框附近),而前者缺少足够的深度信息。
3.3. 雷达网格点修正
提案感知的雷达注意力(PRA)将3D提案和相关联的雷达点云作为输入,使用基于MLP的注意力决定每个点的重要程度。然后使用雷达网格点池化(RGPP),考虑雷达点的特性和分布采样网格点,并将雷达点和多尺度图像的特征聚合到网格点中,生成细化特征。细化特征和初始提案特征组合产生最终输出。
提案感知的雷达注意力:使用CRAFT中的软极性关联(SPA)将雷达点与3D提案关联。首先将3D提案和雷达点转换到极坐标系下,然后将径向距离和水平角均在一定范围内的雷达点与3D提案关联。但这样会使更多的点与3D提案关联,因为该范围比3D提案更大。引入PRA,设 b = ( c , w , l , h , θ , v pred ) b=(\mathbf{c},w,l,h,\theta,\mathbf{v}_\text{pred}) b=(c,w,l,h,θ,vpred)表示一个3D提案,其中心位置为 c \mathbf{c} c,3D尺寸为 ( w , l , h ) (w,l,h) (w,l,h),朝向角为 θ \theta θ,速度为 v pred \mathbf{v}_\text{pred} vpred。与 b b b相关联的 K K K个雷达点记为 { r k } k = 1 K \{r_k\}_{k=1}^K {rk}k=1K,其中第 k k k个点的位置为 u k ∈ R 3 \mathbf{u}_k\in\mathbb{R}^3 uk∈R3。引入逐点的分数向量 s k s_k sk来决定每个点的重要程度,得到被关注的雷达点特征 a k a_k ak: s k = MLP 2 ( [ MLP 1 ( r k ) ; δ ( c − u k ) ] ) a k = Softmax ( s k ) ⊙ MLP 3 ( r k ) s_k=\text{MLP}_2([\text{MLP}_1(r_k);\delta(\mathbf{c}-\mathbf{u}_k)])\\a_k=\text{Softmax}(s_k)\odot\text{MLP}_3(r_k) sk=MLP2([MLP1(rk);δ(c−uk)])ak=Softmax(sk)⊙MLP3(rk)其中MLP沿通道维度处理, δ ( ⋅ ) \delta(\cdot) δ(⋅)表示位置编码。
雷达网格点池化:网格点的位置和数量对基于网格点的修正模块来说是最重要的。考虑到雷达点的位置误差和稀疏程度,本文提出RGPP。如上图所示,3D提案的速度向量 v pred \mathbf{v}_\text{pred} vpred可分解为切向速度 v tan \mathbf{v}_\text{tan} vtan和径向速度 v rad \mathbf{v}_\text{rad} vrad。对第 k k k个雷达点 r k r_k rk, T T T个网格点 { g k t } t = 0 T − 1 \{g_k^t\}_{t=0}^{T-1} {gkt}t=0T−1按如下方式被生成在位置 u k \mathbf{u}_k uk附近: γ = { ρ min , ∣ v tan ∣ ≤ ρ min ∣ v tan ∣ , ρ min < ∣ v tan ∣ < ρ max ρ max , ∣ v tan ∣ ≥ ρ max g k t = γ ⋅ ( t T − 1 − 1 2 ) ⋅ v tan ∣ v tan ∣ + u k , t = 0 , ⋯ , T − 1 \gamma=\left\{\begin{matrix} \rho_{\min}, & |\mathbf{v}_{\tan}|\leq\rho_{\min}\\ |\mathbf{v}_{\tan}|, & \rho_{\min}<|\mathbf{v}_{\tan}|<\rho_{\max}\\ \rho_{\max}, & |\mathbf{v}_{\tan}|\geq\rho_{\max} \end{matrix}\right.\\g_k^t=\gamma\cdot \left(\frac{t}{T-1}-\frac{1}{2}\right)\cdot \frac{\mathbf{v}_{\tan}}{|\mathbf{v}_{\tan}|}+\mathbf{u}_k, \;\;\; t=0,\cdots,T-1 γ=⎩ ⎨ ⎧ρmin,∣vtan∣,ρmax,∣vtan∣≤ρminρmin<∣vtan∣<ρmax∣vtan∣≥ρmaxgkt=γ⋅(T−1t−21)⋅∣vtan∣vtan+uk,t=0,⋯,T−1
本文沿速度切向( v tan \mathbf{v}_{\tan} vtan)创建网格点,这是因为雷达点通常在切向更具噪声。网格点的距离与切向速度 v tan \mathbf{v}_{\tan} vtan的大小相关。这样,对该3D提案有 K T KT KT个网格点。然后使用最远点采样选择 M M M个网格点 { g m } m = 1 M \{g_m\}_{m=1}^M {gm}m=1M。
然后使用集合抽象(SetAbs)编码每个网格点 g m g_m gm周围的雷达点,得到雷达点特征 F m pts F_m^\text{pts} Fmpts: F m pts = SetAbs ( { a k } k = 1 K , { r k } k = 1 K , g m ) F_m^\text{pts}=\text{SetAbs}(\{a_k\}_{k=1}^K,\{r_k\}_{k=1}^K,g_m) Fmpts=SetAbs({ak}k=1K,{rk}k=1K,gm)同时,网格点被投影到图像特征图 F C F_C FC上通过双线性采样得到图像特征 F m img F_m^\text{img} Fmimg: F m img = Bilinear ( F C , proj ( g m ) ) F_m^\text{img}=\text{Bilinear}(F_C,\text{proj}(g_m)) Fmimg=Bilinear(FC,proj(gm))其中 proj ( ⋅ ) \text{proj}(\cdot) proj(⋅)表示投影过程。最后按下式获得提案特征: F m obj = maxpool ( F m pts ⊕ F m img ) F_m^\text{obj}=\text{maxpool}(F_m^\text{pts}\oplus F_m^\text{img}) Fmobj=maxpool(Fmpts⊕Fmimg)上述提案特征会与初始提案特征融合进行3D提案的修正。
3.4. 雷达数据预处理
本文通过降低判断雷达点是否有效的严格性和多帧积累(进行自车运动补偿和点运动补偿)增加雷达点云的密度。
4. 实验
4.2. 实施细节
图像分支使用FCOS3D的预训练权重,雷达分支从头训练。训练时使用类别平衡策略CBGS。
4.3. 数据增广
通过关联雷达点与图像像素,使用图像数据增广和BEV数据增广;在极坐标下使用GT增广,并使用方法增加非空(即含雷达点的)真实边界框的数量。
4.4. nuScenes数据集上的结果
本文方法的性能能大幅超过基于相机的和基于相机-雷达融合的方法。
4.5. nuScenes验证集上的消融实验
组件分析:RGBQ能带来最高的性能提升,而RCG,RGPP和RPA能带来少量性能提升。
雷达网格点采样的作用:与不适用网格点的方法以及常规网格点生成方法相比,本文的自适应网格点生成方法的性能最优。常规网格点的生成会受到稀疏雷达的特性影响,而导致某些网格点周围不含雷达点,从而减少有效网格点的数量。
数据增广:图像数据增广和BEV数据增广均能显著增加性能;极坐标GT增广能略微增加性能。
雷达点过滤:通过适当过滤原始雷达点能带来一定的性能提升。
相关文章:

【论文笔记】RCM-Fusion: Radar-Camera Multi-Level Fusion for 3D Object Detection
原文链接:https://arxiv.org/abs/2307.10249 1. 引言 目前的一些雷达-相机融合3D目标检测方法进行实例级的融合,从相机图像生成3D提案,并与雷达点云相关联以修正提案。但这种方法没有在最初阶段使用雷达,依赖于相机3D检测器&…...
STM32-风速传感器(ADC)
目录 0 说明 1 传感器介绍 2 代码说明 2.1 ADC.c 2.2 adc.h 2.3 main.c 0 说明 本篇文章主要是说明怎么使用STM32单片机读取风速传感器采集到的数据,读取方式是ADC,并且附带着STM32所需要的全部代码,所使用的风速传感器如下图所示。 附&am…...
【conda】配置国内镜像源
【conda】配置国内镜像源 1、官方2、国内常用镜像3、配置查看当前conda配置设置搜索是显示通道地址 4、清除缓存5、恢复默认全部删除指定删除 1、官方 https://docs.conda.io/projects/conda/en/latest/configuration.html 2、国内常用镜像 https://developer.aliyun.com/mi…...

python森林生物量(蓄积量)数据处理到随机森林估算全流程
python森林生物量(蓄积量)估算全流程 一.哨兵2号获取/处理/提取数据1.1 影像处理与下载采用云概率影像去云采用6S模型对1C级产品进行大气校正geemap下载数据到本地NDVI 1.2 各种参数计算(生物物理变量、植被指数等)LAI:…...

使用Freemarker模版导出xls文件使用excel打开提示文件损坏
本文是通过一步步的还原事件的发生并解决的一个过程记录,如果想知道如何解决的可以直接跳转文章末尾结论部分 提示一下,关注一下 Table 标签中的 ss:ExpandedRowCount 属性 解决的问题 在项目中使用freemarker的xml模板导出xls格式的Excel文件时…...

初识Linux
今天简单了解了关于操作系统的发展史,学习了在Linux中如何远程连接云服务器的指令,以及在Linux中创建多个用户的指令。 1. ssh root 服务器远程地址 作用是用来连接XShell与云服务器,输入该指令后会自动生成输入密码的窗口,如…...

python——案例六:清空列表用clear()方法实现
案例六:清空列表用clear()方法实现LIST[0,1,2,3,4,5] print(清空前:,LIST) LIST.clear() print(清空后:,LIST)...

测试|Selenium之WebDriver常见API使用
测试|Selenium之WebDriver常见API使用 文章目录 测试|Selenium之WebDriver常见API使用1.定位对象(findElement)css定位xpath定位css选择器语法:xpath语法:校验结果 2.操作对象鼠标点击对象在对象上模拟按键输入clear清除对象输入的文本内容su…...

手把手教你uniapp和小程序分包
分包目的在于提高小程序的体积,多一个包就多2M,最多20M 常规的分包: 小程序一打开首先加载主包,然后再加载分包 分包可以用主包内的资源,主包不可以使用分包的资源 分包A不可以使用分包B里面的内容 分包可以使用a…...

Java中的代理模式
Java中的代理模式 1. 静态代理2. JDK动态代理3. CGLib动态代理 1. 静态代理 接口 public interface ICeo {void meeting(String name) throws InterruptedException; }目标类 public class Ceo implements ICeo{public void meeting(String name) throws InterruptedExcepti…...

LeetCode每日一题——1331.数组序号转换
题目传送门 题目描述 给你一个整数数组 arr ,请你将数组中的每个元素替换为它们排序后的序号。 序号代表了一个元素有多大。序号编号的规则如下: 序号从 1 开始编号。一个元素越大,那么序号越大。如果两个元素相等,那么它们的…...

2、Tomcat介绍(下)
组件分类 在Apache Tomcat中,有几个顶级组件,它们是Tomcat的核心组件,负责整个服务器的运行和管理。这些顶级组件包括: Server(服务器):Tomcat的server.xml配置文件中的<Server>元素代表整个Tomcat服务器实例。每…...

JAVA 正则表达式(heima)
JAVA 正则表达式(heima) public class RegexDemo01 {/** 正则表达式介绍:本质来说就是一个字符串,字符串中可以指定规则,来对其他字符串进行校验。* public boolean matches(String regex):根据传入的正则表达式&#…...

布瑞特单圈绝对值旋转编码器串口数据读取
布瑞特单圈绝对值旋转编码器串口数据读取 数据手册:http://briter.net/col.jsp?id109 (2.1版本RS485说明书通信协议 单圈.pdf) 绝对式编码器为布瑞特BRT38-ROM16384-RT1,采用RS485通信。 该绝对式编码器共有5根线:红、黄、黑、绿、白 由…...

Linux第六章之vim与gcc使用
一、Linux编辑器-vim使用 vi/vim的区别简单点来说,它们都是多模式编辑器,不同的是vim是vi的升级版本,它不仅兼容vi的所有指令,而且还有一些新的特性在里面。例如语法加亮,可视化操作不仅可以在终端运行,也…...

【Golang】Golang进阶系列教程--为什么说 Go 语言字符串是不可变的?
文章目录 前言推荐阅读 前言 最近有读者留言说,平时在写代码的过程中,是会对字符串进行修改的,但网上都说 Go 语言字符串是不可变的,这是为什么呢? 这个问题本身并不困难,但对于新手来说确实容易产生困惑…...

ES开启身份认证
文章目录 X-Pack简介之前的安全方案ES开启认证ES服务升级https协议开启集群节点之间的证书认证 X-Pack简介 X-Pack是Elastic Stack扩展功能,提供安全性,警报,监视,报告,机器学习和许多其他功能。 X-Pack的发展演变&am…...

Docker安装es以及ik分词器
1、拉取镜像 docker pull elasticsearch:7.10.12、下载对应版本的ik分词、并将它们解压到ik文件夹下,如图 https://github.com/medcl/elasticsearch-analysis-ik/releases 3、在服务器上创建文件夹 mkdir /usr/elklog/elk/es mkdir /usr/elklog/elk/es/data mkdi…...
中断、进程调度、进程切换、系统调用,模式切换的那些事情
提示:风萧声动,玉壶光转,一夜鱼龙舞 文章目录 前言中断进程调度进程切换线程切换模式切换所以他们有什么关系? 前言 本文内容主要参考以下几个博文中学得 进程与线程(中)的2.2.7 进程切换VS模式切换&#…...

使用web-view实现网页端和uni-app端是数据传输
要实现这个功能 第一步:要在vue的public文件夹下面引入 <script type"text/javascript" src"https://js.cdn.aliyun.dcloud.net.cn/dev/uni-app/uni.webview.1.5.2.js"></script> 第二步:建立一个新的空的uni-app项目…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...

RocketMQ延迟消息机制
两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数,对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后…...

MongoDB学习和应用(高效的非关系型数据库)
一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...

基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...
2024年赣州旅游投资集团社会招聘笔试真
2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...
鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南
1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发,使用DevEco Studio作为开发工具,采用Java语言实现,包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...
Java 二维码
Java 二维码 **技术:**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...
蓝桥杯 冶炼金属
原题目链接 🔧 冶炼金属转换率推测题解 📜 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V,是一个正整数,表示每 V V V 个普通金属 O O O 可以冶炼出 …...