(已开源-AAAI25) RCTrans:雷达相机融合3D目标检测模型

在这里插入图片描述
在雷达相机融合三维目标检测中,雷达点云稀疏、噪声较大,在相机雷达融合过程中提出了很多挑战。为了解决这个问题,我们引入了一种新的基于query的检测方法 Radar-Camera Transformer (RCTrans)。具体来说:

  • 首先设计了一个雷达稠密编码器来丰富稀疏的有效的雷达token,然后将它们与图像token拼接起来。通过这样做可以充分挖掘每个感兴趣区域的3D信息,减少融合阶段空token的干扰。
  • 然后设计了一个剪枝顺序解码器,根据获得的token和随机初始化的query来预测 3D 框。为了缓解雷达点云中高度测量值的歧义,我们通过顺序融合结构逐步定位物体的位置。它有助于在token和query之间获得更精确和更灵活的对应关系。
  • 解码器采用剪枝训练策略,在推理过程中可以节省很多时间,抑制query失去独特性。在大规模nuScenes数据集上的大量实验表明了该方法的优越性,获得了新的SOTA的雷达相机融合3D检测结果。

项目链接:https://github.com/liyih/RCTrans


Introduction

引言和相关工作部分这里就不介绍了,在原文中作者提出了雷达传感器的两个主要缺陷:稀疏和噪声大,这也是目前量产雷达最主要的痛点。导致非空的雷达pillars数量大概是激光雷达Pillars数量的10%。图一中作者比较了RCTrans模型和目前纯视觉以及相机雷达融合模型的对比,可以看到同等配置下,RCTrans都是优于RCBEVDet,在推理速度上略慢于RCBEVDet。

在这里插入图片描述


Method

RCTrans模型框图如图2所示,首先使用两个并行分支(雷达与图像分支)提取多模态token。在雷达分支中,我们将使用雷达稠密编码器来生成稠密有效的雷达特征。然后,position embedding添加到token中。最后,随机初始化的query将被发送到 Pruning Sequential Decoder 和token一起预测 3D 框。整个训练是一个端到端的过程,不需要冻结任何参数,模型具体细节可以参考StreamPETR和FUTR3D。
在这里插入图片描述
这里介绍下雷达稠密编码器,如下图所示。我们的目标是找到一个结构简单的网络,可以自适应地填充每个BEV雷达网格和聚合多尺度信息,以促进不同大小的目标检测。自适应填充每个 BEV 网格的最简单方法是使用全局自注意力机制。然而,由于BEV网格数量较多,该方法耗时较长。为了解决这个问题,首先对原始的BEV特征进行下采样,并在最小分辨率与它们交互。同时,下采样过程可以大大减少无效网格的数量,从而提高交互后获得的特征质量。受 U-Net的启发,我们以相同的 BEV 分辨率连接不同感受野大小的特征,有效地保留了不同大小的对象的特征,这里做了三次下采样和三次上采样。对最小分辨率做自注意力时,添加了2D position embedding。

在这里插入图片描述
下面介绍下position embedding的生成,对于图像position embedding,我们使用PETR中提出的3D位置嵌入。给定一个图像token T i T_i Ti,一系列点 p ( u , v ) = p i ( u , v ) = ( u × d i , v × d i , d i , 1 ) , i = 1 , 2 , 。 . . , d p(u, v) = p_i (u, v) = (u \times d_i, v \times d_i, d_i, 1), i = 1, 2,。.., d p(u,v)=pi(u,v)=(u×di,v×di,di,1),i=1,2,..,d 为定义在相机视锥空间中的点。这里, u u u v v v 是token在图像空间中的索引, d d d 是沿深度轴的点数。之后,通过下列公式计算图像位置嵌入:
P E i m = Φ i m ( K p ( u , v ) ) , P E_{i m}=\Phi_{i m}(K p(u, v)), PEim=Φim(Kp(u,v)),

其中 K K K是相机内参矩阵, Φ i m \Phi_{i m} Φim MLP网络。由于雷达无法获得物体的精确高度信息,对于雷达位置嵌入,我们使用二维BEV嵌入,忽略BEV网格的高度信息。雷达位置嵌入由式下列公式计算而来:
P E r a = Φ r a ( Ψ ( h , w ) ) P E_{r a}=\Phi_{r a}(\Psi(h, w)) PEra=Φra(Ψ(h,w))

