STAR: 场景任务感知4D雷达预处理,端到端认知雷达新范式

论文信息

  • 标题: STAR: Scene- and Task-Aware 4D Radar Preprocessing Towards End-to-End Cognitive Radar
  • arXiv: 2609.24151 (2026年9月21日)
  • 作者: Seung-Hyun Song 等
  • 基准: K-Radar (4D雷达benchmark)
  • 性能: 74.3 AP,SOTA +5.6 AP

核心创新

STAR预处理器将4D雷达的预处理阶段与下游感知任务端到端联合优化,取代传统CFAR检测的固定信号级阈值,让任务目标直接指导雷达点云生成。

传统 vs STAR

方面 传统CFAR STAR
预处理准则 信号级阈值 场景上下文+任务目标
与感知的关系 独立优化 端到端联合优化
丢弃信息 可能丢弃有价值信息 保留任务相关信息
点云质量 固定 任务自适应
AP (K-Radar) 基线 74.3 (+5.6)

4D雷达基础

4D雷达提供4个维度的测量:

  • 距离
  • 方位角
  • 俯仰角
  • 多普勒

在光照变化和恶劣天气下保持鲁棒,是摄像头和LiDAR的补充。

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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
"""
论文:STAR: Scene- and Task-Aware 4D Radar Preprocessing
arXiv: 2609.24151

核心方法:端到端任务感知的4D雷达点云生成
"""

import torch
import torch.nn as nn
import torch.nn.functional as F

class STARPreprocessor(nn.Module):
"""
Scene- and Task-Aware Radar Preprocessor

将传统CFAR的固定阈值替换为:
1. 场景上下文编码
2. 任务感知点选择
3. 端到端与3D检测器联合训练
"""

def __init__(self,
radar_channels: int = 64,
scene_dim: int = 256,
num_radar_features: int = 5):
"""
Args:
radar_channels: 雷达特征通道数
scene_dim: 场景上下文编码维度
num_radar_features: 雷达点特征数 (x,y,z,doppler,intensity)
"""
super().__init__()

# 场景上下文编码器
self.scene_encoder = nn.Sequential(
nn.Conv2d(radar_channels, 128, 3, padding=1),
nn.BatchNorm2d(128),
nn.ReLU(),
nn.Conv2d(128, 256, 3, stride=2, padding=1),
nn.BatchNorm2d(256),
nn.ReLU(),
nn.AdaptiveAvgPool2d(1),
nn.Flatten(),
nn.Linear(256, scene_dim)
)

# 任务感知点选择器
self.point_selector = nn.Sequential(
nn.Linear(num_radar_features + scene_dim, 128),
nn.ReLU(),
nn.Linear(128, 64),
nn.ReLU(),
nn.Linear(64, 1), # 选择概率
nn.Sigmoid()
)

# 点特征增强
self.feature_enhancer = nn.Sequential(
nn.Linear(num_radar_features + scene_dim, 64),
nn.ReLU(),
nn.Linear(64, num_radar_features)
)

def forward(self, radar_tensor, raw_points):
"""
Args:
radar_tensor: (B, C, H, W) 雷达数据张量
raw_points: (B, N, 5) 原始雷达点 [x,y,z,doppler,intensity]

Returns:
task_relevant_points: 任务相关点云
selection_scores: 选择分数
"""
# 1. 场景上下文编码
scene_ctx = self.scene_encoder(radar_tensor) # (B, scene_dim)

# 2. 为每个点添加场景上下文
B, N, _ = raw_points.shape
scene_expanded = scene_ctx.unsqueeze(1).expand(-1, N, -1) # (B, N, scene_dim)
points_with_ctx = torch.cat([raw_points, scene_expanded], dim=-1) # (B, N, 5+scene_dim)

# 3. 任务感知选择
selection_scores = self.point_selector(points_with_ctx) # (B, N, 1)
selection_scores = selection_scores.squeeze(-1) # (B, N)

# 4. 选择top-K点
K = min(512, N) # 最多512个点
topk_scores, topk_indices = torch.topk(selection_scores, K, dim=1)

# 5. 收集选中点
selected_points = torch.gather(
raw_points, 1,
topk_indices.unsqueeze(-1).expand(-1, -1, raw_points.shape[-1])
)

# 6. 点特征增强
selected_ctx = torch.gather(
scene_expanded, 1,
topk_indices.unsqueeze(-1).expand(-1, -1, scene_expanded.shape[-1])
)
enhanced_input = torch.cat([selected_points, selected_ctx], dim=-1)
enhanced_points = self.feature_enhancer(enhanced_input)

# 残差连接
enhanced_points = enhanced_points + selected_points

return enhanced_points, selection_scores


# CFAR基线对比
class CFARPreprocessor:
"""传统CFAR预处理器(基线)"""

def __init__(self, threshold=3.0, guard_cells=2, training_cells=8):
self.threshold = threshold
self.guard_cells = guard_cells
self.training_cells = training_cells

