4D毫米波雷达——ADCNet 原始雷达数据 目标检测与可行驶区域分割
前言
本文介绍使用4D毫米波雷达,基于原始雷达数据,实现目标检测与可行驶区域分割,它是来自2023-12的论文。
会讲解论文整体思路、输入分析、模型框架、设计理念、损失函数等,还有结合代码进行分析。
论文地址:ADCNet: Learning from Raw Radar Data via Distillation
1、模型框架
ADCNet只使用雷达信息,实现车辆检测和可行驶区域分割。
- 输入:原始雷达数据;即ADC数据,由4D毫米波雷达生成。
- 信号处理模块:用一个可学习的信号处理层,来处理原始ADC数据。
- RD特征:信号处理层将ADC数据,转为RD特征,范围-多普勒信息,包含距离和速度信息。
- 主干网络:进一步编码RD特征,隐式地估算目标的方位角。
- 任务头:首先进行RAD张量预训练。在预训练完后,进行微调检测任务头和分割任务头。
- 输出:目标检测和可行驶区域分割结果。
参考FFTRadNet,转为RD立方体,然后隐式地使用来自检测和分割头的监督信号来估算目标的方位角。区别是: ADCNet使用了学习的信号处理层,来处理原始ADC数据。
ADCNet 框架的创新之处:
- 与传统方法不同,新框架是将整个信号处理链整合进一个神经网络,从原始ADC数据开始。
- 设计了一个能够使用原始ADC数据的框架,并预训练了一个主干网络,这个主干网络可以用于各种下游任务。
- 预训练模型会重构完整的距离-方位角-多普勒RAD张量。采用传统信号处理链将会产生的结果,作为标签真值。
- 将完整的信号处理模块(包括DFT、阈值处理和AOA估计)蒸馏到可学习的信号处理模块和主干网络中。
预训练:主干网络首先通过预训练来学习重构RAD张量,这相当于模拟传统的信号处理步骤。
微调:一旦“信号处理模块”和“主干网络”预训练完成,它就可以为特定的下游任务(如目标检测和分割)进行微调。
2、雷达信号处理过程
背景
- 毫米波雷达相比激光雷达(LiDAR)成本较低,并且在恶劣天气条件下更加稳健。
- 但是,雷达生成的点云数据通常比激光雷达的要嘈杂且稀疏。
- 为了克服这些挑战,最近的研究开始关注使用原始雷达数据,而不是处理后的雷达点云数据。
为了提高雷达数据的质量,提出将“一些信号处理的步骤”直接集成到一个深度学习网络中。即,模型参与雷达数据早期阶段的转换处理。
传统雷达信号处理链:
- 在传统的雷达信号处理中,原始ADC数据首先通过两个维度上的离散傅里叶变换(DFT)操作转换成距离-多普勒(RD)立方体。
- 这个RD立方体接着会经过阈值处理,并通过到达角(AOA)估计层来估算目标的方位角。
- 方位角寻找步骤在计算上非常密集,是信号处理链中最消耗计算资源的步骤。
FMCW雷达的工作原理:
- 车载的4D毫米波雷达,通常都是FMCW类型的雷达。
- FMCW雷达通过发射一系列频率逐渐增加的短波(chirp)来工作。这些波在遇到物体时反射回来,被雷达的接收天线捕获。
- 这种频率随时间增加的特性,使FMCW雷达能够同时获取物体的距离和速度信息。
信号数字化:
- 天线捕获的反射信号通过模拟-数字转换器ADC被采样和数字化。
- ADC的作用是将模拟信号(实际反射波)转换成数字形式,使其能够被计算机处理。
- 这个数字化的信号随后传输给雷达传感器中的其他软件模块进行进一步处理。
雷达信号处理链:
- ADC数据通常被组织成数组,每个数组代表一个接收天线的数据。
- 这些数组根据每个chirp波的样本数和数量来确定维度。
- 对这些数组进行信号处理操作,主要是离散傅里叶变换DFT,这样就将数据转换成所谓的距离-多普勒RD数组,提供了探测物体的距离(范围)和速度(多普勒)信息。
看一下完整的雷达信号处理链,如下图所示:
进一步的处理步骤:
- 通常会对RD立方体进行阈值处理,以减少需要处理的距离-多普勒格点。这一步有助于过滤掉不那么重要的数据。
- 然后进行到达角AOA估算算法。AOA估算对于确定反射信号的来向非常重要。
- AOA全称是Angle of Arrival,用来确定反射波的具体到达方向。通过了解波从哪个方向来,雷达可以更准确地定位物体在空间中的位置。
基本的AOA估算方法:
- 一种基础的AOA估算方法是在雷达数据的最后一个轴上,应用另一个离散傅里叶变换DFT。这可以提供一个大致的到达角估算。
- 例如,如果雷达系统有多个接收天线,通过比较不同天线接收到的信号之间的相位差异,可以估算出信号的到达角度。
高级AOA估算技术:
- 对于更精确的AOA估算,可以使用更高级的算法,如迭代自适应方法(IAA)、多重信号分类(MUSIC)和信号参数的旋转不变性估计(ESPRIT)。
- 这些算法通常更复杂,能提供更精确的到达角估算。它们通过对雷达信号进行更深入的分析,能更精确地区分和定位多个物体。
3、输入数据
本文的4D毫米波雷达是高清的,也称为成像雷达。
- 成像雷达在更高的频率上运行,约77GHz;并且有更宽的可用带宽,约4GHz;这使得它们比传统的汽车雷达能提供更高的分辨率。
- 成像雷达还配备有多个发送和接收天线,利用多输入多输出MIMO技术,这种新型雷达能够大幅提升距离和角度分辨率。
低级雷达数据是指未经过信号处理链的峰值检测和阈值处理步骤的雷达数据,比如:
- 距离多普勒(RD)
- 距离-方位角-多普勒(RAD)
- 它们已经历了信号处理阶段(如信号放大、滤波等,但未经过峰值检测和阈值设定)
本文采用 ADC原始雷达数据,作为模型的输入。看一下ADC原始雷达数据、RD数据的维度表示:
补充一下:
峰值检测和阈值设定是雷达信号处理的步骤:
- 峰值检测:这一步骤涉及到识别信号中的显著特征,也就是反射信号中最强的部分。这些“峰值”通常代表了物体的位置。
- 阈值设定:为了过滤掉背景噪声或不重要的信号,会设置一个阈值,只有超过这个阈值的信号才会被认为是有效的。
4、信号处理模块
下面看一下“信号处理模块”的详细设计思路,如下图所示:
可学习的窗口操作作用,主要是减少不连续性:
- 在处理实际信号时,我们通常只能获取信号的一个有限的时间段。在这个时间段的两端,信号从有值突变到无值,这种不连续可以在频域中产生不必要的影响,比如频谱泄露。
- 为了减少这种不连续性带来的影响,可以通过乘以一个窗口函数。
- 窗口函数通常在中间最大,两端逐渐减小至零,这样可以“柔化”信号的起始和结束部分,使其平滑过渡至零。
窗口操作对离散傅里叶DFT的影响:
- 频率分辨率:加窗可以改善DFT的频率分辨率,这是因为它减少了信号两端的突变对频谱的影响。没有加窗的信号在DFT后可能会在频谱中展现出多余的频率成分,这些成分实际上并不是信号本身的一部分,而是由于两端不连续性产生的。
- 频谱泄露:频谱泄露是指信号的能量从其真实的频率分布泄露到其他频率。窗口函数通过减少两端的不连续性,有助于减少这种泄露,使得频谱更加集中于信号的真实成分。
- 信号的真实成分:加窗口操作的目的是确保DFT分析更加集中于信号的真实成分,而不是由于采样窗口造成的人为效应。
实现可学习信号处理模块的一个困难是 DFT 运算是在复杂域中。
- 为了避免在神经网络中使用复杂的运算,将复杂的张量(ADC 数组和 DFT 矩阵)分成实部和虚部,并分别执行乘法,如下图所示。
- 这些是标准运算,可以很容易地 在 Pytorch 等典型深度学习框架中实现。 可学习窗口模块仅涉及一个参数向量,并且将其与前向传递中的输入相乘。
这里的离散傅里叶DFT,是使用"带有扰动的DFT"。这种方法涉及到对传统的离散傅里叶变换(DFT)矩阵的参数进行微小的随机扰动。
- DFT矩阵的初始化:在神经网络中,如果一个线性层(或全连接层)代表一个DFT操作,它的权重可以被初始化为DFT矩阵的值。这样做的直接目的是让网络能够在开始训练之前就拥有执行DFT的能力。
- 引入扰动:"扰动"指的是在这些初始权重上加入微小的随机变化。这可以通过将DFT矩阵与一个小的随机高斯噪声矩阵相加来实现,噪声矩阵的每个元素都有一个非常小的方差(γ)。
- 避免局部最小:神经网络在训练过程中可能会陷入局部最小值,尤其是当权重初始化过于接近一个有效解时。扰动可以帮助网络在训练过程中探索参数空间,避免局部最优解。
- 增强学习能力:通过扰动,网络能够在训练过程中自主学习到数据的特点,并找到更适合数据的DFT表示,而不是仅仅依赖于预设的、固定的DFT操作。
5、预训练
核心目的:
- 为了构建一个神经网络,它能从最基本的雷达信号(ADC数据)开始,学习整个雷达信号处理的任务,最终能够预测出RAD张量。这里的RAD张量包含了物体的距离、速度和角度信息,这些信息是进行物体检测和场景理解的关键。
第一步:生成RAD标签
- 利用离线的信号处理算法,从ADC数据生成距离-方位角-多普勒(RAD)立方体。
- 这一步骤实质上是在模拟传统的信号处理流程,为后续的学习提供数据标签。
- 在第一步中,使用离线的信号处理算法处理ADC数据,这个过程本质上是用来模拟雷达硬件通常会执行的任务,但在一个离线环境中进行。
第二步:监督学习
- 第二步是监督学习,其中(ADC, RAD)对被用作输入和标签,来训练一个可学习的信号处理模块和主干网络。这个过程是监督学习的核心,其中网络被训练来预测与离线算法生成的RAD张量尽可能接近的输出。
预训练过程中的RAD预测
- 使用ADC作为输入,可学习的信号处理模块和主干网络预测RAD张量。
- 这些预测通过以下的损失函数进行监督,其中
Y_RAD
代表生成的RAD张量,而Ŷ_RAD
代表神经网络的预测。
- 为了便于训练,将RAD张量的形状从原始的512 × 751 × 256下采样到128 × 248 × 256。
预训练优势:
- 方位估计的直接改进,通过这种方式预训练网络,网络学会了如何估算方位角。这种能力直接转化为改善了检测和分割任务的性能。网络不仅能识别物体,还能更精确地定位物体在空间中的位置。
- 数据标注的省略,由于原始雷达数据通常对人类来说不可解释,所以人工标注这类数据需要借助传感器融合技术来提供准确的3D标签。这个预训练过程省略了这一繁琐步骤,因为它使用从雷达数据自动生成的标签。
6、微调多任务
在预训练ADCNet的信号处理模块和主干网络后,继续进行多任务设置的微调。
多任务学习设置,用于微调ADCNet骨干网络,以同时执行目标检测和自由空间分割任务。这一过程涉及了特定的损失函数构建和超参数的设定。
目标检测和自由空间分割:
- ADCNet通过添加目标检测和分割头,被微调以同时进行目标检测和自由空间分割。
- 这意味着网络将学习从输入数据中提取用于两个不同任务的特征。
7、损失函数
目标检测分类损失:
- 分类标签
ycls
表示在特征图上的真实分类标签,其中1表示对象存在,0表示不存在。ycls
的形状为Nrange-bins × Nazimuth-bins
。 - 分类损失使用了
focal()
函数,这是一种专门设计用来解决类别不平衡问题的损失函数。
目标检测回归损失:
- 回归目标
yreg
代表了距离和方位的回归目标。网络预测一个距离值和一个方位值,回归目标是距离和方位的余数,与距离和方位格大小相关。 - 回归损失使用平滑的L1损失(也称为Huber损失),这是一种旨在减少离群点影响的损失函数。
可行驶区域分割损失
- 分割标签
yseg(r, a)
表示在位置(r, a)的真实标签,1代表对象存在,0代表不存在。 - 分割损失使用二元交叉熵损失(BCE),这是评估二元分类任务性能的常用损失函数。
整体损失函数
- 训练的总损失是目标检测损失和自由空间分割损失的组合,其中β是一个超参数,用于控制自由空间分割任务的权重。
- α和β是超参数,用于平衡目标检测和自由空间分割两部分的权重。在实际训练过程中,需要通过实验来调整这些参数,以达到最佳的模型性能。
8、实验与效果
车辆检测任务,作者在RADIal数据集进行测试,其中:
- AP:平均精度
- AR:平均召回率
- RE:检测到的物体的距离误差
- AE:检测到的物体的方位角误差
测试集分为简单和困难子集以进行详细比较:
可行驶区域任务,在RADIal数据集进行测试。性能以mIOU来衡量,值越高越好。
替换不同组件和训练方式,实验比较:
- NPT(无预训练)表示的模型是不通过蒸馏使用预训练的模型
- ADC UNet是指主干网络由Resnet+FPN,替换为UNet
- Convert3d是指用它替换“信号处理模块”
效率比较,对于吞吐量和内存测量,批量大小为 20。 *所有测量均在 RTX 3090 上进行。
RAD 预测示例,每个样本的相对绝对误差 (RAE) 的平均值和最大值。
从这些例子中可以看出,经过预训练后,网络能够以非常高的精度预测 RAD 张量。
看一下实际的检测效果:
本文先介绍到这里,后面会分享4D毫米波雷达的其它数据集、算法、代码、具体应用示例。
对于4D毫米波雷达的原理、对比、优势、行业现状,可以参考我这篇博客。
对于4D毫米波雷达——RADIal数据集、格式、可视化 CVPR2022,可以参考我这篇博客。
对于4D毫米波雷达——FFT-RadNet 目标检测与可行驶区域分割 CVPR2022,可以参考博客。
分享完成,本文只供大家参考与学习,谢谢~
相关文章:

