嵌入式 mmWave 雷达手势识别:双流 LSTM + Attention-BiGRU 网络深度解析

本文深度解读 MDPI Electronics 2026 论文,该研究提出双流 LSTM + Attention-BiGRU 网络用于嵌入式 mmWave 雷达手势识别,在保持高精度的同时实现边缘部署,为座舱手势交互提供了非视觉方案。

1. 论文信息

要素 内容
标题 Embedded mmWave Radar-Based Hand Gesture Recognition Using a Dual-Stream LSTM and Attention-BiGRU Network
作者 Wang X., Wu H., Zheng J., Zhang Y.
期刊 Electronics, 15(17), 3973
发表 2026 年 9 月
核心方法 双流 LSTM + Attention-BiGRU
传感器 mmWave 雷达(嵌入式)

2. 核心架构

2.1 双流网络设计

2.2 为什么用 mmWave 而非摄像头?

特性 mmWave 雷达 摄像头
光照条件 ✅ 全光照 ❌ 需要光
隐私 ✅ 无图像 ❌ 录制视频
雨雾穿透 ✅ 强 ❌ 弱
精度 ⚠️ 中 ✅ 高
功耗 ✅ 低 ⚠️ 中
成本 ✅ 低 ✅ 低

2.3 手势识别代码框架

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
import torch
import torch.nn as nn
import torch.nn.functional as F

class DualStreamGestureNet(nn.Module):
"""
双流 LSTM + Attention-BiGRU 手势识别网络

Stream 1: LSTM 处理距离-多普勒时序
Stream 2: BiGRU + Attention 处理角度时序
"""

def __init__(self, input_size_range=(64, 64),
input_size_angle=(32,),
hidden_dim=128, num_classes=8):
super().__init__()

# Stream 1: LSTM for Range-Doppler
self.lstm = nn.LSTM(
input_size=input_size_range[0] * input_size_range[1],
hidden_size=hidden_dim,
num_layers=2,
batch_first=True,
bidirectional=False,
)

# Stream 2: BiGRU + Attention for Angle
self.bigru = nn.GRU(
input_size=input_size_angle[0],
hidden_size=hidden_dim,
num_layers=2,
batch_first=True,
bidirectional=True,
)

# Attention mechanism
self.attention = nn.Sequential(
nn.Linear(hidden_dim * 2, hidden_dim),
nn.Tanh(),
nn.Linear(hidden_dim, 1),
nn.Softmax(dim=1),
)

# Fusion + Classification
self.fusion = nn.Sequential(
nn.Linear(hidden_dim + hidden_dim * 2, 256),
nn.ReLU(),
nn.Dropout(0.3),
nn.Linear(256, num_classes),
)

def forward(self, range_doppler, angle_seq):
"""
Args:
range_doppler: (B, T, H, W) 距离-多普勒时序
angle_seq: (B, T, A) 角度时序
"""
B, T, H, W = range_doppler.shape

# Stream 1: LSTM
rd_flat = range_doppler.view(B, T, H * W)
lstm_out, _ = self.lstm(rd_flat)
lstm_feat = lstm_out[:, -1, :] # 取最后时步

# Stream 2: BiGRU + Attention
gru_out, _ = self.bigru(angle_seq)

# Attention weighting
att_weights = self.attention(gru_out) # (B, T, 1)
attended = torch.sum(att_weights * gru_out, dim=1) # (B, hidden*2)

# Fusion
combined = torch.cat([lstm_feat, attended], dim=1)
output = self.fusion(combined)

return output, att_weights


# 测试
if __name__ == "__main__":
model = DualStreamGestureNet(num_classes=8)

# 模拟输入
B, T = 4, 30 # 批次4, 时序30帧
range_doppler = torch.randn(B, T, 64, 64)
angle_seq = torch.randn(B, T, 32)

output, att_weights = model(range_doppler, angle_seq)

print(f"输入: RD={range_doppler.shape}, Angle={angle_seq.shape}")
print(f"输出: {output.shape}")
print(f"注意力权重: {att_weights.shape}")
print(f"参数量: {sum(p.numel() for p in model.parameters()):,}")

3. 对 IMS 座舱交互的启示

3.1 手势交互场景

手势 车内功能 当前方案 mmWave 优势
挥手 接听/拒接电话 按键 非接触
旋转 调节音量 旋钮 非接触
滑动 切换歌曲 触屏 非接触
指点 导航到地点 语音+触屏 静默操作
手掌 暂停媒体 按键 非接触

3.2 DMS + 手势融合

3.3 部署建议

建议 优先级 依据
mmWave 手势作为辅助交互 🟡 中 非核心功能
与 DMS 共用雷达 🟡 中 UWB 可兼用
Attention 提升可解释性 🟢 低 调试辅助

4. 总结

mmWave 雷达手势识别为座舱提供了非视觉、隐私友好的交互方案。双流 LSTM+Attention-BiGRU 架构在嵌入式部署中平衡了精度和效率。对 IMS 而言,mmWave 手势是 DMS 摄像头的补充而非替代。


参考来源:

  • Wang et al., “Embedded mmWave Radar-Based Hand Gesture Recognition Using a Dual-Stream LSTM and Attention-BiGRU Network”, Electronics, 15(17), 3973 (2026)