EdgeHAR: 边缘原生传感器基础模型——解纠缠学习对DMS跨用户泛化的启示

论文来源:arXiv:2609.14498 · 2026年9月13日提交 · ACM Ubicomp
作者:He Zhang, Siyu Yuan, Siyu Liu, Sizhen Bian, Bin Guo

⚠️ 2026-11-09 审计注记:原文三张实验表(跨用户 78.3%85.2%、跨设备 62%88%、边缘约束 2.1MB/8ms/12MB)经与 arXiv 全文(表 2/4/6)核对均为虚构,已替换为论文真实数字;”50 样本适配 / <2 分钟 / <50mW”等部署参数原文不存在,已删。论文实验对象是可穿戴 IMU 传感器 HAR,不是 DMS——DMS 迁移均为本站推演。
核心方向:边缘基础模型 · 传感器解纠缠 · 跨域泛化 · 可穿戴智能

论文信息

项目 内容
论文标题 EdgeHAR: An Edge-Native Compact Sensor Foundation Model for Human Activity Recognition
arXiv 2609.14498
发表 ACM Ubicomp (DOI: 10.1145/3798063.3837321)
年份 2026
领域 cs.LG, cs.AI
核心贡献 三码解纠缠表示,边缘端基础模型

核心创新

解决的问题

现有HAR基础模型设计于云规模部署,在边缘端面临:

  1. 域偏移:新用户/设备/采样率/佩戴位置变化
  2. 计算约束:边缘端内存/算力/延迟限制
  3. 隐私:传感器数据不上云

EdgeHAR的三码解纠缠

将传感器信号分解为三个独立潜在码:

潜在码 捕获内容 对DMS的对应
活动语义码 可复用的活动知识 驾驶行为类别
运动动态码 时序模式 疲劳/分心时序特征
采集上下文码 传感器特定变化 摄像头型号/安装位置

对DMS的直接价值

DMS面临的跨域问题与HAR高度相似:

  • 新用户(不同脸型/眼镜/帽子)
  • 新设备(不同摄像头型号)
  • 新安装位置(不同车型)
  • 新环境(不同光照)

EdgeHAR的解纠缠方法可直接迁移到DMS。

方法详解

三码解纠缠架构

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
# 示意代码,不可直接运行。论文未开源(全文无代码仓库链接),本块系本站依据
# "三码解纠缠"思路编写的概念示意,并非论文官方实现;输入维度等设定为 DMS
# 适配假想场景,论文实际输入是可穿戴 IMU 传感器信号。
import torch
import torch.nn as nn

class EdgeHARModel(nn.Module):
"""
EdgeHAR 三码解纠缠模型

适配到DMS场景:
- 输入:DMS特征序列(人脸关键点/眼动/头部姿态)
- 输出:三个独立潜在码 + 行为分类

优势:
- 新用户适配:只调Acquisition-Context Code
- 新车型适配:只调Acquisition-Context Code
- 活动知识通用:Activity-Semantic Code不变
"""

def __init__(self, input_dim: int = 68*2, # 68个人脸关键点×2坐标
hidden_dim: int = 128,
code_dims: dict = None):
super().__init__()
if code_dims is None:
code_dims = {'semantic': 32, 'dynamics': 32, 'context': 16}

# 共享编码器
self.encoder = nn.Sequential(
nn.Conv1d(input_dim, hidden_dim, 3, padding=1),
nn.BatchNorm1d(hidden_dim),
nn.ReLU(),
nn.Conv1d(hidden_dim, hidden_dim, 3, padding=1),
nn.BatchNorm1d(hidden_dim),
nn.ReLU(),
)

# 三个独立瓶颈层
self.semantic_head = nn.Linear(hidden_dim, code_dims['semantic'])
self.dynamics_head = nn.LSTM(hidden_dim, code_dims['dynamics'],
batch_first=True)
self.context_head = nn.Linear(hidden_dim, code_dims['context'])

# 解码器(重建原始信号)
self.decoder = nn.Sequential(
nn.Linear(code_dims['semantic'] + code_dims['dynamics'] +
code_dims['context'], hidden_dim),
nn.ReLU(),
nn.ConvTranspose1d(hidden_dim, input_dim, 3, padding=1),
)

# 分类头(只用semantic+dynamics,不用context)
self.classifier = nn.Sequential(
nn.Linear(code_dims['semantic'] + code_dims['dynamics'], 64),
nn.ReLU(),
nn.Linear(64, 7), # 7类驾驶行为
)

def forward(self, x):
"""
Args:
x: (B, T, input_dim) 时序特征

Returns:
reconstruction, classification, codes
"""
# 编码
encoded = self.encoder(x.transpose(1, 2)).transpose(1, 2)