4D毫米波雷达——ADCNet 原始雷达数据 目标检测与可行驶区域分割
前言 本文介绍使用4D毫米波雷达,基于原始雷达数据,实现目标检测与可行驶区域分割,它是来自2023-12的论文。 会讲解论文整体思路、输入分析、模型框架、设计理念、损失函数等,还有结合代码进行分析。 论文地址:ADCNe…...
「优选算法刷题」:提莫攻击
一、题目 在《英雄联盟》的世界中,有一个叫 “提莫” 的英雄。他的攻击可以让敌方英雄艾希(编者注:寒冰射手)进入中毒状态。 当提莫攻击艾希,艾希的中毒状态正好持续 duration 秒。 正式地讲,提莫在 t 发…...

260:vue+openlayers 通过webgl方式加载矢量图层
第260个 点击查看专栏目录 本示例介绍如何在vue+openlayers中通过webgl方式加载矢量图层。在做这个示例的时候,采用vite的方式而非webpack的方式。这里的基础设置需要改变一下。 ol的版本7.5.2或者更高。 直接复制下面的 vue+openlayers源代码,操作2分钟即可运行实现效果 文…...
Android 8.1 相关修改
一些常用修改,做个记录,为了节约时间和防止踩坑。 一、修改默认中文 修改位置: build\make\target\product\full_base.mk 修改内容: # Put en_US first in the list, so make it default. PRODUCT_LOCALES : zh_…...

