4D 毫米波雷达感知算法综述:从目标检测到动态场景重建(arXiv 2609.19216)

论文信息

  • 标题: 4D Radar Perception Algorithms for Autonomous Driving: A Review
  • 作者: Xumin Wu, Jun Zhou, Jilin Mei, Chen Min, Yu Hu
  • 发表: arXiv:2609.19216(2026年9月16日),投稿 IEEE Sensors Journal
  • 链接: https://arxiv.org/abs/2609.19216
  • 核心贡献: 首个面向 4D 毫米波雷达的系统性综述,按感知任务演进(信号处理→目标检测→语义分割→运动估计→占用预测→动态场景重建)组织算法全景

1. 论文核心创新

1.1 研究背景

4D 毫米波雷达(4D mmWave Radar)相比传统 3D 雷达增加了**俯仰角(Elevation)**维度,同时利用高分辨率多普勒测量,能够感知目标的 3D 位置、速度和微动特征。这为自动驾驶和座舱感知提供了新的技术路线。

雷达类型 维度 分辨率 典型应用
3D 雷达(传统) 距离、方位角、速度 较低 ACC、BSD
4D 雷达 距离、方位角、俯仰角、速度 高 自动驾驶感知、座舱 CPD
60GHz 车内雷达 距离、方位角、微多普勒 极高(4cm) CPD、生命体征

1.2 综述组织框架

论文按感知任务演进组织,这是与以往综述最大的不同:

核心论点: 4D 雷达感知正在从稀疏目标级走向密集空间级再到动态场景级理解。

2. 技术全景解析

2.1 4D 雷达数据表示

4D 雷达产生多种数据表示,不同算法面向不同表示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
import numpy as np
from dataclasses import dataclass

@dataclass
class Radar4DData:
"""4D 雷达数据表示"""

# 原始 ADC 数据
raw_adc: np.ndarray # (n_chirps, n_rx, n_samples)

# 距离-多普勒图(Range-Doppler Map)
range_doppler: np.ndarray # (n_range, n_doppler, n_rx)

# 距离-方位角图(Range-Angle Map)
range_angle: np.ndarray # (n_range, n_azimuth, n_elevation)

# 点云(Point Cloud)
points: np.ndarray # (n_points, 6): [x, y, z, doppler, intensity, elevation]

# 占用网格(Occupancy Grid)
occupancy: np.ndarray # (grid_x, grid_y, grid_z)

# 微多普勒谱(Micro-Doppler Spectrogram)
micro_doppler: np.ndarray # (n_frames, n_doppler_bins)


def range_doppler_fft(raw_adc: np.ndarray) -> np.ndarray:
"""
从原始 ADC 数据生成 Range-Doppler Map

Args:
raw_adc: shape=(n_chirps, n_rx, n_samples)

Returns:
rd_map: Range-Doppler Map, shape=(n_range, n_doppler, n_rx)
"""
# Step 1: Range FFT(沿快时间维度)
range_fft = np.fft.fft(raw_adc, axis=-1)

# Step 2: Doppler FFT(沿慢时间/chirp 维度)
rd_map = np.fft.fft(range_fft, axis=0)
rd_map = np.fft.fftshift(rd_map, axes=0)

# 取幅度
rd_map = np.abs(rd_map)

return rd_map


def generate_point_cloud(rd_map: np.ndarray, n_tx: int = 6, n_rx: int = 6) -> np.ndarray:
"""
从 Range-Doppler Map 生成 4D 点云

通过 MIMO 虚拟阵列进行角度估计(DBF 或 MUSIC)

Args:
rd_map: shape=(n_range, n_doppler, n_rx)
n_tx: 发射天线数
n_rx: 接收天线数

Returns:
points: (n_points, 6) [x, y, z, doppler, intensity, elevation]
"""
n_virtual = n_tx * n_rx
n_range, n_doppler, _ = rd_map.shape

# CFAR 检测(简化版)
threshold = np.mean(rd_map) + 3 * np.std(rd_map)
detections = np.where(rd_map[:, :, 0] > threshold)

points = []
for r_idx, d_idx in zip(*detections):
# 角度估计(简化:均匀线阵 DBF)
azimuth = 0 # 实际应用 MUSIC/ESPRIT
elevation = 0

# 转换为笛卡尔坐标
range_val = r_idx * 0.04 # 4cm 分辨率
x = range_val * np.cos(elevation) * np.cos(azimuth)
y = range_val * np.cos(elevation) * np.sin(azimuth)
z = range_val * np.sin(elevation)