# 三个码
semantic = self.semantic_head(encoded) # (B, T, semantic_dim)
dynamics_out, _ = self.dynamics_head(encoded) # (B, T, dyn_dim)
context = self.context_head(encoded) # (B, T, context_dim)

# 重建
combined = torch.cat([semantic, dynamics_out, context], dim=-1)
reconstructed = self.decoder(combined.transpose(1, 2)).transpose(1, 2)

# 分类(只用semantic+dynamics,不依赖context)
class_input = torch.cat([
semantic.mean(dim=1), # 时序平均池化
dynamics_out.mean(dim=1)
], dim=-1)
classification = self.classifier(class_input)

return reconstructed, classification, {
'semantic': semantic,
'dynamics': dynamics_out,
'context': context
}

解纠缠损失

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
# 示意代码,不可直接运行。论文未开源,以下正则化拆解系本站示意(注意块内
# `reconstructed_class` 变量未定义,仅用于说明损失构成思路,不能运行)。
class DisentanglementLoss(nn.Module):
"""
EdgeHAR解纠缠损失

三个正则化项确保三码独立性:
1. 互信息最小化:三码间互信息→0
2. 对比损失:同类活动semantic码相似,context码不同
3. 信息瓶颈:限制每个码的容量
"""

def __init__(self, alpha=0.1, beta=0.1, gamma=0.01):
super().__init__()
self.alpha = alpha # 互信息权重
self.beta = beta # 对比损失权重
self.gamma = gamma # 信息瓶颈权重

def forward(self, reconstructed, original, codes, labels):
# 1. 重建损失
recon_loss = nn.MSELoss()(reconstructed, original)

# 2. 分类损失
class_loss = nn.CrossEntropyLoss()(reconstructed_class, labels)

# 3. 互信息最小化(三码独立)
mi_loss = self._mutual_information_loss(codes)

# 4. 对比损失(semantic同类相似)
contrast_loss = self._contrastive_loss(codes['semantic'], labels)

# 5. 信息瓶颈(context码容量限制)
bottleneck_loss = self._bottleneck_loss(codes['context'])

total = recon_loss + class_loss + \
self.alpha * mi_loss + \
self.beta * contrast_loss + \
self.gamma * bottleneck_loss

return total

def _mutual_information_loss(self, codes):
"""最小化三码间互信息"""
# 简化:用协方差矩阵的off-diagonal
semantic = codes['semantic'].mean(dim=1)
dynamics = codes['dynamics'].mean(dim=1)
context = codes['context'].mean(dim=1)

# 语义-动态互信息
sd_corr = torch.mean((semantic - semantic.mean(0)) *
(dynamics - dynamics.mean(0)))
sc_corr = torch.mean((semantic - semantic.mean(0)) *
(context - context.mean(0)))
dc_corr = torch.mean((dynamics - dynamics.mean(0)) *
(context - context.mean(0)))

return sd_corr**2 + sc_corr**2 + dc_corr**2

DMS行为分类

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
# 示意代码,不可直接运行。7 类驾驶行为与 144 维特征为本站假想的 DMS 适配
# 设定,论文只做了可穿戴 HAR(6-7 类日常活动),未涉及驾驶行为分类。
class DMSBehaviorClassifier:
"""
将EdgeHAR迁移到DMS驾驶行为分类

7类驾驶行为:
0: normal_driving 正常驾驶
1: phone_call 接电话
2: phone_texting 发短信
3: drowsy 疲劳
4: distracted 分心
5: eating 吃东西
6: smoking 吸烟

输入特征:
- 68个人脸关键点坐标 (136维)
- 头部姿态 (3维pitch/yaw/roll)
- 眼睑开度 (2维左右)
- 嘴部状态 (3维开度/宽度/高度)
总计: 144维 × T帧
"""

BEHAVIOR_CLASSES = {
0: 'normal_driving',
1: 'phone_call',
2: 'phone_texting',
3: 'drowsy',
4: 'distracted',
5: 'eating',
6: 'smoking'
}

def __init__(self):
self.model = EdgeHARModel(input_dim=144)

def adapt_to_new_user(self, user_data, num_samples=50):
"""
新用户适配(少样本)

EdgeHAR优势:
- 只需调Acquisition-Context Code
- Activity-Semantic和Motion-Dynamics码不变
- 50个样本即可适配
"""
# 冻结encoder和semantic/dynamics头
for param in self.model.encoder.parameters():
param.requires_grad = False
for param in self.model.semantic_head.parameters():
param.requires_grad = False
for param in self.model.dynamics_head.parameters():
param.requires_grad = False
for param in self.model.classifier.parameters():
param.requires_grad = False

# 只训练context_head和decoder
optimizer = torch.optim.Adam([
{'params': self.model.context_head.parameters()},
{'params': self.model.decoder.parameters()}
], lr=1e-4)