EG-2121CA (晶体振荡器 低抖动表面声波(SAW)振荡器)
在当今高度数字化的时代,稳定的信号传输显得尤为重要。若要实现信号的稳定传输,晶体振荡器必不可少。EG-2121CA,它是一款低抖动表面声波(SAW)振荡器设计的产品,凭借其出色的频率范围、稳定的电源电压和可靠…...

Django知识随笔
目录 1.如何再ajax中传输post数据? 2.在form表单中使用jquery序列化,input框过多。 1.如何再ajax中传输post数据? 在ajax传递的那个网址,会调用你路由的视图函数,在视图函数上面加一句 csrf_exempt 。写上之后会有提…...

Facebook 广告帐户:多账号运营如何防止封号?
Facebook目前是全球最受欢迎的社交媒体平台之一,拥有超过27亿活跃用户。因此,它已成为个人和企业向全球受众宣传其产品和服务的重要平台。 然而,Facebook 制定了广告商必须遵守的严格政策和准则,以确保其广告的质量和相关性&…...

酷开会员 | 用酷开系统点亮多彩休闲时刻
现代人的休闲方式多种多样,随着科技的发展和生活水平的提高,人们有了更多的选择。而电视,作为一个休闲娱乐的载体,在生活中扮演着重要的角色。 以前,电视是家家户户休闲娱乐的重要组成部分,现在࿰…...
分配土地(100%用例)C卷(JavaPythonC++Node.jsC语言)
从前有个村庄,村民们喜欢在各种田地上插上小旗子,旗子上标识了各种不同的数字。某天集体村民决定将覆盖相同数字的最小矩阵形的土地的分配给为村里做出巨大贡献的村民,请问,此次分配士地,做出贡献的村民中最大会分配多大面积? 输入描述: 第一行输入m和n,m代表村子的土…...

