PRISM:物理约束毫米波人体姿态估计——隐私保护+可调度的边缘部署

论文信息

  • 标题: Physics-Bounded mmWave Sensing for Schedulable, Privacy-Preserving Human Pose Estimation
  • arXiv: 2608.14176
  • 作者: Shuntian Zheng 等 (University of Warwick + 多机构)
  • 链接: https://arxiv.org/abs/2608.14176
  • 部署平台: Raspberry Pi 5(无GPU)
  • 核心方法: Physics-Bounded Integral Processing (PBIP) + PAIP + DAOP

核心创新

首次为mmWave人体姿态估计提供确定性执行时间保证。 现有mmWave HPE系统要么对全谱均匀处理(延迟不可预测),要么有损压缩(丢失关键姿态信息)。PRISM利用mmWave信号的物理特性——人体反射在空间上紧凑、在Doppler域可区分——实现:

  • 99th百分位延迟降低24%-58%(对比错过截止期的基线)
  • 0.0%截止期违规率(在所有评估轨迹上)
  • 多人场景线性扩展(人数增加→计算量线性增长)
  • Raspberry Pi 5部署(无GPU,实时运行)

方法详解

1. 核心问题

2. PRISM三大组件

PBIP(Physics-Bounded Integral Processing)

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
import numpy as np
from typing import Tuple

class PhysicsBoundedIntegralProcessing:
"""
PBIP: 物理约束积分处理

核心思想: mmWave人体反射在空间上紧凑
→ 只处理物理占用的区域
→ 用积分查询代替滑动窗口(常数时间)

论文: arXiv 2608.14176
"""

def __init__(self, radar_config):
self.num_range_bins = radar_config['range_bins'] # 64
self.num_angle_bins = radar_config['angle_bins'] # 128
self.num_doppler_bins = radar_config['doppler_bins'] # 16

def compute_integral_image(self, rad_tensor: np.ndarray) -> np.ndarray:
"""
计算积分图(常数时间区域查询)

Args:
rad_tensor: (range_bins, angle_bins, doppler_bins)

Returns:
integral: 积分图,可用于O(1)区域求和
"""
# 沿每个维度累积求和
integral = np.cumsum(np.cumsum(np.cumsum(
rad_tensor.astype(np.float64), axis=0
), axis=1), axis=2)

# 前面补零以便查询
integral = np.pad(integral, ((1,0),(1,0),(1,0)), mode='constant')

return integral

def bounded_query(self, integral: np.ndarray,
r_range: Tuple[int, int],
r_angle: Tuple[int, int],
r_doppler: Tuple[int, int]) -> float:
"""
常数时间区域求和(3D积分查询)

Args:
integral: 积分图
r_range: (start, end) range bin范围
r_angle: (start, end) angle bin范围
r_doppler: (start, end) doppler bin范围

Returns:
sum: 该区域的能量总和
"""
r0, r1 = r_range
a0, a1 = r_angle
d0, d1 = r_doppler

# 3D inclusion-exclusion (8 corners)
S = integral

result = (S[r1,a1,d1] - S[r0,a1,d1] - S[r1,a0,d1] + S[r0,a0,d1]
- (S[r1,a1,d0] - S[r0,a1,d0] - S[r1,a0,d0] + S[r0,a0,d0]))

return float(result)

def find_occupied_regions(self, rad_tensor: np.ndarray,
threshold: float = 0.1) -> list:
"""
找到物理占用区域(人体反射所在区域)

基于物理约束: 人体反射在空间上紧凑
"""
integral = self.compute_integral_image(rad_tensor)

total_energy = self.bounded_query(
integral,
(0, self.num_range_bins),
(0, self.num_angle_bins),
(0, self.num_doppler_bins)
)

if total_energy == 0:
return []

# 递归二分找到高能量区域
regions = self._recursive_bisection(
integral,
(0, self.num_range_bins),
(0, self.num_angle_bins),
(0, self.num_doppler_bins),
threshold * total_energy
)

return regions

def _recursive_bisection(self, integral, r, a, d, threshold):
"""递归二分寻找紧凑区域"""
energy = self.bounded_query(integral, r, a, d)

if energy < threshold:
return []

if (r[1]-r[0] <= 2 and a[1]-a[0] <= 2):
return [(r, a, d)]

# 沿最大维度二分
regions = []
dim_size = [r[1]-r[0], a[1]-a[0], d[1]-d[0]]
max_dim = np.argmax(dim_size)

if max_dim == 0: # range
mid = (r[0] + r[1]) // 2
regions += self._recursive_bisection(integral, (r[0],mid), a, d, threshold)
regions += self._recursive_bisection(integral, (mid,r[1]), a, d, threshold)
elif max_dim == 1: # angle
mid = (a[0] + a[1]) // 2
regions += self._recursive_bisection(integral, r, (a[0],mid), d, threshold)
regions += self._recursive_bisection(integral, r, (mid,a[1]), d, threshold)
else: # doppler
mid = (d[0] + d[1]) // 2
regions += self._recursive_bisection(integral, r, a, (d[0],mid), threshold)
regions += self._recursive_bisection(integral, r, a, (mid,d[1]), threshold)

return regions


class DeadlineAwareOperationProfiles:
"""
DAOP: 截止期感知操作配置

动态选择满足截止期的最高精度配置
"""

