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”假设:

  1. 二色反射模型(dichromatic reflection):漫反射分量携带脉搏、按皮肤法线与相机轴的夹角余弦缩放——这是按解剖位置定义的量,不是按像素;
  2. 跨皮肤区域脉搏同相:同一心跳应同时出现在额头和脸颊——前提是”额头””脸颊”在帧间被稳定地识别为同一块解剖区域;
  3. POS/CHROM 色度投影:经典方法把窗口化 RGB 轨迹投影到色度基——论文原话,这个投影”只在固定皮肤 ROI 上适定(well-posed)”,ROI 一旦随头动在解剖上游移就破功。

修法:四点单应 + 一个 Lambertian 权重 + 两个训练期辅助损失

整个方法的参数增量是零——骨干 FactorizePhys 的 52K 参数原封不动。数据流如下:

四个组件的要点逐个拆:

  • 规范化(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 团队的启示

  1. 先审计姿态分布,再谈模型。舱内自采数据按 yaw 分桶(15°/30°/45° 三条线)跑一遍现有 rPPG 模型的 MAE,这个分桶脚本官方仓库现成(evaluate_pose_stratified.py)。如果你们的模型在大偏航桶劣化也在 1.5× 以上,这篇论文的修法是目前公开方案里代价最低的——零参数、<10% 墙钟、骨干不动,意味着车规在研模型可以直接前置验证而不动已有验收链。
  2. 旋转增强省下的预算别再投了。论文的定性(坐标-解剖错位是结构性的,不是分布覆盖问题)给”转头场景上增强”这条常见路径一个明确的负面证据——至少在 rPPG 上,先修坐标再谈分布。
  3. 辅助损失的叠加要按训练集性格分层。全配方在运动多样的 MMPD 训练→PURE 方向上从 1.15 恶化到 5.76,这是比”涨点”更重要的部署教训:warp 是无条件安全层,Lamb/一致性/蒸馏是紧凑训练集上的加层。舱内自采数据通常恰好是”紧凑 + 分布窄”的一端,辅助项大概率安全;但任何把 MMPD 式运动多样性混进训练集的尝试,都要重新跑消融。
  4. 60° 偏航之外不要指望它。2D 单应的适用域是 |yaw|<45° 主导(>95% 帧可达),>60° 直接回退基线。舱内如果需要覆盖回头看后排儿童的姿态段,这条管线不解决——那是 3D mesh warp 或雷达/热通道的事,与本篇正交。
  5. 把”修复引入新洞”当验收方法论。仅规范化修好大偏航(1.60×→1.33×)却弄坏中度桶(1.36×→1.55×)。任何舱内感知模块的改动,分桶报告应该成为标配——单一聚合 MAE 会把这种结构性反噬完全藏掉。这与站内 VITAL 文的”换编码器/换解码头归因探针”是同一类审计思维:改动后报分桶账,不许只报总分。
  6. 代码已放出且 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 如果推理成本降下来,平面单应的”够用”边界会被重新检验。

参考

  1. 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
  2. CanonicalPhys 官方代码仓库(MIT,含 checkpoints 与 pose-stratified 评估脚本). https://github.com/infraface/CanonicalPhys
  3. 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
  4. Tang, Chen, Wang, Shi, Patel, McDuff, Liu. MMPD: Multi-Domain Mobile Video Physiology Dataset. arXiv:2302.03840. https://arxiv.org/abs/2302.03840
  5. 站内:Template Collapse 信息论极限(2026-10-31)、StreamPPG 逐帧流式(2026-10-31)、接触式教师伪标签边界(2026-10-31)、PhysAgent 多智能体仲裁(2026-11-02)、VITAL 数值对齐(2026-11-04)——见正文内链。