电源的纹波
【电源的“纹波”到底是什么?-哔哩哔哩】 https://b23.tv/28IIbtU 严谨的说,只有中间这种是纹波。 两类电源 线性电源通过自动调节内部电阻,修改输出电压,可以降低输入电压的波动。开关电源的原理,就会产生纹波。纹波…...

85.网游逆向分析与插件开发-物品使用-物品使用的逆向分析与C++代码的封装
内容参考于:易道云信息技术研究院VIP课 上一个内容:项目需求与需求拆解-CSDN博客 码云地址(ui显示角色数据 分支):https://gitee.com/dye_your_fingers/sro_-ex.git 码云版本号:453dd83d54140d2e1ee65c9…...

JVM系列——垃圾收集器
对象存活判断 引用计数法 在对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加一;当引用失效时,计数器值就减一;任何时刻计数器为零的对象就是不可能再被使用的。 可达性分析算法 通过一系列称为“GC …...

那些年与指针的情仇(二)---二级指针指针与数组的那点事函数指针
关注小庄 顿顿解馋(。・∀・)ノ゙ 欢迎回到我们的大型纪录片《那些年与指针的爱恨情仇》,在本篇博客中我们将继续了解指针的小秘密:二级指针,指针与数组的关系以及函数指针。请放心食用&a…...
APPCRASH 文件管理器不停重启问题记录 (最后reinstall解决)以及重装后到底会怎样
问题诱因: 时间 2024年1月 (严重怀疑,但无法实锤) 是我不知道什么时候(应该是近期)安装了powertoy的预览版,系统不知道什么时候(也应该是这两天)安装了微软出品的PC man…...
导出excel功能,前端的解决方案
import { utils, writeFileXLSX } from xlsx // 导出excel async exportToExcel() {// 获取要导出的业务数据(这里的接口自己改成实际使用的接口)const res await getRuleListAPI(this.params)// 表头英文字段key(这里的数据改成接口返回的实…...