doppler = (d_idx - n_doppler//2) * 0.1 # m/s
intensity = rd_map[r_idx, d_idx, 0]

points.append([x, y, z, doppler, intensity, elevation])

return np.array(points)


# 测试数据生成
if __name__ == "__main__":
np.random.seed(42)

# 模拟 4D 雷达原始数据
n_chirps = 128
n_rx = 6
n_samples = 256

raw_adc = (np.random.randn(n_chirps, n_rx, n_samples) * 0.1 +
np.sin(2 * np.pi * 0.1 * np.arange(n_samples))[None, None, :] * 5)

# 生成 Range-Doppler Map
rd_map = range_doppler_fft(raw_adc)
print(f"Range-Doppler Map shape: {rd_map.shape}")
print(f" Range bins: {rd_map.shape[0]}")
print(f" Doppler bins: {rd_map.shape[1]}")
print(f" RX channels: {rd_map.shape[2]}")

# 生成点云
points = generate_point_cloud(rd_map, n_tx=6, n_rx=6)
print(f"\n检测到点云: {len(points)} 个点")
if len(points) > 0:
print(f" 距离范围: {np.sqrt(points[:,0]**2 + points[:,1]**2).min():.2f} - {np.sqrt(points[:,0]**2 + points[:,1]**2).max():.2f} m")
print(f" 速度范围: {points[:,3].min():.2f} - {points[:,3].max():.2f} m/s")

2.2 感知任务全景

论文将 4D 雷达感知分为六大任务层级:

层级 任务 输入 输出 代表算法
L1 信号处理 raw ADC RD Map / 点云 FFT、CFAR、MUSIC
L2 目标检测 点云/RD Map 3D Bounding Box PointRCNN-radar、RadarNet
L3 语义分割 点云/网格 语义标签 RadarNet-Seg、4DRadarSeg
L4 运动估计 点云序列 速度场/轨迹 Radar-based MOT
L5 占用预测 网格/点云 3D 占用图 OccRadar、RadarOcc
L6 场景重建 多帧点云 4D 场景 NeRF-radar、4D-Scene

2.3 跨模态知识蒸馏

论文特别关注 跨模态监督(Cross-modal Supervision),这是 4D 雷达领域的重要趋势:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
import torch
import torch.nn as nn

class RadarCameraDistillation(nn.Module):
"""
摄像头→雷达 跨模态知识蒸馏

论文 Section 5.3 重点讨论:
用高精度摄像头模型监督雷达模型训练
"""

def __init__(self, radar_encoder: nn.Module, camera_encoder: nn.Module):
super().__init__()
self.radar_encoder = radar_encoder
self.camera_encoder = camera_encoder

# 冻结摄像头编码器(作为 Teacher)
for p in self.camera_encoder.parameters():
p.requires_grad = False

def forward(self, radar_input, camera_input):
"""
Args:
radar_input: (B, C_r, H, W) 雷达 BEV 特征
camera_input: (B, C_c, H, W) 摄像头 BEV 特征

Returns:
loss: 蒸馏损失
"""
# Teacher: 摄像头特征
with torch.no_grad():
cam_feat = self.camera_encoder(camera_input)

# Student: 雷达特征
radar_feat = self.radar_encoder(radar_input)

# 特征对齐(通道投影)
if radar_feat.shape[1] != cam_feat.shape[1]:
projector = nn.Conv2d(
radar_feat.shape[1], cam_feat.shape[1], 1
).to(radar_feat.device)
radar_feat = projector(radar_feat)

# KL 散度蒸馏损失
T = 4.0 # 温度参数
loss_kd = nn.KLDivLoss()(
torch.log_softmax(radar_feat / T, dim=1),
torch.softmax(cam_feat / T, dim=1)
) * (T * T)

return loss_kd


# 测试蒸馏框架
if __name__ == "__main__":
# 简化编码器
radar_enc = nn.Sequential(
nn.Conv2d(1, 32, 3, padding=1),
nn.ReLU(),
nn.AdaptiveAvgPool2d((64, 64))
)
cam_enc = nn.Sequential(
nn.Conv2d(3, 64, 3, padding=1),
nn.ReLU(),
nn.AdaptiveAvgPool2d((64, 64))
)

model = RadarCameraDistillation(radar_enc, cam_enc)

radar_in = torch.randn(2, 1, 64, 64)
cam_in = torch.randn(2, 3, 64, 64)

loss = model(radar_in, cam_in)
print(f"蒸馏损失: {loss.item():.4f}")

3. 对 IMS 开发的关键启示

3.1 4D 雷达对座舱感知的价值

功能 4D 雷达优势 对 IMS 的意义
CPD 俯仰角感知 → 检测地板上的儿童 3D 定位精度提升
OOP 姿态 多普勒微动 → 姿态变化检测 补充摄像头遮挡场景
生命体征 相位级精度 → 呼吸/心率 非接触健康监测
多目标分离 36 虚拟通道 → 座椅级定位 后排多座独立监测

3.2 关键技术迁移路径

自动驾驶 4D 雷达技术 迁移到座舱 适配要点
CFAR 目标检测 CPD 活体检测 调整阈值适配微弱呼吸信号
微多普勒分析 姿态/动作识别 座舱内微动特征库
占用网格预测 座椅占用图 3m 内高精度网格
跨模态蒸馏 雷达+摄像头融合 摄像头监督雷达 CPD
MOT 多目标跟踪 多乘员独立跟踪 座舱空间约束

3.3 数据集与评估

论文总结了 4D 雷达相关数据集:

数据集 场景 4D 雷达类型 标注 规模
Astyx 驾驶 Astyx 6455 3D Box 546 帧
RADDet 驾驶 自研 RD Map + Box 15K 帧
BorenSeq 驾驶 Boren 4D Box + Track 12K 帧
VoD 驾驶 4D Box + Occlusion 8.6K 帧
缺失 座舱内 60GHz CPD 标签 无公开

关键发现: 目前没有公开的座舱内 4D/60GHz 雷达数据集,这是 IMS 开发的重大瓶颈。

4. 开发启示与行动计划

4.1 需要自建座舱雷达数据集

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 座舱雷达数据采集框架设计
class CabinRadarDataCollector:
"""座舱 4D/60GHz 雷达数据采集器"""

SCENARIOS = [
# CPD 场景
('cpd_empty_rear_left', '后排左座无人', 100),
('cpd_child_sleeping', '儿童后排睡眠', 50),
('cpd_child_covered', '儿童被毛毯覆盖', 50),
('cpd_infant_seat', '婴儿 rear-facing 座椅', 50),
('cpd_object_bag', '座椅放置书包', 50),
# OOP 场景
('oop_normal_sitting', '正常坐姿', 100),
('oop_leaning_forward', '前倾', 50),
('oop_slouching', '瘫坐', 50),
('oop_feet_on_dash', '脚搭仪表台', 50),
('oop_unbuckled', '未系安全带', 50),
]

def collect(self):
for name, desc, n_samples in self.SCENARIOS:
print(f"采集: {desc} ({name}), 目标 {n_samples} 帧")
# 采集逻辑...

4.2 优先级建议

优先级 任务 时间 依赖
P0 评估 4D 雷达综述中算法迁移可行性 2026 Q4 论文精读
P0 自建座舱雷达数据集(CPD 6 场景 × 50 帧) 2027 Q1 雷达开发套件
P1 跨模态蒸馏原型(摄像头监督雷达) 2027 Q1 摄像头已有
P1 微多普勒座舱动作分类器 2027 Q2 数据集
P2 4D 雷达占用网格座舱版本 2027 Q2 点云处理

5. 总结

论文核心观点

  1. 4D 雷达感知正在从目标级走向场景级:从简单的 3D Box 检测发展到占用预测和动态场景重建
  2. 跨模态蒸馏是趋势:用摄像头高精度监督雷达模型,降低对标注数据的依赖
  3. 俯仰角和微多普勒是 4D 雷达独特优势:这两个维度是 3D 雷达和摄像头无法替代的

对 IMS 的关键启示

  1. 4D 雷达的俯仰角能力可直接提升 CPD:检测地板上的儿童需要俯仰角分辨
  2. 跨模态蒸馏可在 IMS 中落地:用已有的 DMS 摄像头监督雷达 CPD 模型
  3. 座舱内雷达数据集空白是机会:自建数据集可形成竞争壁垒

参考来源:

  • arXiv:2609.19216(2026-09-16),Wu et al.
  • IEEE Sensors Journal 投稿
  • 相关论文:4D mmWave Radar for Sensing Enhancement(2025)