Heartian:将rPPG心率信号嵌入3D高斯头部Avatar——DMS生理数据合成新范式

论文信息

项目 内容
标题 💓Heartian: Physiology-Aware Relightable Gaussian Head Avatar
arXiv arXiv:2609.28539 (2026年9月22日)
会议 SIGGRAPH Asia 2026 Technical Communications
DOI 10.1145/3829339.3847838
作者 Xiaoyue Fan et al.
领域 cs.CV, cs.GR
数据集 UBFC-rPPG, PURE, MMPD (152个录制)

核心创新

Heartian是首个将心率信号(rPPG)嵌入3D高斯头部Avatar的框架。传统高斯头部Avatar将面部外观建模为时间静态的,忽略了心跳引起的微小肤色变化。Heartian学习心脏周期相关的逐帧面色调制,使合成头像携带可恢复的rPPG信号。

三大突破:

  1. 生理信号嵌入3D头像:心率0.29 bpm误差,MAPE 0.38%
  2. 渲染后信号可恢复:TS-CAN从渲染头像恢复心率,0.97 bpm误差
  3. 重建质量无损:PSNR仅降低0.005 dB

方法详解

1. 心率信号建模

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
import torch
import torch.nn as nn
import numpy as np

class HeartianModel(nn.Module):
"""
Heartian: 生理感知的可重照高斯头部Avatar

核心组件:
1. Relightable Gaussian Head Avatar(基础头像)
2. 心脏周期相关面色调制模块
3. 接触式PPG监督训练

用于DMS数据合成:生成带真实心率信号的合成面部视频
"""

def __init__(self, num_gaussians=50000):
super().__init__()

# 基础3D高斯头像参数
self.gaussian_means = nn.Parameter(torch.randn(num_gaussians, 3))
self.gaussian_scales = nn.Parameter(torch.ones(num_gaussians, 3) * 0.01)
self.gaussian_rotations = nn.Parameter(torch.zeros(num_gaussians, 4))
self.gaussian_opacities = nn.Parameter(torch.ones(num_gaussians, 1))

# 基础albedo(肤色)
self.base_albedo = nn.Parameter(torch.ones(num_gaussians, 3) * 0.5)

# 💓心率调制模块
self.cardiac_modulation = CardiacModulation(num_gaussians)

# 球谐光照
self.sh_coefficients = nn.Parameter(torch.randn(num_gaussians, 3, 4))

def forward(self, viewpoint, lighting, frame_idx, ppg_signal=None):
"""
渲染指定帧的头部图像

Args:
viewpoint: 相机视角
lighting: 光照条件
frame_idx: 帧索引
ppg_signal: 心率信号(训练时使用接触式PPG监督)

Returns:
rendered_image: 含心率调制的面部图像
"""
# 基础albedo
albedo = self.base_albedo.clone()

# 💓添加心率调制
if ppg_signal is not None:
modulation = self.cardiac_modulation(frame_idx, ppg_signal)
albedo = albedo + modulation # 肤肤色变化

# 球谐光照计算
shaded = self._shade(albedo, lighting)

# 3D高斯渲染
rendered = self._render_gaussians(shaded, viewpoint)

return rendered


class CardiacModulation(nn.Module):
"""
心脏周期相关的面色调制模块

核心模型:心率波形 = 两个高斯函数之和
f(t) = A1 * N(t | μ1, σ1) + A2 * N(t | μ2, σ2)

面部肤色变化(rPPG信号):
- 额头/面颊区域:心跳引起的血液容积变化
- 变化幅度:约1-2%的RGB值变化
- 频率:0.5-4Hz(30-240bpm)
"""

def __init__(self, num_gaussians):
super().__init__()
self.num_gaussians = num_gaussians

# 双高斯波形参数
self.amp1 = nn.Parameter(torch.tensor(0.5))
self.mu1 = nn.Parameter(torch.tensor(0.0))
self.sigma1 = nn.Parameter(torch.tensor(0.3))
self.amp2 = nn.Parameter(torch.tensor(0.3))
self.mu2 = nn.Parameter(torch.tensor(0.5))
self.sigma2 = nn.Parameter(torch.tensor(0.2))

# 空间残差MLP(每个高斯点的个体调制)
self.residual_mlp = nn.Sequential(
nn.Linear(3, 32), # xyz坐标 → 调制
nn.ReLU(),
nn.Linear(32, 3), # RGB调制
nn.Tanh() # 限制幅度
)

def forward(self, frame_idx, ppg_signal):
"""
计算第frame_idx帧的心率面色调制

Args:
frame_idx: 帧索引
ppg_signal: 接触式PPG真值信号

Returns:
modulation: shape=(num_gaussians, 3) RGB调制量
"""
# 心率波形建模
t = ppg_signal[frame_idx] if torch.is_tensor(ppg_signal) else ppg_signal

# 双高斯波形
waveform = (
self.amp1 * torch.exp(-((t - self.mu1) ** 2) / (2 * self.sigma1 ** 2)) +
self.amp2 * torch.exp(-((t - self.mu2) ** 2) / (2 * self.sigma2 ** 2))
)

# 空间调制(面部区域差异)
spatial_residual = self.residual_mlp(
self.gaussian_positions # (N, 3)
) # (N, 3)

