【论文笔记】RCM-Fusion: Radar-Camera Multi-Level Fusion for 3D Object Detection

news2024/11/16 21:28:18

原文链接: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} FRRH×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} QRGRH×W×C。具体来说,将 F R F_R FR与BEV查询 Q ∈ R H × W × C Q\in\mathbb{R}^{H\times W\times C} QRH×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 ukR3。引入逐点的分数向量 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);δ(cuk)])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=0T1按如下方式被生成在位置 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<ρmaxvtanρmaxgkt=γ(T1t21)vtanvtan+uk,t=0,,T1
本文沿速度切向( 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(FmptsFmimg)上述提案特征会与初始提案特征融合进行3D提案的修正。

3.4. 雷达数据预处理

  本文通过降低判断雷达点是否有效的严格性和多帧积累(进行自车运动补偿和点运动补偿)增加雷达点云的密度。

4. 实验

4.2. 实施细节

  图像分支使用FCOS3D的预训练权重,雷达分支从头训练。训练时使用类别平衡策略CBGS。

4.3. 数据增广

  通过关联雷达点与图像像素,使用图像数据增广和BEV数据增广;在极坐标下使用GT增广,并使用方法增加非空(即含雷达点的)真实边界框的数量。

4.4. nuScenes数据集上的结果

  本文方法的性能能大幅超过基于相机的和基于相机-雷达融合的方法。

4.5. nuScenes验证集上的消融实验

  组件分析:RGBQ能带来最高的性能提升,而RCG,RGPP和RPA能带来少量性能提升。
  雷达网格点采样的作用:与不适用网格点的方法以及常规网格点生成方法相比,本文的自适应网格点生成方法的性能最优。常规网格点的生成会受到稀疏雷达的特性影响,而导致某些网格点周围不含雷达点,从而减少有效网格点的数量。
  数据增广:图像数据增广和BEV数据增广均能显著增加性能;极坐标GT增广能略微增加性能。
  雷达点过滤:通过适当过滤原始雷达点能带来一定的性能提升。

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

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

相关文章

Cursor 基于GPT的代码生成工具

Cursor 基于GPT的代码生成工具 前言 Humans should focus on bigger problems. --- 来自Cursor介绍 Cursor.so是一款基于GPT的代码生成工具&#xff0c;它可以帮助开发者快速生成代码&#xff0c;甚至可以在生成的代码标记询问代码的作用&#xff0c;不需要科学上网可以试用&…

智能视频监控平台EasyCVR电子地图视频播放全屏情况下的异常排查与解决

安防视频监控平台TSINGSEE青犀视频EasyCVR可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。 在视频监控管理平台TSINGSEE青…

Sql优化-为什么SQL语句逻辑相同,性能却差异巨大?

根据极客时间学习的资料思考整理&#xff0c;有三个案例&#xff0c;我们根据案例了解一下为什么性能好或不好&#xff0c;希望下次我们再写SQL的时候能够注意&#xff0c;能够写出一个比较完美的SQL&#xff01; 案例一&#xff1a;条件字段函数操作 假设现在有一个表是交易…

Boyer-Moore 投票算法

这里先贴题目&#xff1a; Boyer-Moore 投票算法&#xff1a; 通俗点来讲&#xff0c;就是占领据点&#xff0c;像攻城那样&#xff0c;对消。 当你的据点有人时对消&#xff0c;无人时就占领。 这道题使用该算法可实现时间复杂度为O(n),空间复杂度为O(1)&#xff0c;接下来看…

03 linux之shell 编程

变量 语言型 编译型语言 解释型语言 shell脚本语言是解释型语言shell脚本的本质&#xff1a;shell命令的有序集合 shell 编程的基本过程 基本过程分为三步&#xff1a; step1. 建立 shell 文件 包含任意多行操作系统命令或shell命令的文本文件; step2. 赋予shell文件执行…

大学如何自学嵌入式开发?

当然可以&#xff0c;不过需要非常人的毅力和耐心&#xff01; 嵌入式学习既可以打击得让你很自卑&#xff0c;也可以让你感觉自己无所不能。因为&#xff0c;嵌入式伴随的是一系列的问题&#xff0c;这些问题对初学者来说是一把双刃剑&#xff0c;如果你第一个问题解决了&…

C++【day7】

#include <iostream>using namespace std;template <typename T> class Myvector {private:T * first;T * last;T * end;public://构造函数Myvector(){first nullptr;last nullptr;end nullptr;}//析构函数~Myvector(){delete [] first;}//拷贝构造Myvector(con…

开发一个简单的数据库路由进行分库分表

今天我们来看看一个简单的数据库路由组件要怎么开发出来&#xff0c;这篇文章分为几个步骤进行介绍&#xff0c;分别为&#xff1a; 什么是数据库路由 路由组件的作用为什么要自研组件需要用到什么技术 整体的业务流程主要代码 介绍 数据库路由的作用 使用数据库路由是在业…

腾讯 SpringBoot 高阶笔记,限时开源 48 小时,真香警告

众所周知&#xff0c;SpringBoot 最大的一个优势就是可以进行自动化配置&#xff0c;简化配置&#xff0c;不需要编写太多的 xml 配置文件&#xff1b;基于 Spring 构建&#xff0c;使开发者快速入门&#xff0c;门槛很低&#xff1b;SpringBoot 可以创建独立运行的应用而不需要…

Normalization(BN and LN) in NN

Batch Normalization 称为批标准化。批是指一批数据&#xff0c;通常为 mini-batch&#xff1b;标准化是处理后的数据服从 N ( 0 , 1 ) N(0,1) N(0,1) 的正态分布。在训练过程中&#xff0c;数据需要经过多层的网络&#xff0c;如果数据在前向传播的过程中&#xff0c;尺度发…

IO模型、javaIO

介绍 网络通讯&#xff0c;一台计算机给另一台计算机传输数据&#xff0c;中间过程就叫做通信&#xff0c;也就是通过IO接口输入输出到另一台计算机&#xff0c;这个就叫做网络IO. 文件描述符&#xff08;File descriptor&#xff09; 是计算机科学中的一个术语&#xff0c;是…

Spring核心概念、IoC和DI的认识、Spring中bean的配置及实例化、bean的生命周期

初始Spring 一、Spring核心概念1.1IoC(Inversion of Contral)&#xff1a;控制反转1.2IoC代码实现1.2DI代码实现 二、bean的相关操作2.1bean的配置2.1.1bean的基础配置2.1.2bean的别名配置2.1.3bean的作用范围配置 2.2bean的实例化 - - 构造方法2.3bean的实例化 - - 实例工厂与…

windows中注册redis服务启动时报1067错误

注册完redis服务&#xff0c;打开计算机 服务时确实有redis服务存在&#xff0c;但是点击启动时却报1067错误&#xff0c;而命令行用redis-server.exe redis.windows.conf 命令却也可以启动 查看6379的端口也没有被占用&#xff08;netstat -ano | findstr :6379&#xff09; …

【LeetCode】98.验证二叉搜索树

题目 给你一个二叉树的根节点 root &#xff0c;判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下&#xff1a; 节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。 示例 1&#xff1a…

怎么在树莓派上搭建web网站,并发布到外网可访问?

文章目录 怎么在树莓派上搭建web网站&#xff0c;并发布到外网可访问&#xff1f;概述使用 Raspberry Pi Imager 安装 Raspberry Pi OS测试 web 站点安装静态样例站点 将web站点发布到公网安装 Cpolarcpolar进行token认证生成cpolar随机域名网址生成cpolar二级子域名将参数保存…

servlet基本使用

1.创建web项目&#xff08;新版本idea中首先新创建新项目&#xff0c;再在新项目中选中添加框架支持&#xff0c;即可生成web项目&#xff09; 2.接下来我们可以来编写代码&#xff0c;我们在源文件下创建包后再创键类 我们想要利用servlet&#xff0c;可以通过三种方式来实现 …

Mybatis 支持复杂类型方式List<String>

设置 autoResultMap true TableField(value "enums", typeHandler JacksonTypeHandler.class) <id column"enums" property"enums" typeHandler"com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler" />

Appium+python自动化(二十六)- Toast提示(超详解)简介

开始今天的主题 - 获取toast提示 在日常使用App过程中&#xff0c;经常会看到App界面有一些弹窗提示&#xff08;如下图所示&#xff09;这些提示元素出现后等待3秒左右就会自动消失&#xff0c;这个和我日常生活中看到的烟花和昙花是多么的相似&#xff0c;那么我们该如何获取…

在Ail Linux中手动配置IPv6

第一步&#xff0c;登录阿里云服务器控制台&#xff0c;在“概览”页面找到对应实例&#xff0c;然后单击实例ID。 第二步&#xff0c;在“实例详情”页面中的“网络信息”栏目中&#xff0c;可以发现“IPv6 地址”中没有数据&#xff0c;然后单击“专有网络”的专有网络ID。 第…

(学习笔记-系统结构)Linux内核与windows内核

内核 计算机是由各种外部硬件设备组成的&#xff0c;比如内存、CPU、硬盘等&#xff0c;如果每个应用都要和这些硬件设备对接通信协议&#xff0c;那这样太累了&#xff0c;所以这个中间人由内核来负责&#xff0c;让内核作为应用连接硬件设备的桥梁&#xff0c;应用程序只关心…