def detect(self, radar_data):
"""
CFAR检测: 基于信号强度阈值

问题: 不考虑场景上下文和下游任务
"""
# 简化的CA-CFAR
detected_points = []
for i in range(len(radar_data)):
# 计算训练窗口内平均功率
# 如果CUT > threshold * avg → 检测
pass
return detected_points


# 端到端训练
class STARTrainer:
"""STAR + 3D检测器端到端训练"""

def __init__(self):
self.preprocessor = STARPreprocessor()
# 下游3D检测器 (e.g., PointPillars, CenterPoint)
self.detector = PointPillarsDetector()

self.optimizer = torch.optim.AdamW(
list(self.preprocessor.parameters()) +
list(self.detector.parameters()),
lr=2e-4, weight_decay=1e-4
)

def train_step(self, radar_tensor, raw_points, gt_boxes):
"""
端到端训练步骤

Args:
radar_tensor: 雷达数据
raw_points: 原始雷达点
gt_boxes: 标注框
"""
# 1. STAR预处理
task_points, sel_scores = self.preprocessor(radar_tensor, raw_points)

# 2. 3D检测
pred_boxes, pred_scores = self.detector(task_points)

# 3. 检测损失
det_loss = compute_detection_loss(pred_boxes, pred_scores, gt_boxes)

# 4. 选择稀疏性正则 (鼓励选择信息丰富的点)
sparsity_loss = -torch.mean(torch.log(sel_scores + 1e-8))

# 5. 总损失
total_loss = det_loss + 0.01 * sparsity_loss

self.optimizer.zero_grad()
total_loss.backward()
self.optimizer.step()

return {"det_loss": det_loss.item(), "sparsity": sparsity_loss.item()}


class PointPillarsDetector(nn.Module):
"""简化版PointPillars检测器"""
def __init__(self):
super().__init__()
self.pfe = nn.Sequential(
nn.Linear(5, 64), nn.ReLU(),
nn.Linear(64, 64)
)
self.backbone = nn.Sequential(
nn.Conv2d(64, 64, 3, stride=2, padding=1), nn.ReLU(),
nn.Conv2d(64, 128, 3, stride=2, padding=1), nn.ReLU(),
nn.Conv2d(128, 256, 3, stride=2, padding=1), nn.ReLU()
)
self.head = nn.Linear(256, 7) # [x,y,z,w,h,l,theta]

def forward(self, points):
# 简化处理
features = self.pfe(points) # (B, K, 64)
# 投影到BEV + backbone + head
return None, None


def compute_detection_loss(pred_boxes, pred_scores, gt_boxes):
return torch.tensor(0.0, requires_grad=True)


# 测试
if __name__ == "__main__":
# 模拟4D雷达数据
B, C, H, W = 2, 64, 256, 256
N = 2048 # 原始点数

radar_tensor = torch.randn(B, C, H, W)
raw_points = torch.randn(B, N, 5) # [x,y,z,doppler,intensity]

# STAR预处理
star = STARPreprocessor()
task_points, scores = star(radar_tensor, raw_points)

print(f"输入雷达张量: {radar_tensor.shape}")
print(f"原始点数: {raw_points.shape}")
print(f"输出点数: {task_points.shape}")
print(f"选择分数范围: [{scores.min():.3f}, {scores.max():.3f}]")

# K-Radar基准结果
print("\n=== K-Radar基准结果 ===")
print("STAR: 74.3 AP (SOTA)")
print("基线提升: +5.6 AP")
print("兼容性: 提升现有3D检测器性能")

从自动驾驶到座舱:4D雷达CPD应用

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
# 4D雷达座舱应用矩阵
cabin_4d_radar = {
"CPD儿童检测": {
"measurements": ["距离", "方位", "俯仰", "微多普勒呼吸"],
"advantage": "穿透座椅/毯子,3D定位精确",
"star_benefit": "任务感知保留呼吸相关点,过滤杂波"
},
"乘员3D姿态估计": {
"measurements": ["3D位置", "运动方向", "速度"],
"advantage": "无需摄像头即可获取3D姿态",
"star_benefit": "场景感知优先人体相关点"
},
"安全带佩戴检测": {
"measurements": ["距离", "方位", "多普勒"],
"advantage": "检测安全带材质的雷达反射特征",
"star_benefit": "任务感知选择安全带特征点"
},
"入侵检测": {
"measurements": ["3D位置", "速度", "方向"],
"advantage": "全舱3D覆盖,穿透遮挡",
"star_benefit": "场景感知优先人体运动点"
}
}

print("=== 4D雷达座舱应用 ===")
for app, info in cabin_4d_radar.items():
print(f"\n{app}:")
for k, v in info.items():
print(f" {k}: {v}")

参考


发布时间: 2026-09-25 02:00
分类: 雷达 | 4D雷达 | 传感器融合 | CPD | 端到端 | 论文解读