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信号。
三大突破:
生理信号嵌入3D头像 :心率0.29 bpm误差,MAPE 0.38%
渲染后信号可恢复 :TS-CAN从渲染头像恢复心率,0.97 bpm误差
重建质量无损 :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 torchimport torch.nn as nnimport numpy as npclass HeartianModel (nn.Module): """ Heartian: 生理感知的可重照高斯头部Avatar 核心组件: 1. Relightable Gaussian Head Avatar(基础头像) 2. 心脏周期相关面色调制模块 3. 接触式PPG监督训练 用于DMS数据合成:生成带真实心率信号的合成面部视频 """ def __init__ (self, num_gaussians=50000 ): super ().__init__() 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 )) 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 = 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) 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 )) self .residual_mlp = nn.Sequential( nn.Linear(3 , 32 ), nn.ReLU(), nn.Linear(32 , 3 ), 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 ) modulation = waveform * spatial_residual * 0.02 return modulation if __name__ == "__main__" : model = HeartianModel(num_gaussians=10000 ) fps = 30 duration_sec = 10 t = np.linspace(0 , duration_sec, fps * duration_sec) ppg = np.sin(2 * np.pi * 1.0 * t) 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健康监测应用
graph TD
A[真实驾驶员视频<br/>10个视频] --> B[3D高斯Avatar重建]
B --> C[Heartian心率嵌入]
C --> D[合成数据集<br/>10000+视频]
D --> E[rPPG模型训练<br/>TS-CAN/PhysNet]
E --> F[部署到车载DMS<br/>非接触心率监测]
G[可控参数] --> C
G --> H[心率: 40-180bpm]
G --> I[疲劳: HRV降低]
G --> J[压力: 心率升高]
G --> K[醉酒: HRV异常]
style C fill:#e1f5fe
style D fill:#e8f5e9
style F fill:#fff3e0
3. 与NVIDIA Cosmos 3协同
工具
角色
产出
Heartian
嵌入生理信号
带心率的3D头部Avatar
Cosmos 3
世界模型生成
座舱环境视频
Metahuman
角色生成
多样化3D人物
组合
完整管道
带生理信号的合成座舱视频
4. Euro NCAP健康监测对接
NCAP要求
Heartian贡献
可行性
驾驶员心率监测
合成训练数据
✅ 可训练rPPG模型
疲劳相关HRV
合成不同HRV模式
✅
压力检测
合成压力心率模式
✅
酒驾心率特征
合成醉酒心率
✅
实时心率精度
TS-CAN 0.97bpm
✅ 满足
5. 关键优势
从10个真实视频生成10000+合成视频 :数据增量1000x
心率精度0.97bpm :满足车载DMS精度需求
光照/姿态/种族可控 :覆盖长尾场景
重建质量无损 :不牺牲视觉质量
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研发团队:
采集10-20个带PPG同步的驾驶员视频
用Heartian重建3D高斯Avatar
生成10000+合成训练数据
训练TS-CAN/PhysNet rPPG模型
部署到车载DMS,实现非接触心率监测