CanonicalPhys 深读:头姿先杀死的是 rPPG 的物理先验——一个零参数四点单应修法与它的舱内适用边界
CanonicalPhys 深读:头姿先杀死的是 rPPG 的物理先验——一个零参数四点单应修法与它的舱内适用边界
站内 rPPG 线已经写了 11 篇,覆盖了信息论极限(10-31 Template Collapse 文)、逐帧流式部署(10-31 StreamPPG 文)、伪标签边界(10-31 接触式教师文)、VLM 数值出口(11-04 VITAL 文)和多智能体仲裁(11-02 PhysAgent 文),但有一个舱内最日常的退化源始终没有专文:驾驶员转头。2026-07-17 挂出的 CanonicalPhys(arXiv 2607.15995,comments 字段标注 Accepted by IJCB 2026,奥卢大学 CMVS + ELLIS Institute Finland + 浙江大学)正面回答了这个问题:在 MMPD 上,FactorizePhys 骨干从正脸(|yaw|<15°)到大偏航(|yaw|≥45°)的 MAE 劣化是 1.60 倍,而它在骨干前加一个不加任何可训练参数的四点单应变换后,把这个劣化压到 1.33 倍——同时跨数据集 MAE 最高降 32%。
这篇论文对 IMS 团队的价值不在”又一个 SOTA”,而在三件事。第一,它把”头姿退化”从数据增强问题重新定性为坐标-结构性问题——同一个像素坐标在不同头姿下对应不同的解剖位置,这直接决定你在自采数据上做旋转增强为什么收效甚微。第二,它的全部改动都是训练-推理协议层的(单应 warp + Lambertian 权重 + 两个辅助损失),骨干 52K 参数一个不动,墙钟开销 <10%,是舱内 rPPG 模型可以直接前置的模块。第三,它的失败模式表(中等偏航反噬、大偏航自遮挡、运动多样训练集上过正则)恰好是舱内场景最常撞上的三面墙,论文自己承认没有解决。
本文为 A 型(论文深读型)。信源亲读:arXiv 2607.15995 摘要页 + 全文 HTML 三轮(方法章/实验表/Related Work/局限章全覆盖,关键表格数字三轮一致)+ 官方代码仓库 github.com/infraface/CanonicalPhys(MIT,含 3 个 <300KB checkpoints 与 pose-stratified 评估脚本)+ 骨干论文 FactorizePhys 摘要页(arXiv 2411.01542)+ MMPD 数据集论文摘要页(arXiv 2302.03840)。限制必须声明:venue 信息仅见于 arXiv comments 字段,论文 HTML 页内无 IJCB 脚注;MMPD 的被试数/时长等来自其摘要页,分条件统计未亲读全文,文中不做分条件引用;POS/CHROM 经典方法的公式细节以 CanonicalPhys 论文的转述为准,未回读 2017 原文。
背景:rPPG 的”正脸特化”,和站内已有的四条修法对不上它
先给一个统一的地图。舱内 rPPG 的现实约束是:驾驶员的正脸时间只占一部分——看后视镜、看仪表、看侧窗、扭转交谈,都是偏航。而公开基准的”好成绩”几乎全部产自近正脸帧。MMPD(33 名被试、11 小时、手机拍摄、8 个条件标签,专为肤色/运动/光照多样性设计)是少数带系统性姿态变化的库,CanonicalPhys 在它上面按 yaw 分桶量化了这个差距:
| yaw 桶 | FactorizePhys MAE (bpm) | 劣化倍率 |
|---|---|---|
| 正脸( | yaw | <15°) |
| 轻度(15–30°) | 15.76 | 1.32× |
| 中度(30–45°) | 16.21 | 1.36× |
| 大偏航(≥45°) | 19.08 | 1.60× |
(来源:CanonicalPhys Table 1,arXiv 2607.15995;骨干论文 FactorizePhys 的 arXiv comments 字段标注 Accepted at NeurIPS 2024)
站内已写的 rPPG 修法,没有一条是针对这个问题的:
| 站内已有文章 | 修的是什么 | 与头姿的关系 |
|---|---|---|
| Template Collapse(10-31) | 指标定义:cross-subject 相关性是塌缩假象 | 无关 |
| StreamPPG(10-31) | 时延与算力:clip 范式 → 逐帧流式 | 无关 |
| 接触式教师(10-31) | 训练标签:接触传感器同步质量决定伪标签可信度 | 无关 |
| VITAL(11-04) | 表征:VLM 的通用视觉骨干丢失生理线索 | 无关 |
| PhysAgent(11-02) | 推理仲裁:多候选心率的职责分离 | 无关 |
| CanonicalPhys(本文) | 输入坐标:把每帧拉回规范脸坐标系 | 直接修头姿 |
CanonicalPhys 的定性值得原样记住:头姿不是”数据分布没覆盖够”,而是同一个像素坐标 (x,y) 在不同头姿下对应不同解剖位置。这不是采样问题,增强解决不了——增强扩充的是外观分布,但坐标-解剖的错位是结构性的。论文由此推出:被这个错位卡死的是三条经典物理先验,而不是深度模型的拟合能力。
核心机制:三条先验如何在偏航下失效,以及修法本身
被卡死的三条先验
论文的论证链条是三条 rPPG 领域的经典先验,全部隐含”固定解剖 ROI”假设:
- 二色反射模型(dichromatic reflection):漫反射分量携带脉搏、按皮肤法线与相机轴的夹角余弦缩放——这是按解剖位置定义的量,不是按像素;
- 跨皮肤区域脉搏同相:同一心跳应同时出现在额头和脸颊——前提是”额头””脸颊”在帧间被稳定地识别为同一块解剖区域;
- POS/CHROM 色度投影:经典方法把窗口化 RGB 轨迹投影到色度基——论文原话,这个投影”只在固定皮肤 ROI 上适定(well-posed)”,ROI 一旦随头动在解剖上游移就破功。
修法:四点单应 + 一个 Lambertian 权重 + 两个训练期辅助损失
整个方法的参数增量是零——骨干 FactorizePhys 的 52K 参数原封不动。数据流如下:
flowchart LR
V[视频帧 T+1] --> LM["MediaPipe 离线抽取<br/>68 关键点 + 每帧旋转 R_t<br/>(LMDB 缓存,一次性)"]
LM --> H["四点 DLT 闭式解单应 H_t<br/>torch.linalg.lstsq<br/>h33=1, 8 方程"]
V --> W["grid_sample 逆映射采样<br/>→ 规范脸坐标系"]
H --> W
W --> LW["Lambertian 逐像素权重<br/>w = sigmoid(α(n·ẑ)+β)<br/>α=8, β=0.55"]
LW --> TD[时间差分]
TD --> FP["FactorizePhys 骨干<br/>52K 参数,完全不动"]
FP --> BVP[BVP 输出]
W -. 13×13 voxel 特征 .-> CONS["跨 ROI 一致性损失(仅训练)<br/>额头+双颊高斯软掩码"]
W -. 规范额头像素 .-> DIST["POS 蒸馏损失(仅训练)<br/>窗口化经典 POS,stop-gradient"]
四个组件的要点逐个拆:
- 规范化(canonicalization):四个解剖锚点——左右外眼角、左右嘴角——被拉到固定规范位置 LE=(0.30,0.40)、RE=(0.70,0.40)、LM=(0.38,0.72)、RM=(0.62,0.72)。单应矩阵由 8 方程 DLT 线性系统闭式解出(对锚点和帧可微),逆变换经双线性 grid_sample 回采原图;锚点四边形退化(按锚点位置方差检测)或检测失败时回退恒等变换。时间稳定用每 chunk 的中位单应 H̄ 作参考 warp 抵消关键点抖动,自适应变体在关键点运动超阈时退回逐帧 warp。
- 为什么 2D 四点就够:2D 单应严格只对平面内旋转精确;论文用 MediaPipe 诊断,MMPD 超过 95% 的帧 |yaw|<45°,这个区间内刚体平面内分量主导。这是个诚实的适用域声明,也直接划定了舱内场景的边界(见失败模式节)。
- Lambertian 权重:规范化后,每个像素按最近规范关键点分配固定 3D 法线(预计算 72×72×3 缓冲),运行时用 MediaPipe 每帧旋转矩阵 R_t 转到相机系,z 分量即 cos θ,过 sigmoid(α=8, β=0.55) 得到逐像素物理权重,在时间差分前乘上去。
- 跨 ROI 一致性损失:规范坐标系里放三块高斯软掩码(额头 (0.50,0.20) σ=0.10、左右颊 (0.28,0.58)/(0.72,0.58) σ=0.07),对每块 ROI 的骨干特征做 L2 池化→时间差分→零均值标准化,三对 ROI 两两算余弦相似度距离。它把”同相”先验变成损失项,训练后跨 ROI 相干性从 0.19 升到 0.68。
- POS 蒸馏损失:从规范额头像素平均出 RGB 轨迹,跑原版窗口化 POS(窗口 1.6s×FPS=48 帧@30fps,投影矩阵 P=[[0,1,−1],[−2,1,1]]),叠加成伪 BVP 后 stop-gradient,对预测信号取负 Pearson 相关。这一步等于把经典色度方法当作免费教师,只在规范坐标里适定的那种。论文的 sanity check:规范额头上 POS 能以 r≈0.96 恢复合成注入脉冲。
训练配置:负 Pearson 损失 + λ_cons=0.1 + λ_dist=0.2,Adam lr 10⁻³、batch 4、30 epochs、72×72 RetinaFace 裁剪、128 帧片段、rPPG-Toolbox 切分、3 seeds;两个辅助损失推理期全部关闭。
实验与证据:分桶提升是实的,但辅助损失有三条反噬
分桶主表(MMPD,MMPD 训练)
| yaw 桶 | FactorizePhys | 仅规范化 | 规范化+Lamb+一致性 |
|---|---|---|---|
| 正脸 | 11.95 (1.00×) | 11.21 (1.00×) | 11.50 (1.00×) |
| 轻度 | 15.76 (1.32×) | 12.23 (1.09×) | 12.27 (1.07×) |
| 中度 | 16.21 (1.36×) | 17.36 (1.55×) | 15.65 (1.36×) |
| 大偏航 | 19.08 (1.60×) | 14.90 (1.33×) | 16.57 (1.44×) |
(来源:CanonicalPhys Table 1,绝对 MAE 单位 bpm,括号内为相对正脸桶的劣化倍率)
注意中间那列的两面性:仅规范化把大偏航修好了(1.60×→1.33×),却让中度桶反噬(1.36×→1.55×)——单应把脸的近侧过度拉伸,这恰好是 Lambertian 权重补的洞(第三列回到 1.36×)。这个”修复引入新洞、再由下一层补上”的结构,是读这篇论文时最值得带走的工程直觉:各组件不是独立增益,是互相兜底。
跨数据集(UBFC 训练)与完整迁移矩阵
UBFC 训练、四库测试(MAE,3-seed 均值±std):
| 测试库 | FactorizePhys | CanonicalPhys | 变化 |
|---|---|---|---|
| UBFC(域内) | 1.18±0.03 | 0.96±0.06 | −18.6% |
| PURE | 2.97±1.02 | 2.01±0.41 | −32.3%,seed std 减半以上 |
| OBF(近红外) | 0.69±0.03 | 0.65±0.02 | −5.8% |
| MMPD | 13.69±0.21 | 10.91±0.81 | −20.3%(r 0.18→0.33) |
(“变化”列由前两列 MAE 换算;−32.3% 与论文摘要自述的”最高降 32%”一致)
(来源:CanonicalPhys Table 2)
完整的 4×4 迁移矩阵 CanonicalPhys 赢 13/16 格;FactorizePhys 赢的 3 格是 PURE→UBFC、PURE→PURE(均为近正脸域,seed 噪声内)和 MMPD→PURE。同一个 MMPD 列上,经典方法 CHROM 13.61、POS 13.53、PhysNet 11.52、EfficientPhys 19.09,CanonicalPhys 10.91——在这个最难迁移的目标域上,它同时压过经典色度法和深度基线。
消融(UBFC 训练、MMPD 测试):仅 warp 11.67 → +Lamb 11.45 → +一致性 11.17 → +蒸馏 12.09 → 全配方 10.95。仅 warp 一项就关闭了到全配方差距的约四分之三;蒸馏在 MMPD 上单独加是负贡献(+12.09),它只在 MMPD→PURE 那类运动多样的方向上和全配方一起翻车(见下)。
论文自己承认的五条失败边界
| # | 场景 | 表现 | 论文的解释/出路 |
|---|---|---|---|
| 1 | 中度偏航、无 Lambertian | 劣化 1.55×(反而差于基线 1.36×) | 单应过度拉伸近侧脸;Lamb 权重修复 |
| 2 | 大偏航、有一致性损失 | 1.44×(差于仅规范化的 1.33×) | 远颊自遮挡,单相同相先验强行对齐缺失区域;作者提出可见性门控双颊为 future work |
| 3 | 极端偏航(>60°) | 锚点四边形检测不出,回退恒等,等同基线 | 明确不声明适用;3D mesh warp 是自然延伸 |
| 4 | 关键点回退 / pitch-roll | 论文列为失败域但未给数字 | 2D 单应只对平面内旋转精确 |
| 5 | 运动多样训练集上全配方 | MMPD→PURE 从 1.15(仅 warp)恶化到 5.76±0.91 | 辅助损失过正则;规范化是”无条件可靠的增益”,辅助项只在紧凑训练集上安全叠加 |
另外两条实验性边界:源和目标都近正脸时增益消失(PURE 训练行在 seed 噪声内);OBF 是近红外,本就落在色度先验适用域之外,增益最小(−5.8%)也顺理成章。
与已有方案的关系
论文在 Related Work 里的定位很清晰,三条路线对照:
| 路线 | 代表 | 处理姿态的方式 | 论文的批评/对照 |
|---|---|---|---|
| 深度骨干自学 | PhysNet/DeepPhys/TS-CAN/EfficientPhys/PhysFormer/FactorizePhys | 无外部几何信号,”留给骨干自己发现姿态不变特征” | 坐标-解剖错位没人管 |
| 特征空间对齐 | FreqPhys、HOT | 在学习特征空间做分布对齐 | 与本文正交:本文在输入端注入域不变先验(人脸几何) |
| 3D 几何规范化 | Cantrill et al.(UV 纹理图展开) | 拟合 3D mesh,每帧展开到 UV 图,丢弃斜面片 | 最近亲;更表达力强但需每帧 3D mesh 拟合;本文四点平面单应零参数、零拟合步,”在平面内主导的姿态域已够用” |
| (对比项)数据增强 | — | 扩充外观分布 | 论文明确拒绝这个框架:错位是结构性的 |
代价侧论文只给了一句:墙钟开销 <10%(一次 lstsq + 一次 grid_sample + 一次对预计算 buffer 的乘法),关键点由 MediaPipe 离线抽取后 LMDB 缓存——与每个基线本来就要做的 RetinaFace 裁剪同量级。官方仓库(MIT,3 个 <300KB checkpoints,evaluate_pose_stratified.py 直接可跑分桶评估)已放出,复现门槛很低;仓库名义上是官方实现但目前 2 stars/2 commits,社区检验尚未发生。
对 IMS 团队的启示
- 先审计姿态分布,再谈模型。舱内自采数据按 yaw 分桶(15°/30°/45° 三条线)跑一遍现有 rPPG 模型的 MAE,这个分桶脚本官方仓库现成(
evaluate_pose_stratified.py)。如果你们的模型在大偏航桶劣化也在 1.5× 以上,这篇论文的修法是目前公开方案里代价最低的——零参数、<10% 墙钟、骨干不动,意味着车规在研模型可以直接前置验证而不动已有验收链。 - 旋转增强省下的预算别再投了。论文的定性(坐标-解剖错位是结构性的,不是分布覆盖问题)给”转头场景上增强”这条常见路径一个明确的负面证据——至少在 rPPG 上,先修坐标再谈分布。
- 辅助损失的叠加要按训练集性格分层。全配方在运动多样的 MMPD 训练→PURE 方向上从 1.15 恶化到 5.76,这是比”涨点”更重要的部署教训:warp 是无条件安全层,Lamb/一致性/蒸馏是紧凑训练集上的加层。舱内自采数据通常恰好是”紧凑 + 分布窄”的一端,辅助项大概率安全;但任何把 MMPD 式运动多样性混进训练集的尝试,都要重新跑消融。
- 60° 偏航之外不要指望它。2D 单应的适用域是 |yaw|<45° 主导(>95% 帧可达),>60° 直接回退基线。舱内如果需要覆盖回头看后排儿童的姿态段,这条管线不解决——那是 3D mesh warp 或雷达/热通道的事,与本篇正交。
- 把”修复引入新洞”当验收方法论。仅规范化修好大偏航(1.60×→1.33×)却弄坏中度桶(1.36×→1.55×)。任何舱内感知模块的改动,分桶报告应该成为标配——单一聚合 MAE 会把这种结构性反噬完全藏掉。这与站内 VITAL 文的”换编码器/换解码头归因探针”是同一类审计思维:改动后报分桶账,不许只报总分。
- 代码已放出且 MIT,checkpoints 只有三个 <300KB 文件;建议先在 UBFC/PURE 上用官方权重复跑 Table 2 的两个数字(0.96/2.01)验证管线,再决定是否接自采数据。
路线判断
我认为这条”输入端几何规范化”路线会在 2027 年前成为舱内 rPPG 预处理的事实组件,理由有三:它零参数且与骨干正交,不动任何已有验收资产;它把经典色度方法(POS/CHROM)重新变成可用教师,等于把三十年信号处理积累免费接进深度管线;它的失败域(>60°、3D 姿态)与雷达/热传感器的强区几乎不重叠,天然构成融合分工而不是竞争。保留意见有二:论文的全部实验在 72×72 低分辨率裁剪与 rPPG-Toolbox 标准切分上,舱内的宽视野/多视角相机与更严的 subject-disjoint 协议下,分桶数字会缩水多少没有证据;以及 Cantrill 式 3D mesh warp 如果推理成本降下来,平面单应的”够用”边界会被重新检验。
参考
- Wei, Jodeiri Seyedian, Li, Zhao. CanonicalPhys: Canonicalizing Head Pose for Remote Physiological Sensing. arXiv:2607.15995, comments 标注 Accepted by IJCB 2026. https://arxiv.org/abs/2607.15995
- CanonicalPhys 官方代码仓库(MIT,含 checkpoints 与 pose-stratified 评估脚本). https://github.com/infraface/CanonicalPhys
- Joshi, Agaian, Cho. FactorizePhys: Matrix Factorization for Multidimensional Attention in Remote Physiological Sensing. arXiv:2411.01542, comments 标注 Accepted at NeurIPS 2024. https://arxiv.org/abs/2411.01542
- Tang, Chen, Wang, Shi, Patel, McDuff, Liu. MMPD: Multi-Domain Mobile Video Physiology Dataset. arXiv:2302.03840. https://arxiv.org/abs/2302.03840
- 站内:Template Collapse 信息论极限(2026-10-31)、StreamPPG 逐帧流式(2026-10-31)、接触式教师伪标签边界(2026-10-31)、PhysAgent 多智能体仲裁(2026-11-02)、VITAL 数值对齐(2026-11-04)——见正文内链。