【lesson24】MySQL索引的理解
文章目录 建立测试表插入多条记录查看插入结果中断一下---为何IO交互要是 Page重谈page理解单个page理解多个page 页目录单页情况多页情况复盘一下InnoDB 在建立索引结构来管理数据的时候,其他数据结构为何不行?B vs B聚簇索引 VS 非聚簇索引 建立测试表…...

Oracle篇—分区索引的重建和管理(第三篇,总共五篇)
☘️博主介绍☘️: ✨又是一天没白过,我是奈斯,DBA一名✨ ✌✌️擅长Oracle、MySQL、SQLserver、Linux,也在积极的扩展IT方向的其他知识面✌✌️ ❣️❣️❣️大佬们都喜欢静静的看文章,并且也会默默的点赞收藏加关注❣…...
前端大厂面试题探索编辑部——第一期
目录 简介 题目 单选题 题解 A选项的Content-Security-Policy http-equiv属性 content属性 B选项的CSRF 使用CSRF Token 验证Referer和Origin头 C选项的HTTP Only D选项的防止SQL注入 输入验证和转义 简介 这个是一个长系列,我会以题目为导向ÿ…...

图扑 HT UI 5.0 全新升级,开箱即用!
为顺应数字时代的不断发展,图扑 HT UI 5.0 在原有功能强大的界面组件库的基础上进行了全面升级,融入了更先进的技术、创新的设计理念以及更加智能的功能。HT UI 5.0 使用户体验更为直观、个性化,并在性能、稳定性和安全性等方面达到新的高度。…...