其中 ( h , w ) (h, w) (h,w)为BEV网格的2D坐标, Φ r a \Phi_{r a} Φra为MLP网络, Ψ ( h , w ) \Psi(h, w) Ψ(h,w) 为正弦余弦函数。通过位置嵌入,不同模态的信息可以隐式地与三维空间中的目标query对齐。

关于本文提出的剪枝顺序解码器,首先初始化了在3D空间可学习的n个query参考点,对应query特征初始化为0。query位置投影到雷达空间可以用下面公式来投影:
{ r x i ′ = r x i × ( x max ⁡ − x min ⁡ ) + x min ⁡ r y i ′ = r y i × ( y max ⁡ − y min ⁡ ) + y min ⁡ r z i ′ = r z i × ( z max ⁡ − z min ⁡ ) + z min ⁡ \left\{\begin{aligned} r_{x i}^{\prime} & =r_{x i} \times\left(x_{\max }-x_{\min }\right)+x_{\min } \\ r_{y i}^{\prime} & =r_{y i} \times\left(y_{\max }-y_{\min }\right)+y_{\min } \\ r_{z i}^{\prime} & =r_{z i} \times\left(z_{\max }-z_{\min }\right)+z_{\min } \end{aligned}\right. rxiryirzi=rxi×(xmaxxmin)+xmin=ryi×(ymaxymin)+ymin=rzi×(zmaxzmin)+zmin

往图像上投影可以用下面的公式(3D空间到视锥空间):
R i m = K − 1 R r a R_{i m}=K^{-1} R_{r a} Rim=K1Rra

对应的3D和2D position embedding可以用如下公式表示:
P E 3 d = Φ i m ( R i m ) , P E 2 d = Φ r a ( Ψ ( R r a ) ) P E_{3d}=\Phi_{im}(R_{im}), P E_{2d}=\Phi_{ra}(\Psi(R_{ra})) PE3d=Φim(Rim),PE2d=Φra(Ψ(Rra))

本文提出将单层decoder分成两个小的decoder,并独立进行模态融合。

在每个解码器层的末尾,我们将预测query的位置。在下一层,新的位置嵌入将根据更新的位置生成。给定更新后的查询 F q n + 1 F^{n+1}_q Fqn+1 ,我们预测查询位置的偏移量 ΔR,更新后的位置 R n + 1 R_{n+1} Rn+1 可以通过 Rn + ΔR 计算。在每一层中,我们使用顺序结构来融合多模态信息,这导致解码器层数比传统的解码器要多2倍,会导致额外的推理时间。更重要的是,随着我们在每个解码器层之后更新query的位置,一些目标query可能逐渐位于同一个区域,并失去特征独特性。这会导致某些区域的信息被忽略,注意力机制可能无法学习有效的表示学习概念,从而阻止模型实现预期的性能改进。为此,我们提出了一种剪枝训练策略,该策略在训练期间使用 6 层解码器,在推理过程中仅使用 3 层解码器。


Experiments

实验部分,作者使用的数据集是nuScenes数据集,主要对比了3D检测指标和3D追踪指标。实验细节部分:

  • 基于StreamPETR和 MMDetection3D代码库实现 RCTrans。
  • 和CRN一样,将4帧历史帧的信息聚集到当前帧,使用StreamPETR中提出的以目标为中心的时间建模来进行时间融合。
  • 训练时解码器层数设置为 6,在推理过程中设置为3。在时间融合中,将剪枝后最后一层的输出插入到内存队列中。
  • query数量、内存队列大小和传播query的数量分别设置为 900、512 和 128。
  • 对于雷达,和CRAFT一样,聚集了6个过去雷达扫描帧,并将雷达点的最大数量设置为 2048。雷达 BEV 的大小设置为 128×128。
  • 在8个NVIDIA A100 GPU 上训练网络,训练epoch数量为90,批量大小为 32。速度在单个NVIDIA RTX3090 GPU 上进行评估。学校率初始值为 1 0 − 4 10^{-4} 104,优化器使用的是AdamW。

下面是在验证集和测试集上3D检测任务的性能对比:

在这里插入图片描述

在这里插入图片描述
如表1所示,本文们的方法在不同的图像主干网下取得了最好的性能,时间消耗略有增加。例如,当使用 Swin-T 作为主干网并将图像大小设置为 256×704 时,与SOTA雷达相机解决方案 RCBEVDet 相比,RCTrans将NDS 提高了 3.2%,mAP 提高了 2.4%,而延迟增加了大约 5 毫秒。

多个主干网的实验结果表明,RCTrans具有良好的适应性,在实际应用中有利于模型部署和迁移。更重要的是,RCTrans击败了所有纯视觉的检测方法,包括我们的视觉基线模型 StreamPETR,这证明了我们的方法可以有效地使用雷达信息来补充检测结果。在nuScenes测试集上如表2所示,RCTrans取得了64.7%的NDS和57.8%的mAP,优于所有其它方法。值得注意的是,RCTrans在mAVE上获得了巨大的性能提升,证明了模型从雷达数据中提取有用的速度补偿信息。

在这里插入图片描述
如表3所示,将RCTrans与nuScenes测试集上现有的相机和雷达相机跟踪解决方案进行了比较。总体而言,我们的方法产生了最好的结果。与CRN相比,我们的方法显着提高了 AMOTA、FP、FN 和 IDS。我们比较的跟踪结果都是基于CenterPoint中基于速度的最近距离匹配获得的,因此跟踪性能的提高主要是由于我们的方法更准确地预测速度

下面是消融实验,图像骨干网是ResNet50,分辨率是256x704。如表 4 所示,每个模块都可以持续提高性能。与单模态相比,使用多模态输入可以显着提高模型性能。与常用的BEV编码器,如SECOND相比,使用提出的雷达稠密编码器(RDE)可以获得1.3%的NDS和1.6%的mAP提高。更重要的是,剪枝顺序解码器 (PSD) 将 NDS 提高了 2.2%,mAP 提高了 2.7%。

在这里插入图片描述
在训练期间将解码器的数量设置为 6,在推理过程中仅使用前3层会导致出色的性能,同时将推理时间减少了17.7毫秒,同时将 NDS 提高了 0.2%。造成这种现象的原因是,在每一层之后重新计算position embedding可以快速获得准确的对齐和更快的收敛,但会使一些query集中在同一个区域。此外,通过顺序结构在每一层融合不同的模态信息将导致更多transformer层数,在推理过程中减少解码器层的数量可以加快推理过程,而不会降低性能。
在这里插入图片描述
最后是模型鲁棒性分析,如表6所示,RCTrans在不同的传感器故障情况下优于所有现有的方法。具体来说,与 RCBEVDet 相比,RCTrans 在相机出现故障的条件下将 mAP 分别提高了 5.0%、15.3% 和 3.8%。值得注意的是,当丢弃的相机数量为3时,RCTrans 仍然可以得到接近空丢弃一个相机的效果,这是对过去方法的重要改进。上述现象表明,我们的模型可以在传感器故障情况下实现更稳定的效果。
在这里插入图片描述

<think>好的,我现在需要帮助用户了解如何在MMDetection3D中使用NuScenes数据集实现鸟瞰图(BEV)检测功能。首先,我得回忆一下MMDetection3D的框架结构,以及它支持的BEV检测模型。根据用户提供的引用内容,比如BEVDet[^3]和RCBEVDet[^1],这些都是常用的BEV检测模型,可能在MMDetection3D中有实现。 首先,用户可能需要安装和配置环境。MMDetection3D依赖于PyTorch和MMCV,所以第一步应该是确保这些依赖项正确安装。特别是要注意MMCV的版本兼容性,避免出现版本冲突的问题。 接下来,数据准备是关键。NuScenes数据集需要特定的目录结构和预处理步骤。用户需要下载数据集并按照官方指南进行转换,可能需要使用MMDetection3D提供的工具将原始数据转换为支持的格式,比如生成.pkl或.bin文件。此外,BEV检测通常需要将多视角的图像数据转换为鸟瞰视图,这可能涉及到图像视图编码器和BEV特征生成模块,如引用中提到的图像视图编码器[^2]和BEV空间的数据增强方法。 然后是模型配置的选择。用户需要根据任务需求选择合适的模型,比如BEVDet或RCBEVDet。每个模型在配置文件中会有不同的参数设置,比如是否使用雷达-摄像头融合[^1],或者特定的数据增强策略。用户需要修改配置文件中的数据集路径、模型参数以及训练策略,比如学习率、优化器等。 训练过程中,可能需要调整数据增强参数,如翻转、缩放和旋转,这些在BEV空间中的应用对模型性能有重要影响。同时,使用预训练模型作为起点可以加速收敛,用户需要下载对应的权重文件并在配置中指定路径。 验证和测试阶段,用户需要了解如何运行测试脚本并解读结果。NuScenes数据集有官方的评估指标,如mAP和NDS,MMDetection3D应该提供了相应的评估工具。用户可能需要参考官方文档来正确运行评估流程,并分析结果以调整模型参数。 此外,用户可能会遇到显存不足的问题,尤其是在处理高分辨率的BEV特征时。这时候可能需要调整批量大小或使用梯度累积等技术。同时,多卡训练可以加速训练过程,但需要正确配置分布式训练参数。 最后,用户可能希望将训练好的模型部署到嵌入式平台,如机器人导航系统。这时候需要考虑模型的计算量优化,如模型剪枝、量化或转换为更高效的推理格式,如ONNX或TensorRT。引用中提到优化BEV网络以减小计算量[^4],这也是实际应用中需要注意的部分。 总结来说,我需要分步骤引导用户完成环境安装、数据准备、模型配置、训练调优和部署应用的全过程,同时结合引用中的相关技术点,确保回答的准确性和实用性。</think>以下为在MMDetection3D中使用NuScenes数据集实现BEV检测的步骤指南: ### 一、环境安装与配置 1. 安装PyTorch和MMCV: ```bash pip install torch torchvision pip install mmcv-full==1.6.0 -f https://download.openmmlab.com/mmcv/dist/cu113/torch1.11.0/index.html ``` 2. 安装MMDetection3D: ```bash git clone https://github.com/open-mmlab/mmdetection3d.git cd mmdetection3d pip install -v -e . ``` ### 二、NuScenes数据准备 1. 下载数据集至`data/nuscenes/`目录,保持以下结构: ``` nuscenes ├── samples ├── sweeps ├── maps └── v1.0-* ``` 2. 运行数据转换脚本: ```bash python tools/create_data.py nuscenes --root-path ./data/nuscenes --out-dir ./data/nuscenes --extra-tag nuscenes ``` 该命令将生成BEV检测所需的.pkl格式数据文件 ### 三、BEV模型配置(以BEVDet为例) 1. 修改配置文件`configs/bevdet/bevdet-r50.py`: ```python data_root = 'data/nuscenes/' img_norm_cfg = dict(mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375]) # BEV空间参数 grid_config = { 'x': [-51.2, 51.2, 0.4], 'y': [-51.2, 51.2, 0.4], 'z': [-5, 3, 8], 'depth': [1.0, 60.0, 1.0]} ``` 该配置定义了BEV网格的分辨率和检测范围 ### 四、训练与验证 1. 启动训练(4卡示例): ```bash ./tools/dist_train.sh configs/bevdet/bevdet-r50.py 4 ``` 2. 测试模型性能: ```bash ./tools/dist_test.sh configs/bevdet/bevdet-r50.py work_dirs/bevdet-r50/latest.pth 4 --eval bbox ``` 测试结果将包含mAP和NDS指标[^3] ### 五、关键实现细节 1. 多相机特征融合:通过View Transformer将6个环视相机特征转换到统一BEV空间 ```python # 代码片段来自view_transformer.py bev_feat = self.depth_net(img_feat) bev_feat = self.view_transformer(bev_feat, img_metas) ``` 该模块实现了图像空间到BEV空间的几何变换[^2] 2. 数据增强策略: ```python train_pipeline = [ dict(type='BEVRandomFlip', flip_ratio=0.5), # BEV空间翻转 dict(type='BEVScaleAug', scale_ratio=(0.9, 1.1)), # 尺度增强 dict(type='BEVRotate', rot_range=[-0.3925, 0.3925]) # ±22.5度旋转 ] ``` 这些增强操作直接在BEV空间执行,保持几何一致性 ### 六、性能优化技巧 1. 显存优化: - 使用`fp16`混合精度训练 - 设置`img_scale=(256, 704)`降低输入分辨率 2. 模型加速: ```python # 在config中启用cudnn_benchmark cudnn_benchmark = True ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值