PROFILES = [
{'name': 'high', 'resolution': 'full', 'wcet_ms': 45, 'accuracy': 'best'},
{'name': 'medium', 'resolution': 'half', 'wcet_ms': 28, 'accuracy': 'good'},
{'name': 'low', 'resolution': 'quarter', 'wcet_ms': 15, 'accuracy': 'fair'},
{'name': 'minimal', 'resolution': 'eighth', 'wcet_ms': 8, 'accuracy': 'basic'},
]

def select_profile(self, deadline_ms: float) -> dict:
"""选择满足截止期的最高精度配置"""
for profile in sorted(self.PROFILES, key=lambda x: -x['wcet_ms']):
if profile['wcet_ms'] <= deadline_ms:
return profile
return self.PROFILES[-1] # 最快配置


# 测试
if __name__ == "__main__":
config = {
'range_bins': 64,
'angle_bins': 128,
'doppler_bins': 16
}

pbip = PhysicsBoundedIntegralProcessing(config)

# 模拟mmWave RAD张量
rad_tensor = np.zeros((64, 128, 16), dtype=np.float32)
# 模拟人体在range=20-30, angle=50-70, doppler=5-10
rad_tensor[20:30, 50:70, 5:10] = np.random.randn(10, 20, 5) * 10

integral = pbip.compute_integral_image(rad_tensor)

# 查询人体区域能量
energy = pbip.bounded_query(integral, (20, 30), (50, 70), (5, 10))
total = pbip.bounded_query(integral, (0, 64), (0, 128), (0, 16))

print("=== PRISM PBIP 测试 ===")
print(f"RAD张量大小: {rad_tensor.shape}")
print(f"人体区域能量: {energy:.2f}")
print(f"总能量: {total:.2f}")
print(f"人体能量占比: {energy/total*100:.1f}%")
print(f"空bin占比: {(1-energy/total)*100:.1f}% → 可跳过")
print()

# DAOP测试
daop = DeadlineAwareOperationProfiles()
for deadline in [50, 30, 20, 10, 5]:
profile = daop.select_profile(deadline)
print(f"截止期{deadline}ms → 选择: {profile['name']} (WCET={profile['wcet_ms']}ms)")

3. 性能对比

方法 处理方式 99th延迟 截止期违规 精度(MPJPE) 平台
PRISM 物理约束 最低 0.0% 最佳(可行配置) Pi 5
均匀处理 全RAD张量 不可预测 高 较高 需GPU
有损压缩 均匀下采样 低 低 差(丢失Doppler) Pi 5
CFAR点云 芯片端CFAR 极低 0% 最差(丢肢体) 片上DSP

4. 为什么不用CFAR点云?

维度 CFAR点云 PRISM(heatmap)
延迟 极快(片上) 较快(Pi 5可行)
肢体信息 ❌ 丢失低RCS肢体 ✅ 保留亚阈值反射
调度保证 ✅ 固定时间 ✅ WCET验证
姿态精度 差(mmDiff最差) 最佳(可行配置)

核心权衡: CFAR点云快但丢失肢体信息;PRISM保留heatmap但需要物理约束才能实时。

IMS开发启示

1. mmWave HPE对OOP/CPD的直接价值

应用场景 mmWave优势 PRISM贡献
OOP异常姿态 隐私保护,无摄像头 实时边缘部署
CPD儿童检测 穿透毛毯,检测呼吸 低功耗Pi 5部署
浴室跌倒检测 蒸汽环境,摄像头失效 隐私+实时保证
卧室活动监测 隐私优先 截止期保证

2. 部署参考设计

组件 型号 参数 说明
mmWave雷达 TI IWR6843AOP 60GHz, 4Tx4Rx 车规级可选
处理平台 Raspberry Pi 5 4核Cortex-A76 无GPU
处理延迟 15-45ms/帧 DAOP动态选择 22-66fps
功耗 <5W 适合车载 低功耗

3. PRISM→IMS技术迁移路线

阶段 功能 优先级 周期
Phase 1 mmWave CPD呼吸检测 🔴 P0 3个月
Phase 2 + OOP姿态估计 🟡 P1 6个月
Phase 3 + 多人分解(PAIP) 🟡 P1 9个月
Phase 4 + 截止期调度(DAOP) 🟢 P2 12个月

4. 与摄像头DMS的互补

维度 摄像头DMS mmWave PRISM 融合方案
隐私 ❌ 有隐私问题 ✅ RF only mmWave用于私密区域
光照 ❌ 暗光失效 ✅ 不受影响 mmWave夜间补充
遮挡 ❌ 毛毯遮挡失效 ✅ 穿透毛毯 mmWave CPD核心
姿态精度 ✅ 高 ⚠️ 中 摄像头为主
实时性 ✅ 30fps ✅ 22-66fps 都可实时
部署成本 中 低 mmWave更便宜

总结

PRISM的价值不在于精度突破,而在于首次让mmWave HPE在无GPU边缘设备上可调度、可预测、可部署。

对IMS的5条可执行建议:

  1. mmWave是CPD的核心传感器——穿透毛毯检测婴儿呼吸
  2. PRISM的物理约束方法可直接用于车规部署——Pi 5可运行
  3. 不用CFAR点云做姿态估计——丢失肢体信息太多
  4. PBIP积分查询是关键创新——常数时间区域处理
  5. DAOP截止期调度可集成到IMS中间件——动态质量-延迟权衡

论文链接: https://arxiv.org/abs/2608.14176
部署平台: Raspberry Pi 5(无GPU)