数据结构----链表介绍、模拟实现链表、链表的使用
文章目录 1. ArrayList存在的问题2. 链表定义2.1 链表的概念及结构2.2 链表的组合类型 3. 链表的实现3.1 单向、不带头、非循环链表的实现3.2 双向、不带头节点、非循环链表的实现 4.LinkedList的使用4.1 什么是LinkedList4.2 LinkedList的使用4.2.1. LinkedList的构造4.2.2. L…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练
前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1):从基础到实战的深度解析-CSDN博客,但实际面试中,企业更关注候选人对复杂场景的应对能力(如多设备并发扫描、低功耗与高发现率的平衡)和前沿技术的…...
WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)
一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...

前端开发面试题总结-JavaScript篇(一)
文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...
大学生职业发展与就业创业指导教学评价
这里是引用 作为软工2203/2204班的学生,我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要,而您认真负责的教学态度,让课程的每一部分都充满了实用价值。 尤其让我…...
【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)
1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...

DingDing机器人群消息推送
文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人,点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置,详见说明文档 成功后,记录Webhook 2 API文档说明 点击设置说明 查看自…...

系统掌握PyTorch:图解张量、Autograd、DataLoader、nn.Module与实战模型
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文通过代码驱动的方式,系统讲解PyTorch核心概念和实战技巧,涵盖张量操作、自动微分、数据加载、模型构建和训练全流程&#…...

DBLP数据库是什么?
DBLP(Digital Bibliography & Library Project)Computer Science Bibliography是全球著名的计算机科学出版物的开放书目数据库。DBLP所收录的期刊和会议论文质量较高,数据库文献更新速度很快,很好地反映了国际计算机科学学术研…...
Python常用模块:time、os、shutil与flask初探
一、Flask初探 & PyCharm终端配置 目的: 快速搭建小型Web服务器以提供数据。 工具: 第三方Web框架 Flask (需 pip install flask 安装)。 安装 Flask: 建议: 使用 PyCharm 内置的 Terminal (模拟命令行) 进行安装,避免频繁切换。 PyCharm Terminal 配置建议: 打开 Py…...

小智AI+MCP
什么是小智AI和MCP 如果还不清楚的先看往期文章 手搓小智AI聊天机器人 MCP 深度解析:AI 的USB接口 如何使用小智MCP 1.刷支持mcp的小智固件 2.下载官方MCP的示例代码 Github:https://github.com/78/mcp-calculator 安这个步骤执行 其中MCP_ENDPOI…...