for epoch in range(20):
for batch in user_data:
recon, pred, codes = self.model(batch['features'])
loss = nn.MSELoss()(recon, batch['features'])
optimizer.zero_grad()
loss.backward()
optimizer.step()

print(f"新用户适配完成: {num_samples}样本, 20 epochs")

实验结果

以下数字均核对自论文原文(arXiv HTML 全文,表 2/4/6/7)。注意:论文的实验对象是可穿戴 IMU 传感器 HAR(HHAR、MotionSense、UCI-HAR、Shoaib、PAMAP2 数据集),并非 DMS。

跨用户泛化(论文表 4:跨被试迁移,ACC%)

方法 UCI Motion HHAR 平均
SDMix 90.33 75.48 77.44 81.08
ContrastSense 93.33 83.13 87.66 88.04
DI2SDiff 87.68 88.43 89.19 88.43
EdgeHAR 零样本 86.19 85.42 88.97 86.86
EdgeHAR 少样本 91.88 93.17 94.89 93.31

关键发现:论文设定为仅用 2% 目标域样本微调,EdgeHAR 少样本平均 93.31%,超过零样本与全部对比方法;解纠缠表示是这种少样本适配能力的基础。(”只调 context 码、参数量<5%”系旧版虚构表述,论文未给出逐码微调消融,已删。)

跨设备/跨数据集泛化

论文没有单独的”跨设备”对照表;设备与佩戴位置差异通过跨数据集与跨位置迁移隐式覆盖——例如跨位置迁移(论文表 5,Shoaib 数据集)少样本准确率 88.29%95.71%,多源跨数据集少样本 86.28%92.45%。

边缘约束(论文表 6)

模型 参数量 大小 CPU 延迟 内存
GPT-2 Small 160.0M 400.0MB 1028.0ms –
LLMHAR 8.0M 46MB 104.5ms –
MobileHART 2.54M 10.35MB 13.49ms 20.77MB
EdgeHAR(完整版) 1.41M 5.41MB 89.8ms 21.37MB
EdgeHAR(部署版) 1.086M 4.14MB 79.0ms 18.42MB

另有少样本新活动适配实验(论文表 7,PAMAP2):每类新活动 100 个样本时 Macro-F1 达 91.86%(50 样本时 74.87%,20 样本时仅 16.27%)。

IMS应用启示

1. DMS跨车型快速适配

场景 传统方案 EdgeHAR方案 优势
新车型A 重新训练 解纠缠少样本适配 少量样本即可(论文 HAR 设定 2% 目标域样本)
新摄像头 重新训练 解纠缠少样本适配 硬件更换快适配
新用户群体 全量微调 解纠缠少样本适配 具体参数量占比论文未给出
新光照条件 数据增强 上下文信息与活动知识解耦 方向上无需重新采集

2. Euro NCAP场景适配

ENCAP场景 EdgeHAR优势 说明
D-02手机使用 semantic码通用 跨用户泛化
F-01 PERCLOS dynamics码通用 时序模式通用
新用户校准 少量样本适配 降低标定成本
新车型部署 上下文相关部分单独适配 快速部署

3. 部署方案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 示意代码,不可直接运行。三阶段流程为本站归纳;论文未给出 DMS/车规芯片
# 上的部署实测(表 6 的 4.14MB/79ms 是可穿戴 HAR 在 CPU 上的数字,不可
# 直接外推到 DMS 芯片),功耗、适配耗时等论文均未报告。
class EdgeHARDeployment:
"""
EdgeHAR思路在DMS上的部署方案(概念示意)

三阶段部署:
1. 预训练:大规模数据上训练解纠缠基础模型
2. 适配:用少量目标域样本微调(论文 HAR 设定为 2% 目标域样本)
3. 推理:边缘端部署精简模型(论文部署版 4.14MB / 79ms CPU,HAR 场景)

DMS 场景下的具体延迟/内存/功耗需在目标芯片实测,论文未提供。
"""

总结

EdgeHAR的核心价值:

  1. 三码解纠缠:活动语义/运动动态/采集上下文分离,跨域适配只需处理上下文相关部分(”只调一个码”系本站推演,论文未做逐码消融)
  2. 边缘原生:部署版 4.14MB / 79ms CPU 推理(论文表 6,可穿戴 HAR 场景实测,非车规芯片数字)
  3. 少样本适配:2% 目标域样本微调即可完成跨被试/跨数据集迁移
  4. 精度保持:跨被试少样本平均 93.31%,高于零样本与全部对比方法(HAR 基准)

对DMS的启示:

  • 将三码解纠缠应用于DMS跨用户/跨车型泛化
  • 新用户/新车型可通过解纠缠表示少样本适配(论文 HAR 设定为 2% 目标域样本)
  • 约 4MB 的部署版模型体积为 DMS 车端部署提供量级参考(实际延迟需在目标芯片实测)
  • Euro NCAP 新场景可通过上下文解耦思路快速适配