外观
数据、损失与长序列训练:让混合布料模型真正学会 Rollout
约 5286 字大约 18 分钟
2026-08-28
混合布料模型最容易被低估的部分不是网络,也不是 XPBD,而是训练闭环。模型在单帧验证集上只有很小的位置误差,反复运行后仍可能不断伸长、积累能量或穿进碰撞体;相反,一个不紧贴参考轨迹的模型,也可能产生结构稳定、视觉可信的运动。数据怎样切分、损失怎样组合、训练输入怎样逐步接近部署状态,决定了最终学到的是动力学还是“下一帧插值器”。
本文把资料中的事实和工程经验分成三类:论文结论只陈述原作者实际实现或验证过的内容,工程推导给出面向 GNN × XPBD 管线的设计建议,本地观察则来自匿名小规模实验,不代表普遍结论。
两条训练路线
路线一:由模拟器生成监督序列
监督路线先用可信求解器生成轨迹,再学习
fθ(St)→a^t或fθ(St)→Δx^t,
其中 St 至少包含当前位置、速度、静止形状、拓扑、边界条件、碰撞体和材料参数。目标可以是下一帧位置,也可以由连续帧差分得到速度或加速度。后者更接近动力学含义,但二阶差分会放大模拟输出中的采样噪声。固定时间步时要把步长和单位写进数据规范;非均匀采样则必须使用对应的差分公式,不能继续套等间隔二阶差分。
论文结论:MeshGraphNets 用不同物理模拟器生成各实验域的训练序列,动力学模型只接受下一步监督。其二阶布料域通过边特征编码当前网格的相对世界几何,并由一帧历史形成节点速度估计;解码器输出节点加速度,再按论文中 Δt=1 的离散约定积分两次得到下一帧位置。这个“加速度”是数据归一化与离散更新下的目标,迁移到有物理单位的求解器时不能省略真实 Δt。作者同时提供了官方数据读取、训练、评估与 rollout 示例。
监督数据昂贵,但它提供了明确的时序目标,适合学习空气阻力、复杂材料响应或已有高质量求解器中的经验效果。它的风险是“把老师的偏差也学进去”:接触抖动、阻尼过大或粗网格伪影都会成为正确答案。
路线二:直接优化可微物理目标
自监督路线不预先保存参考布料轨迹。网络先预测布料状态,再用惯性、弹性能、重力和碰撞等可微目标评价它。以隐式积分的优化视角看,下一状态可写成
xt∗=argxmin2Δt21(x−xtproj)TM(x−xtproj)+Φ(x),
其中 xtproj=2xt−1−xt−2 是等时间步下按上一速度外推的位置,Φ 汇总内部势能、重力势能和碰撞惩罚等项;若时间步变化,惯性预测和 1/Δt2 权重必须一起改写。网络不是在每帧运行数值优化器直到收敛,而是在许多动作样本上学习直接给出使该目标较低的状态。
论文结论:SNUG 将惯性项和静态势能用于动态服装的自监督训练,不需要预计算真值网格;论文还报告,直接顶点监督更容易产生平滑结果,而物理损失保留了更细的褶皱。其模型仍是一件服装训练一个回归器,不能由此推导出任意服装泛化。
论文结论:Neural Cloth Simulation 同样把面内形变、弯曲、碰撞、惯性和重力写成物理损失;其主要贡献还包括按结构拆分静态/动态服装子空间,并研究时间窗口、姿态镜像和运动增强。该工作训练 garment/outfit-specific 模型,其公开实现也按身体模型与服装配置训练;不能把它描述成一个网络处理任意服装拓扑。
论文结论:HOOD 把无监督物理目标与层次图、多层消息传递结合,并把局部材料参数作为条件,展示了对未见服装、身体形状和材料设置的泛化。论文中的动态拓扑示例是通过启停图边表示纽扣/拉链连接,并不等价于已经解决任意重网格或撕裂后的状态迁移。
自监督不是“无数据训练”。它仍需要动作、身体形状、服装网格、材料范围和碰撞几何;只是省掉了每个样本对应的真值布料状态。势能定义若不完整,网络也可能找到能量很低却视觉错误的捷径。例如只有拉伸项时,翻面、自交、身体穿透或不自然的动态耗散未必会被惩罚。
工程推导:混合路线通常更稳妥。先用监督目标学会合理的局部加速度,再逐步提高物理损失和 rollout 比例;或者以自监督为主,只用少量高质量轨迹校准相位、阻尼和接触。两种路线不是阵营选择,而是监督信号的预算分配。
数据表示:共享拓扑与变拓扑
共享拓扑
若一批序列使用相同顶点与三角形连接,只需保存一次静态块:静止位置、三角形、mesh edge、弯曲边、质量、材料与固定点。每帧块只保存位置、速度、运动学目标、外力和碰撞体状态。训练窗口通过 topology_id + frame range 复用静态块,既减少空间,也避免每帧重新生成边时出现顺序漂移。
监督目标应尽量从同一精度的原始位置统一派生。不要一部分速度来自求解器,一部分由量化后位置差分;否则模型会把数据管线差异当成动力学。每个序列还应带有时间步、单位、坐标系、材料版本和生成器版本,防止后来把不兼容样本混在一起。
变拓扑与变分辨率
变拓扑数据不能只保存不同长度的顶点数组。每个拓扑阶段至少需要独立的 edge_index、面片、约束集合、节点类型和批处理偏移;若发生重网格,还要记录旧状态到新顶点的插值映射,才能得到连续速度和历史特征。若只是纽扣或缝线启停,可以保持候选边全集并保存逐帧 active mask。
批处理中可把多个图拼成一个不相连的大图,用偏移后的索引和 graph_id 聚合;损失必须先按图或有效元素归一化,再在 batch 间平均,否则高分辨率服装会仅凭顶点多而支配梯度。
工程推导:拓扑变化事件的前后几帧应单独打标签。随机窗口若总避开事件,模型只学到多种静态拓扑;若窗口跨越事件却没有状态迁移,它学到的只是数据跳变。
不要让一个损失代表整块布
监督误差与物理目标可以同时使用,但不能把不同量纲的原始数字直接相加。若 Lx 是位置 MSE,它的单位是 m2;速度 MSE 是 m2/s2,加速度 MSE 是 m2/s4;惯性、拉伸和弯曲若按完整物理模型计算则是能量,单位为 J。严格来说,要么让权重携带抵消这些单位的量纲,要么先使用训练集固定的参考长度 lref、参考时间 tref 和参考能量 Eref 无量纲化。例如:
Lx=(∑imi)lref2∑imi∥x^i−xi∥2,Lv=(∑imi)(lref/tref)2∑imi∥v^i−vi∥2.
Er=ErefEr,L=q∑wqLq+r∑ηrEr+Laux.
这里 q 表示监督误差,r 表示惯性、拉伸、弯曲、重力或碰撞等物理项。若 Er 已经包含 stretch/bend/collision,就不要再把同一项以另一个名字重复加入总损失。归一化后,权重才主要表达任务偏好,而不是替单位换算兜底。各项回答的是不同问题:
- 位置损失 Lx 衡量轨迹接近程度,适合用 L1、Huber 或按质量加权的误差。固定点应单独统计,避免大量容易预测的边界点掩盖自由区域。
- 速度与加速度损失约束运动趋势。位置很接近但速度方向错误的帧,会在下一步迅速分离;加速度则对噪声最敏感,不宜未经平滑直接赋高权重。
- 拉伸损失可用无量纲边应变 (∥e∥−l0)/l0,也可用三角形形变梯度进入具体本构能。前者便于诊断,后者才有明确材料模型;两者不能仅因都叫 stretch 就直接比较。报告均值之外还要看高分位数和最大值,因为少量过伸长通常正是爆炸起点。
- 弯曲损失常比较相邻三角形当前与静止二面角,但仅平方角差不是分辨率无关的弯曲能;物理模型通常还需要弯曲刚度以及与边长、相邻面积有关的离散权重。它也不是“越低视觉越好”:趋近零角差可能只是模型过硬。Neural Cloth Simulation 的评估讨论同样提醒,在这种无监督动力学问题中,更低的单项物理指标不必然等于更好的动态结果。
- 碰撞损失可由 max(0,dsafe−d)2 构成,其中有符号距离 d 和安全厚度 dsafe 都是长度;若不除以 lref2,该项仍带 m2。仅看穿透顶点比例会漏掉少量深穿透,因此还要记录最大深度、连续持续帧数和自碰撞失败。
- 物理训练目标与能量诊断不是同一件事。 SNUG 一类方法最小化“惯性项 + 当前状态势能”的隐式时间步目标,并不是要求总机械能越来越小。rollout 中的能量诊断才检查动能、弹性能、外力功和耗散的预算;无阻尼封闭场景可观察漂移,有阻尼、接触或运动学角色时不能要求总能量恒定。
对于 GNN → XPBD 管线,还要分别计算投影前和投影后的指标。如果只监督投影后位置,网络可能故意输出很差的状态,把所有工作推给 XPBD;如果只监督投影前,网络又可能学不到投影器实际改变了什么。可同时约束最终状态和投影修正量,例如定义无量纲的
Lproj=Nflref21i∈free∑∥xi,post−xi,pre∥2.
Nf 是自由顶点数,运动学目标不应混进该统计。若 XPBD 不可微,可以停止梯度,把它当作 rollout 环境;此时投影后的损失不能穿过 XPBD 更新网络,只能作为评估或用于设计投影前的代理目标。若使用可微投影,则必须验证反向传播与运行时迭代次数、约束顺序及接触分支一致。
归一化和噪声注入
位置、速度、加速度、材料刚度与碰撞距离跨越不同量纲。统计量只能从训练集计算,并按节点特征、mesh edge、world edge 和目标分别维护。材料刚度常跨多个数量级,先取对数或转成无量纲量通常比直接标准化更稳定。一个更可解释的办法是用参考长度 l0 和时间步 Δt 形成
v~=vΔt/l0,a~=aΔt2/l0.
不要按每条序列单独标准化:这会抹掉不同速度、尺度和材料之间本来需要学习的差异,也可能把验证序列的信息带进输入。
论文结论:MeshGraphNets 只做下一步监督,却在最近状态的动力学变量上加入零均值高斯噪声,并按积分关系修正目标,使模型学会从 rollout 偏差附近恢复。论文针对二阶布料明确讨论了:扰动当前位置后,不可能选择一个加速度目标同时精确修复下一步位置与速度,因此用超参数在两种修正之间插值;当历史长度大于一时,论文采用随机游走式噪声。
工程推导:噪声要模拟部署时真实会出现的错误。位置扰动后必须重算速度、world edge 和碰撞特征;多帧噪声应具有时间相关性。完全独立的白噪声只会训练去噪器,未必能覆盖缓慢漂移、约束积累和相位误差。
从 Teacher Forcing 走向长序列
Teacher forcing 每一步都给真实历史,训练稳定、显存便宜,却让模型从未见过自己的错误。纯 rollout 则从预测状态继续预测,最贴近部署,但训练早期很容易爆炸,且反向传播成本随窗口长度增长。
论文边界:MeshGraphNets 的已发表方案是“单步监督 + 训练噪声”,不是 scheduled sampling,也不是多步 rollout loss;HOOD 的材料描述和补充材料包含自回归训练。下面的课程安排是面向本文混合架构的工程综合,不应归因于其中任一论文。
工程推导:可先用单步或短窗口建立基本动力学,再随机把部分真实历史替换成模型输出,也就是 scheduled sampling,最后用逐渐增长的 K 步 rollout 微调,并对较远步使用事先确定的权重。它只是待验证的课程,不保证优于“单步 + 噪声”或纯 rollout。长序列可截断反向传播,但隐藏状态和接触缓存的重置规则必须与部署一致;标准 XPBD 的乘子在每个子步开始时清零,只有显式启用跨步 warm start 时才存在需要跨窗口保留或截断的 λ。
对混合模型,训练中的每一步都应走完整推理链:GNN 预测 → XPBD 子步与迭代 → 生成下一状态 → 重建空间邻接。若训练时跳过 XPBD、部署时才加上,网络看到的状态分布和梯度目标都会变化。若 XPBD 停梯度,这条完整链仍能用于构造下一步输入,但校正后损失不会自动反传到 GNN。scheduled sampling 还必须记录概率日程、采样粒度(逐步或整窗)和随机种子,才能复现实验。
划分数据:先隔离,再切窗口
随机打散帧几乎一定会泄漏。相邻帧共享姿态、速度和褶皱,同一长序列切出的两个窗口放在训练和验证两边,只是在考记忆。
正确顺序是先为原始序列建立稳定的 group_id,按组分配 train/validation/test,再生成窗口。group_id 至少要把同源动作及其增强版本绑定在一起;具体隔离轴取决于模型声称具备什么泛化能力:
- 动作隔离:按动作片段或来源序列分组;同一动作的裁剪、镜像、变速版本必须跟随原组。
- 身体隔离:若声称跨角色或体型泛化,应按身体身份/形状分组,不能让同一身体的不同动作跨集合。
- 服装隔离:对 HOOD 一类通用模型,保留完全未见的服装形状;对 SNUG/NCS 一类 garment-specific 模型,这一项不适用,应明确只评估未见动作或身体,不能把它包装成服装泛化。
- 拓扑隔离:按连接结构或拓扑族分组;仅换顶点坐标不算新拓扑,仅换细分也应单列为分辨率测试。
- 条件隔离:材料、时间步、碰撞体和外力既要有分布内组合,也要有刻意留出的组合外测试。
最终应形成矩阵,而不是单个验证分数:已见服装/未见动作、未见服装/已见动作、未见拓扑/未见动作,以及变分辨率和长时外推。只有这样才能分清模型是在记动作、记版型,还是学到了可迁移的局部动力学。归一化统计、噪声幅度、课程日程、损失权重、门禁阈值和 checkpoint 都只能用训练集与验证集决定;测试集应在方案冻结后使用一次。看过测试结果再调参,就必须承认它已经变成验证集并建立新的独立测试集。
Checkpoint 不是“最低单帧误差”的同义词
每次保存 checkpoint 时,至少在固定的验证回放集上计算:单步位置和速度误差、短/长 rollout、拉伸高分位、弯曲分布、穿透率与最大深度、能量预算残差、翻面/非有限值数量,以及端到端耗时和峰值内存。指标定义、单位、rollout 长度、初始状态与门禁阈值应在比较模型前冻结。先用稳定性与碰撞作为硬门槛,再在合格模型中比较轨迹和性能,比训练结束后临时调整一个加权总分更可靠。
本地观察:一项匿名小规模网格实验训练百余轮后达到约毫秒量级推理。复核时出现两个问题:CUDA 非确定性让同一 checkpoint 的长序列结果存在轻微差异;结构误差更好的 checkpoint,轨迹误差不一定更好,反之亦然。在该实验中,只按验证集单帧 MSE 会选到不符合长序列目标的模型。这个观察来自单一规模与设备,只用于说明验收风险,不能外推为通用性能结论。
这类冲突不应通过临时改权重掩盖。更稳妥的做法是先在验证集上按轨迹、结构、碰撞形成 Pareto 候选,再使用固定初始状态与预先规定的重复次数做长序列回放,报告均值、分位数、最坏值和失败帧;同时记录随机种子、归一化统计、数据版本、代码版本、优化器与调度器状态。若 CUDA 算子无法做到完全确定,应把结果分布纳入验收,而不是把一次幸运 rollout 当作结论。确定唯一 checkpoint 后再运行一次锁定测试集,不继续据此调权重。
工程推导:最终选择可以采用词典序门禁:先淘汰爆炸、严重穿透和不满足性能预算的模型;再比较结构稳定性;最后才在剩余模型中选择轨迹更接近者。对于交互式布料,“不会坏”通常比某一帧更像参考更重要。
小结
监督路线用昂贵轨迹换取明确目标,自监督路线用可微物理换取更低的数据生成成本;二者可以共同训练,而不必互斥。共享拓扑适合静态块加逐帧状态,变拓扑必须显式记录连接变化和状态迁移。位置、速度、加速度、拉伸、弯曲、碰撞和能量分别约束不同失败模式,不能由单一 MSE 代替。
最重要的是让训练过程逐步接近真正的部署闭环:按序列隔离数据,用相关噪声覆盖状态偏移,从 teacher forcing 过渡到经过 XPBD 的 rollout,并用多指标长序列回放选择 checkpoint。下一篇将继续深入混合求解器最硬的边界——约束和碰撞。
参考资料
- Pfaff et al., Learning Mesh-Based Simulation with Graph Networks, ICLR 2021.
- Google DeepMind, MeshGraphNets 官方研究代码.
- Santesteban et al., SNUG: Self-Supervised Neural Dynamic Garments, CVPR 2022.
- Bertiche et al., Neural Cloth Simulation, ACM Transactions on Graphics 2022.
- Grigorev et al., HOOD: Hierarchical Graphs for Generalized Modelling of Clothing Dynamics, CVPR 2023.