# 组合
modulation = waveform * spatial_residual * 0.02 # 2%幅度

return modulation


# 测试
if __name__ == "__main__":
model = HeartianModel(num_gaussians=10000)

# 模拟60bpm心率信号(1Hz)
fps = 30
duration_sec = 10
t = np.linspace(0, duration_sec, fps * duration_sec)
ppg = np.sin(2 * np.pi * 1.0 * t) # 1Hz = 60bpm

print(f"心率信号: {len(ppg)}帧, {duration_sec}秒 @ {fps}fps")
print(f"模拟心率: 60 bpm")
print(f"rPPG变化幅度: ~1-2% RGB值")

2. 数据集与训练

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
dataset_config = {
"UBFC-rPPG": {
"recordings": 42,
"task": "rPPG预测",
"lighting": "受控"
},
"PURE": {
"recordings": 60,
"task": "rPPG预测",
"motion": "6种运动级别"
},
"MMPD": {
"recordings": 50,
"task": "rPPG预测",
"diversity": "多种族/多光照"
},
"total": 152, # 录制数
"supervision": "接触式PPG(指尖脉搏血氧仪)",
"test_metric": "心率MAE (bpm) / MAPE (%)"
}

实验结果

rPPG信号恢复性能

方法 心率MAE (bpm) MAPE (%) 说明
Heartian(属性空间) 0.29 0.38 从Avatar属性直接读取
Heartian(TS-CAN渲染后) 0.97 1.21 从渲染图像恢复
Heartian(PhysNet渲染后) 1.85 2.63 另一rPPG解码器
基线Avatar(无心率) N/A N/A 无法恢复心率

重建质量

指标 Heartian 基线(无心率) 差异
PSNR 32.14 dB 32.15 dB -0.005 dB
SSIM 0.951 0.951 ~0
LPIPS 0.063 0.063 ~0

心率调制对面部重建质量几乎无影响。


对IMS/DMS的重大意义

1. rPPG训练数据合成

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
class DMSrPPGDataSynthesis:
"""
Heartian对DMS的核心价值:合成带心率信号的训练数据

现状问题:
- rPPG数据采集需要接触式PPG设备同步
- 受试者数量有限,多样性不足
- 特定场景(夜间/疲劳/分心)数据稀缺

Heartian方案:
- 生成任意数量的合成面部视频
- 每个视频携带可恢复的rPPG信号
- 可控制心率(正常/疲劳/压力/醉酒)
- 可控制光照/姿态/表情/种族
"""

synthesis_config = {
"可控参数": {
"heart_rate": "30-200 bpm",
"heart_rate_variability": "HRV模式(压力/疲劳/放松)",
"lighting": "白天/夜间/隧道/逆光",
"pose": "任意头部姿态",
"expression": "正常/打哈欠/眨眼",
"ethnicity": "多种族高斯Avatar",
"motion": "静止/驾驶振动/转头"
},
"生成量": "无限(从10个真实视频→10000+合成视频)",
"验证": "TS-CAN恢复误差<1bpm"
}

2. DMS健康监测应用

3. 与NVIDIA Cosmos 3协同

工具 角色 产出
Heartian 嵌入生理信号 带心率的3D头部Avatar
Cosmos 3 世界模型生成 座舱环境视频
Metahuman 角色生成 多样化3D人物
组合 完整管道 带生理信号的合成座舱视频

4. Euro NCAP健康监测对接

NCAP要求 Heartian贡献 可行性
驾驶员心率监测 合成训练数据 ✅ 可训练rPPG模型
疲劳相关HRV 合成不同HRV模式 ✅
压力检测 合成压力心率模式 ✅
酒驾心率特征 合成醉酒心率 ✅
实时心率精度 TS-CAN 0.97bpm ✅ 满足

5. 关键优势

  1. 从10个真实视频生成10000+合成视频:数据增量1000x
  2. 心率精度0.97bpm:满足车载DMS精度需求
  3. 光照/姿态/种族可控:覆盖长尾场景
  4. 重建质量无损:不牺牲视觉质量
  5. SIGGRAPH Asia 2026:学术前沿

局限与挑战

局限 详情 缓解
需要PPG同步数据 训练需接触式PPG 一次性采集,永久使用
静态录制 152个录制为静止状态 扩展到运动场景
心率范围 测试30-120bpm 需扩展到极端心率
跨设备验证 仅验证TS-CAN 需验证更多rPPG方法

总结

Heartian为DMS rPPG数据合成开辟了一条全新路径——从10个真实带PPG同步的视频,通过3D高斯Avatar心率信号嵌入,可以生成无限量的、可控心率的、多场景的合成训练数据。结合NVIDIA Cosmos 3和Metahuman,可构建完整的DMS生理数据合成管道。

对IMS的核心启示:rPPG模型训练的最大瓶颈——标注数据稀缺——可以通过Heartian解决。建议IMS研发团队:

  1. 采集10-20个带PPG同步的驾驶员视频
  2. 用Heartian重建3D高斯Avatar
  3. 生成10000+合成训练数据
  4. 训练TS-CAN/PhysNet rPPG模型
  5. 部署到车载DMS,实现非接触心率监测