(已开源-CVPR2024) RadarDistill---NuScenes数据集Radar检测第一名
本文介绍一篇Radar 3D目标检测模型:RadarDistill。雷达数据固有的噪声和稀疏性给3D目标检测带来了巨大挑战。在本文中,作者提出了一种新的知识蒸馏(KD)方法RadarDistill,它可以通过利用激光雷达数据来提高雷达数据的表征。RadarDistill利用三个关键组件将激光雷达特征的特征转移到雷达特征中: 模态对齐(CMA)、基于激活的特征蒸馏(AFD)和基于Proposal的特征蒸馏(PFD)。
- CMA通过多层膨胀操作增强了雷达特征的密度,有效地解决了从激光雷达到雷达的知识迁移效率不足的挑战。
- AFD 旨在将知识从 LiDAR 特征的重要区域迁移,特别是那些激活强度超过预定阈值的区域。
- PFD引导雷达网络在Proposal中模拟LiDAR网络特征,以准确地检测结果,同时调节误检测的Proposal的特征。
在nuScenes数据集上进行的实验表明,RadarDistill在纯雷达目标检测任务中达到了最先进的性能(SOTA),mAP为20.5%,NDS为43.7%。此外,RadarDistill还提高了相机-雷达融合模型的性能。
项目地址:https://github.com/geonhobang/RadarDistill
文章目录
- Introduction && Related Work
- Method
- Preliminary
- Cross-Modality Alignment
- Activation-based Feature Distillation
- Proposal-based Feature Distillation
- Experiments
Introduction && Related Work
本文引言和相关工作这里就简单介绍下(本文的写作可以学习下)。本文目标时利用深度神经网络提高雷达的三维目标检测的性能。考虑到雷达测量的稀疏和噪声性质,雷达的有限性能主要是由于寻找有效表示的挑战。受LiDAR 点云的深度模型的显著成功的启发,我们的目标是迁移从基于 LiDAR 的模型中提取的知识以增强基于雷达的模型。
最近,知识蒸馏 (KD) 技术在将知识从一种传感器模态转移到另一种传感器模态方面取得了成功,从而优化目标模型的表示质量。基于所使用的学生模型的模态,跨模态知识蒸馏可以大致分为两种方法。当使用相机作为学生模型时,深度和形状信息都从教师模型转移到学生模型。BEVDistill将 LiDAR 和相机特征转换为 BEV 形式,从而能够将空间知识从 LiDAR 特征转移到相机特征。DistillBEV利用LiDAR或LiDAR-camera融合模型的预测结果来区分前景和背景,引导学生模型聚焦于重要区域的KD。S2M2-SSD根据学生模型的预测确定关键区域,并传输从关键区域的LiDAR-camera融合模型获得的信息。除了这些方法之外,UniDistill采用了一个通用的跨模态框架,可以实现不同模态之间的知识转移。该框架适用于不同的模态配对,包括相机到激光雷达、激光雷达到相机、(相机+激光雷达)到相机。
在本文中,我们提出了一种新的KD框架RadarDistill,该框架旨在增强雷达数据的表示。我们的研究表明,通过使用雷达编码网络作为学生网络和LiDAR编码网络作为教师网络,我们的KD框架有效地产生了类似于从LiDAR数据的密集和语义丰富的特征的特征,以更好地检测目标。
本文主要贡献有:
- 我们的研究是第一个证明在训练过程中使用 LiDAR 数据可以显着提高雷达目标检测的工作。我们在图1中的定性结果强调了通过 RadarDistill 获得的雷达特征成功地模仿了 LiDAR 的特征,从而提高了目标检测。
- 我们的研究结果表明,CMA 是 RadarDistill 中的一个关键模块。在缺少CMA的情况下,我们观察到性能提升显着下降。根据我们的消融研究,CMA在解决雷达和LiDAR点云密度不同造成的低效知识转移方面起着关键作用。
- 我们提出了两种新的 KD 方法 AFD 和 PFD。这些方法弥合了雷达和激光雷达特征之间的差异,分别在在两个独立的特征层面工作,并专门为每个级别设计了KD损失。
- RadarDistill 在 nuScenes 基准测试中的 radar-only 目标检测器类别中实现了最先进的性能。它还为 camera-radar 融合场景实现了显著的性能提升。
Method
Preliminary
本文使用PillarNet作为激光雷达检测器和雷达检测器的baseline。激光雷达和雷达的稀疏2D pillar特征分别为 F l d r 2 D F^{2D}_{ldr} Fldr2D、 F r d r 2 D F^{2D}_{rdr} Frdr2D,通过2D稀疏卷积编码器得到低级BEV特征为 F r d r l F^{l}_{rdr} Frdrl、 F r d r l F^{l}_{rdr} Frdrl为,然后使用2D密集卷积编码器得到高级BEV特征 F r d r h F^{h}_{rdr} Frdrh、 F r d r h F^{h}_{rdr} Frdrh。最后高级BEV特征使用CenterHead进行处理,得到分类热力图,回归热力图,IoU热力图:
H mod cls , H mod reg , H mod IoU = CenterHead ( F mod h ) H_{\text{mod}}^{\text{cls}}, H_{\text{mod}}^{\text{reg}}, H_{\text{mod}}^{\text{IoU}} = \text{CenterHead}(F_{\text{mod}}^h) Hmodcls,Hmodreg,HmodIoU=CenterHead(Fmodh)
Cross-Modality Alignment
我们的目标是通过CMA减少雷达和激光雷达之间的差异。PillarNet使用SPConv仅从非空pillar生成低级特征。在比较非空pillar的数量时,雷达的非空pillar仅占激光雷达非空pillar总数的11%。非空pillar数量的显著差异需要两种模式进行对齐,特别是由于激光雷达非空pillar的信息不能直接转移到雷达数据中的相应空pillar中。CMA模块如下图所示,下采样模块应用可变形卷积在下采样过程中提取必要特征,然后使用ConvNeXt V2块聚合这些特征。在上采样模块中,使用2D转置卷积应用膨胀以致密周围区域的特征。包含连接和1×1卷积层的聚合模块结合了不同的特征,操作类似于跳跃连接。
具体代码如下:
def forward(self, data_dict):"""Args:data_dict:spatial_featuresReturns:"""spatial_features = data_dict['radar_multi_scale_2d_features']['x_conv4']ups = []ret_dict = {}en_16x = self.encoder_1(spatial_features) #(B, 256, 90, 90)de_8x = torch.cat((self.decoder_1(en_16x), spatial_features), dim=1)#(B,512,180,180)de_8x = self.agg_1(de_8x)#(B,256,180,180)en_32x = self.encoder_2(en_16x)#(B,256,45,45)de_16x = torch.cat((self.decoder_2(en_32x), self.encoder_3(de_8x)), dim=1)#(B,512,90,90)de_16x = self.agg_2(de_16x)#(B,256,90,90)x = torch.cat((self.decoder_3(de_16x), de_8x), dim=1)#(B, 512, 180, 180)x_conv4 = self.agg_3(x)data_dict['radar_multi_scale_2d_features']['radar_spatial_features_8x_2'] = x_conv4data_dict['radar_multi_scale_2d_features']['radar_spatial_features_8x_1'] = de_8xx_conv5 = data_dict['radar_multi_scale_2d_features']['x_conv5']ups = [x_conv4]x = self.blocks[1](x_conv5)ups.append(self.deblocks[0](x))data_dict['radar_spatial_features_2d_8x'] = ups[-1]x = torch.cat(ups, dim=1)x = self.blocks[0](x)data_dict['radar_spatial_features_2d'] = xreturn data_dict
Activation-based Feature Distillation
AFD 通过激活感知特征匹配策略对齐雷达和 LiDAR 的低级特征。这个过程将雷达特征的激活模式与激光雷达的激活模式相匹配,从而弥合了它们在活动特征分布上的差距。蒸馏区域被自适应地划分为两类:一类是雷达和激光雷达(LiDAR)都处于活跃状态的活跃区域(AR),另一类是雷达处于活跃状态而激光雷达处于非活跃状态的非活跃区域(IR)。 由于雷达数据的稀疏性和噪声特性,AR和IR之间存在不平衡。这种不平衡可能会通过专注于模仿占主导地位的IR来干扰训练。因此,我们根据每个区域的像素数量应用相对自适应权重。具体代买如下:
def low_loss(self, lidar_bev, radar_bev):B, _, H, W = radar_bev.shapelidar_mask = (lidar_bev.sum(1).unsqueeze(1) > 0).float()radar_mask = (radar_bev.sum(1).unsqueeze(1))activate_map = (radar_mask > 0).float() + lidar_mask * 0.5mask_radar_lidar = torch.zeros_like(activate_map, dtype=torch.float)mask_radar_de_lidar = torch.zeros_like(activate_map, dtype=torch.float)mask_radar_lidar[activate_map==1.5] = 1mask_radar_de_lidar[activate_map==1.0] = 1mask_radar_de_lidar *= (mask_radar_lidar.sum() / mask_radar_de_lidar.sum())loss_radar_lidar = F.mse_loss(radar_bev, lidar_bev, reduction='none')loss_radar_lidar = torch.sum(loss_radar_lidar * mask_radar_lidar) / Bloss_radar_de_lidar = F.mse_loss(radar_bev, lidar_bev, reduction='none')loss_radar_de_lidar = torch.sum(loss_radar_de_lidar * mask_radar_de_lidar) / B# breakpoint()feature_loss = 3e-4 * loss_radar_lidar + 5e-5 * loss_radar_de_lidarloss = nn.L1Loss()mask_loss = loss(radar_mask.sigmoid(), lidar_mask)return feature_loss, mask_loss
Proposal-based Feature Distillation
PDF损失函数如下所示。
def high_loss(self, radar_bev,radar_bev2, lidar_bev,lidar_bev2, heatmaps, radar_preds):thres = 0.1gt_thres = 0.1gt_batch_hm = torch.cat(heatmaps, dim=1)gt_batch_hm_max = torch.max(gt_batch_hm, dim=1, keepdim=True)[0]#[1, 2, 2, 1, 2, 2]radar_batch_hm = [(clip_sigmoid(radar_pred_dict['hm'])) for radar_pred_dict in radar_preds]radar_batch_hm = torch.cat(radar_batch_hm, dim=1)radar_batch_hm_max = torch.max(radar_batch_hm, dim=1, keepdim=True)[0]radar_fp_mask = torch.logical_and(gt_batch_hm_max < gt_thres, radar_batch_hm_max > thres)radar_fn_mask = torch.logical_and(gt_batch_hm_max > gt_thres, radar_batch_hm_max < thres)radar_tp_mask = torch.logical_and(gt_batch_hm_max > gt_thres, radar_batch_hm_max > thres)# radar_tn_mask = torch.logical_and(gt_batch_hm_max < gt_thres, radar_batch_hm_max < thres)wegiht = torch.zeros_like(radar_batch_hm_max)wegiht[radar_tp_mask + radar_fn_mask] = 5 /(radar_tp_mask + radar_fn_mask).sum()wegiht[radar_fp_mask] = 1 / (radar_fp_mask).sum()scaled_radar_bev = radar_bev.softmax(1)scaled_lidar_bev = lidar_bev.softmax(1)scaled_radar_bev2 = radar_bev2.softmax(1)scaled_lidar_bev2 = lidar_bev2.softmax(1)high_loss = F.l1_loss(scaled_radar_bev, scaled_lidar_bev, reduction='none') * wegihthigh_loss = high_loss.sum()high_8x_loss = F.l1_loss(scaled_radar_bev2, scaled_lidar_bev2, reduction='none') * wegihthigh_8x_loss = high_8x_loss.sum()high_loss = 0.5 * (high_loss + high_8x_loss)return high_loss
Experiments
下面介绍本文实验部分。基线模型使用了PillarNet-18,即采用ResNet18作为骨干网络的PillarNet [23]。我们使用了Adam优化器,学习率设置为0.001,并采用单周期学习率策略。我们将权重衰减设置为0.01,并将动量在0.85和0.95之间进行调整。我们在4块NVIDIA RTX 3090 GPU上训练了基线模型,共训练了20个epoch,采用总批量大小为16的类别平衡分组与采样(Class-Balanced Grouping and Sampling,简称CBGS)策略。
本文提出的模型训练了40个epochs,其他所有训练过程都与基线模型完全相同。我们采用教师模型的权重来初始化学生模型。
在NuScenes测试集上可以看到,在Radar-only模型中,我们的方法排到了第一名,并且比第二名KPConvPillars在mAP上提高了15.6个点,在NDS提高了29.8个点。
下面是具体每一类的目标AP对比,本文提出的方法比基线模型在所有类别上都有提高,特别是在Trailer、T.C和Barrier上都提高了20个点以上。在Car和Trailer类别上比纯视觉模型和融合模型还要高。但是在Ped和Bicycle等小目标上没有很大提高,因为它们的真值中有很少的雷达点。
下面是消融实验,作者做消融实验的时候使用了1/7的训练集进行训练,缩短开发时间。表3可以看到本文提出的三个模块对模型性能的影响。当CMA和AFD或PFD一起使用的话,比baseline模型都提高了不少。而AFD和PFD一起使用的话,性能提升则十分有限。这表明CMA模块扮演了十分重要的角色。
表4分析了AFD中选择不同特征区域的影响。
(1)在整个区域上进行蒸馏时,汽车平均精度(Car AP)提高了4.2%,平均精度(mAP)提高了2.2%,以及NDS提高了2.9%。
(2)将蒸馏应用于真值框(GT boxes)为中心的高斯热力图区域,与在整个区域上进行蒸馏相比,汽车平均精度和平均精度均有所提高,但NDS有所下降。
(3)将蒸馏分为前景区域和背景区域进行,与在整个区域上进行蒸馏相比,汽车平均精度和平均精度均有所提高,但NDS略有下降(31.7vs32.2)。
(4)相反,按照我们提出的激活区域划分特征蒸馏,与在整个区域上进行蒸馏相比,在所有指标上均取得了最佳性能,Car-AP提高了6.8%,mAP提高了2.3%,NDS提高了1.5%。
表5分析了PFD中选择不同特征区域的影响。可以看到无论是整个区域,还是真值中心热力图、或是LiDAR预测都没有太大的提升,而使用本文提出的Radar预测区域,相比baseline在NDS上提高了1个点。
最后作者在RC融合模型上验证本文提出的知识蒸馏方法的效果,使用的baseline是MIT版本的BEVFusion代码库,可以看到使用本文提出的方法后,mAP和NDS均有提升。
相关文章:

(已开源-CVPR2024) RadarDistill---NuScenes数据集Radar检测第一名
本文介绍一篇Radar 3D目标检测模型:RadarDistill。雷达数据固有的噪声和稀疏性给3D目标检测带来了巨大挑战。在本文中,作者提出了一种新的知识蒸馏(KD)方法RadarDistill,它可以通过利用激光雷达数据来提高雷达数据的表征。RadarDistill利用三…...

【MySQL】 数据库基础数据类型
一、数据库简介 1.什么是数据库 数据库(Database)是一种用于存储、管理和检索数据的系统化集合。它允许用户以结构化的方式存储大量数据,并通过高效的方式访问和操作这些数据。数据库通常由数据库管理系统(DBMS)管理&…...
中小企业AI算力如何选?【显卡租赁】VS【自建服务器】
对于中小企业而言和科研单位来讲,AI算力的选择需综合考虑成本、灵活性、数据安全和技术迭代风险等因素。以下是显卡租赁与自建服务器的对比分析,帮助中小企业做出最优决策: 1. 成本对比 自建服务器 高昂的前期投入:搭建一个中等规…...
OpenHarmony 4.1版本应用升级到5.0版本问题记录及解决方案
目录 1. ERROR: ArkTS:ERROR File: E:/Hap/applications_contacts-OpenHarmony-5.0.0-Release/entry/src/main/ets/Application/MyAbilityStage.ts:33:9 No overload matches this call. Overload 1 of 4, (slot: NotificationSlot): Promise, gave the following error. …...
std::initialzer_list 与花括号{}数据列表
author: hjjdebug date: 2025年 05月 22日 星期四 15:50:23 CST descrip: std::initialzer_list 与花括号{}数据列表 文章目录 1.{数值列表}是什么?1.1 数组初始化 时 , 称为数组初始化列表1.2. 当用于容器时, 称为容器初始化列表1.3. 对于结构体或类,{…...
萤石云实际视频实时接入(生产环境)
萤石云视频接入 本示例可用于实际接入萤石云开放平台视频,同时支持音频输入和输出。 实际优化内容 1.动态获取token 2.切换各公司和车间时,自动重新初始化播放器 let EZUIKit null; // 第三方库引用 let EZUIKitPlayers []; // 播放器实例数组 le…...
QT中常用的类
Qt 是一个功能强大的跨平台框架,提供了丰富的类库来开发 GUI 和应用程序。以下是 Qt 中常用的核心类,按模块分类整理: 1. GUI 和窗口管理 类名用途示例场景QWidget所有 GUI 控件的基类(按钮、窗口等&…...
Docker系列(四):容器操作全栈技术指南 --- 从入门到生产级管控
引言 本指南以全链路视角拆解Docker技术栈,通过四大核心模块构建从入门到进阶的知识体系,助您系统性掌握容器化落地的关键能力。 容器生命周期管理(一)从创建、启停到资源清理,夯实容器操作的基础语法与核心场景&…...
poppler_path 是用于 Python 库如 pdf2image 进行 PDF 转换时
poppler_path 是用于 Python 库如 pdf2image 进行 PDF 转换时指定 Poppler 可执行文件路径的参数。为了让程序正常工作,需要先安装 Poppler,并配置环境变量或在代码中设置 poppler_path。 以下是 Poppler 的安装与环境变量配置方法,按操作系…...
鸿蒙OSUniApp 开发的多图浏览器组件#三方框架 #Uniapp
使用 UniApp 开发的多图浏览器组件 在移动应用开发中,图片浏览器是非常常见且实用的功能,尤其是在社交、资讯、电商等场景下,用户对多图浏览体验的要求越来越高。随着 HarmonyOS(鸿蒙)生态的不断壮大,开发…...

MongoDB 错误处理与调试完全指南:从入门到精通
在当今数据驱动的世界中,MongoDB 作为最流行的 NoSQL 数据库之一,因其灵活的数据模型和强大的扩展能力而广受开发者喜爱。然而,与任何复杂系统一样,在使用 MongoDB 过程中难免会遇到各种错误和性能问题。本文将全面介绍 MongoDB 的…...
React从基础入门到高级实战:React 核心技术 - 表单处理与验证深度指南
React 表单处理与验证深度指南 在现代 Web 应用中,表单是用户与应用交互的核心方式之一。无论是注册、登录、结账还是数据提交,表单都扮演着至关重要的角色。React 作为一款流行的前端框架,提供了多种处理表单的工具和方法,帮助开…...

【C++】stack,queue和priority_queue(优先级队列)
文章目录 前言一、栈(stack)和队列(queue)的相关接口1.栈的相关接口2.队列的相关接口 二、栈(stack)和队列(queue)的模拟实现1.stack的模拟实现2.queue的模拟实现 三、priority_queu…...

ubuntu中上传项目至GitHub仓库教程
一、到github官网注册用户 1.注册用户 地址:https://github.com/ 2.安装Git 打开终端,输入指令git,检查是否已安装Git 如果没有安装就输入指令 sudo apt-get install git 二、上传项目到github 1.创建项目仓库 进入github主页,点击号…...
[Java实战]Spring Boot整合达梦数据库连接池配置(三十四)
[Java实战]Spring Boot整合达梦数据库连接池配置(三十四) 一、HikariCP连接池配置(默认) 1. 基础配置(application.yml) spring:datasource:driver-class-name: dm.jdbc.driver.DmDriverurl: jdbc:dm://…...

windows 下用yolov5 训练模型 给到opencv 使用
windows 使用yolov5训练模型,之后opencv加载模型进行推理。 一,搭建环境 安装 Anaconda 二,创建虚拟环境并安装yolov5 conda create -n yolov5 python3.9 -y conda activate yolov5 git clone https://github.com/ultralytics/yolov5 cd …...

Spark集群架构解析:核心组件与Standalone、YARN模式深度对比(AM,Container,Driver,Executor)
一、核心组件定义与关系拆解 1. ApplicationMaster(AM) 定义:YARN 框架中的应用管理器,每个应用程序(如 Spark 作业)对应一个 AM。职责: 向 YARN 的 ResourceManager 申请资源(Con…...

Linux Kernel调试:强大的printk(二)
前言 如果你对printk的基本用法还不熟悉,请先阅读: Linux Kernel调试:强大的printk(一) 上一篇Linux Kernel调试:强大的printk(一)我们介绍了printk的基础知识和基本用法…...

Kafka Kraft模式集群 + ssl
文章目录 启用集群资源规划准备证书创建相关文件夹配置文件启动各Kafka节点 故障转移测试spring boot集成 启用集群 配置集群时关键就是提前梳理好需要的网络资源,完成对应server.properties文件的配置。在执行前先把这些梳理好,可以方便后面的配置&…...

[crxjs]自己创建一个浏览器插件
参考官方 https://crxjs.dev/vite-plugin/getting-started/vue/create-project 按照流程操作会失败的原因 是因为跨域的问题, 在此处添加 server: {host: "localhost",port: 5173,cors: true,headers: {"Access-Control-Allow-Origin": "*",}…...

类的设计模式——单例、工厂以及建造者模式
1.单例模式 1.1 饿汉模式 单例模式:一个类只能创建一个对象,这个设计模式可以保证系统中该类只有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。 饿汉模式指在程序初始化时就创建一个唯一的实例对象。适用…...

STM32之看门狗(IWDG)
一、看门狗外设的原理与应用 背景说明 随着单片机的发展,单片机在家用电器、工业自动化、生产过程控制、智能仪器仪表等领域的应用越来越广泛。然而处于同一电力系统中的各种电气设备通过电或磁的联系彼此紧密相连,相互影响,由于运行方式的…...
PyTorch实现MLP信用评分模型全流程
知识点回顾: 过拟合的判断:测试集和训练集同步打印指标模型的保存和加载 仅保存权重保存权重和模型保存全部信息checkpoint,还包含训练状态 早停策略 浙大疏锦行 import torch import torch.nn as nn import torch.optim as optim from skle…...
语音识别——文本转语音
python自带的pytts说话人的声音比较机械,edge-tts提供了更自然的语音合成效果,支持多种语音选择。 项目地址:GitHub - rany2/edge-tts: Use Microsoft Edges online text-to-speech service from Python WITHOUT needing Microsoft Edge or …...

跟着华为去变革 ——读《常变与长青》有感
《常变与长青》,是华为郭平总2024年上市的著作。走进这本书,我们能够清晰看到华为30多年的成长过程和伴随期间的变革历程:从一家设备代理商开始,起步蹒跚,砥砺前行,在闯过一个又一个磨难之后,成…...

图像分割技术的实现与比较分析
引言 图像分割是计算机视觉领域中的一项基础技术,其目标是将数字图像划分为多个图像子区域(像素的集合),以简化图像表示,便于后续分析和理解。在医学影像、遥感图像分析、自动驾驶、工业检测等众多领域,图…...

node.js配置变量
一、下载安装包 1、官网下载 大家可以在官网下载,适合自己电脑以及项目的需要的版本。 二、node.js安装 1、安装 双击下载的安装包文件,通常为 .exe 或 .msi 格式(Windows)或 .dmg 格式(Mac)。系统会…...

Ubuntu+Docker+内网穿透:保姆级教程实现安卓开发环境远程部署
文章目录 前言1. 虚拟化环境检查2. Android 模拟器部署3. Ubuntu安装Cpolar4. 配置公网地址5. 远程访问小结 6. 固定Cpolar公网地址7. 固定地址访问 前言 本文将详细介绍一种创新性的云开发架构:基于Ubuntu系统构建Android仿真容器环境,并集成安全隧道技…...
为什么需要清除浮动?清除浮动的方式有哪些?
导语: 在前端面试中,“清除浮动”几乎是每位面试官都会问到的基础题。虽然浮动已经不如 Flex 和 Grid 那么常用了,但它在许多老项目中仍然占有一席之地。理解浮动的机制、掌握清除浮动的方式,是面试中体现你前端基础扎实度的关键点。 一、面试主题概述 浮动(float)最初是…...
计算机网络学习20250526
SMTP——简单邮件传输协议 TCP 端口号:25 Alice给Bob发送邮件过程: Alice使用邮件代理程序写邮件给Bob用户代理把报文发给邮件服务器,放入报文队列中邮件服务器上SMTP客户端建立与Bob服务器上SMTP服务器的TCP连接经过初始的握手后ÿ…...