当前位置: 首页 > backend >正文

UnderPressure 论文简单解读

论文:UnderPressure: Deep Learning for Foot Contact Detection, Ground Reaction Force Estimation and Footskate Cleanup

整体概述

研究背景

在角色动画与动作捕捉中,脚滑(footskating)是最影响真实感的伪影之一。传统方法通常依赖于 启发式规则(阈值法) 来检测脚是否接触地面,但这些方法存在三大问题:

需要提前知道地面高度;

阈值要手动调节,不同动作和人物差异很大;

检测精度和鲁棒性差,常常需要人工修正。

因此,论文目标是提出一种 自动、鲁棒、物理合理 的方法来解决脚接触检测和脚滑清理问题。

方法概述

论文分为两部分工作:

1.足底力估计与接触检测

通过训练深度神经网络,从动作骨架中直接预测脚底的垂直地面反作用力(vGRFs),并据此推导出可靠的接触标签。

提出并公开了一个新的数据库 UNDERPRESSURE,包含动作捕捉与压力鞋垫同步数据,是这一任务的重要支撑。

2.脚滑清理(footskate cleanup)

在获得精确接触标签后,提出了一个基于 逆运动学优化 的方法去修正脚滑。

创新点在于:优化中不仅加入接触约束,还要求修正后的动作与网络预测的 vGRFs 保持一致,从而增强物理合理性。

数据与模型

1.UNDERPRESSURE 数据集

10 个受试者,5.6 小时动作,涵盖走、跑、跳、上下楼梯、跨障碍等多种场景。

同时记录 动作捕捉骨架 和 足底压力分布。

压力数据经过处理可得到 足跟和脚趾的接触标签,作为训练真值。

2.深度网络设计

输入:每帧 23 个关节位置序列。

输出:每帧两只脚各 16 个压力值(vGRFs)。

网络结构:4 层一维时序卷积 + 3 层全连接,参数约 110 万。

损失函数:均方对数误差 (MSLE),保证大力和小力的相对误差都能被重视。

数据增强:包括平移、旋转、镜像、缩放,以及骨架形态扰动,提高泛化能力。

实验一:足接触检测

通过把预测的 vGRFs 转换为接触标签,评估检测精度。

与传统阈值法和一些学习基线对比,结果表明:

本方法的平均 F1 值 ≈ 0.947,明显优于阈值法(≈0.909)。

在不同动作类型(走、跑、跳、楼梯等)中表现稳定。

在噪声和动作失真情况下依然鲁棒。

结论:深度网络比启发式方法更可靠,尤其适合复杂动作和低质量输入。

实验二:脚滑清理

在检测到接触帧后,构建一个 逆运动学优化框架 去修正脚滑。

优化目标由四部分组成:

保持关节四元数合法;

在接触帧约束脚底不动;

保持全局轨迹速度合理;

保持修正后动作与预测 vGRFs 一致(创新点)。

在混合动作生成的脚滑测试中,优化后

脚在接触期的水平速度降低约一半;

视觉效果显著更自然;

保持了物理一致性。

创新点总结

提出并公开了 UNDERPRESSURE 数据集:首个规模化的“动作捕捉 + 压力鞋垫”数据集。

从骨架预测 vGRFs:相比直接预测接触标签,预测力分布更符合物理规律,也更鲁棒。

高精度的接触检测方法:在各种动作和噪声条件下均优于传统方法。

vGRFs 约束的脚滑优化:首次在 IK 脚滑清理中引入力学一致性,提升了动作的物理合理性和视觉质量。

论文意义

这篇工作不仅提出了一个新的方法去解决脚接触和脚滑问题,还展示了 “物理信号(力)” 对动画和动作处理的重要性。它证明:

学习到的物理量可以替代启发式标签,提升检测精度和鲁棒性。

物理量还能指导后续任务(如脚滑清理),为未来的动作重建、仿真和生成提供更可靠的约束。

数学表达

约定与符号

  • Xt∈RJ×3X_t\in\mathbb{R}^{J\times3}XtRJ×3:时刻 ttt 的关节位置(论文用 J=23J=23J=23)。
  • 整段动作:X∈RT×J×3X\in\mathbb{R}^{T\times J\times 3}XRT×J×3
  • 网络输出:F^=Ψθ(X)∈RT×2×16\hat{F}=\Psi_\theta(X)\in\mathbb{R}^{T\times 2\times 16}F^=Ψθ(X)RT×2×16,每帧每只脚 16 个压力单元(相对于体重归一化,非负)。
  • FK 表示正向运动学:FK(Q,S,P)\mathrm{FK}(Q,S,P)FK(Q,S,P)(从关节角 QQQ、骨架 SSS、全局轨迹 PPP 得到关节位置)。

1 接触函数 Γ\GammaΓ(从 vGRF 得到二值接触)

论文的处理流程可以写成(形式化):

  1. 先对每个压力单元的 vGRF 做高斯平滑:
    f~t,c=(G∗f)t,c\tilde f_{t,c} = (G * f)_{t,c}f~t,c=(Gf)t,c(卷积表示)。
  2. 将单元分组为heeltoe 两组(集合记为 HHHTTT),计算每组合力:
    Sheel(t)=∑c∈Hf~t,c,Stoe(t)=∑c∈Tf~t,cS_{\text{heel}}(t)=\sum_{c\in H}\tilde f_{t,c},\quad S_{\text{toe}}(t)=\sum_{c\in T}\tilde f_{t,c}Sheel(t)=cHf~t,c,Stoe(t)=cTf~t,c.
  3. Sheel(t),Stoe(t)S_{\text{heel}}(t),S_{\text{toe}}(t)Sheel(t),Stoe(t)重缩放使其之和等于总 vGRF(以忽略噪声单元,论文描述了这一步)。
  4. 原始二值标签(raw)由阈值判定:若某组 > ⁣0.05⋅BW>\!0.05\cdot\text{BW}>0.05BW(体重的 5%)则标为接触;同时若该只脚的总 vGRF < 0.1·BW 则丢弃(避免噪声);接触阶段短于 0.1s 也丢弃。

这整套二值化/后处理就是论文所说的接触函数 Γ\GammaΓ

2 网络(vGRF 估计)与训练损失

  • 输出维度与激活:最后一层用 softplus 输出非负的 16 个单元/脚(总共 32 个)。 架构细节:4 层 1D conv(kernel=7,filters = 128,128,256,256),后接 3 层 FC(256 each),ELU 激活;dropout 前 FC,参数约 1.1M。

  • 训练损失(MSLE)(论文式子,等号右侧为等价形式):

LMSLE=1N∑i=1N(ln⁡(Fi+1)−ln⁡(F^i+1))2=1N∑i=1Nln⁡2 ⁣(Fi+1F^i+1), \mathcal{L}_{\text{MSLE}} =\frac{1}{N}\sum_{i=1}^N\big(\ln(F_i+1)-\ln(\hat F_i+1)\big)^2 =\frac{1}{N}\sum_{i=1}^N \ln^2\!\Big(\frac{F_i+1}{\hat F_i+1}\Big), LMSLE=N1i=1N(ln(Fi+1)ln(F^i+1))2=N1i=1Nln2(F^i+1Fi+1),

其中 FiF_iFi 是真实 vGRF 分量,F^i\hat F_iF^i 是网络预测。加 1 保证对数定义(vGRF 可为 0)。

  • 训练细节(实验设置):Adam, batch=64, lr=3e-5, 约 2500 epochs(论文中给出)。

3 footskate cleanup 的优化目标(完整损失)

论文把 IK 优化写成四项加权和(Equation (2)):

L=ωqLquat+ωfLfoot+ωtLtraj+ωvLvGRFs. \mathcal{L}=\omega_q L_{\text{quat}}+\omega_f L_{\text{foot}}+\omega_t L_{\text{traj}}+\omega_v L_{\text{vGRFs}}. L=ωqLquat+ωfLfoot+ωtLtraj+ωvLvGRFs.

该式即为优化目标,ω\omegaω 为权重超参(论文给出实验中用的数值,见下)。

下面把每项写清:

(a) 四元数正则(保持单位四元数)

Lquat=∑t∑j(∥Qj(t)∥−1)2, L_{\text{quat}}=\sum_t\sum_j\big(\|Q_j(t)\|-1\big)^2, Lquat=tj(Qj(t)1)2,

其中 Qj(t)Q_j(t)Qj(t) 是关节 jjj 在时刻 ttt 的四元数(强制单位范数)。

(b) 脚接触项(把“接触关节”固定到接触位置)
论文引入contact joints(在 T-pose 下垂直位于脚下的虚拟关节),对每个接触期 ccc(从 t0(c)t_0(c)t0(c)t1(c)t_1(c)t1(c))定义接触位置 pcp_cpc,并最小化 contact-joint 与该 pcp_cpc 之间的平方距离(带窗函数 Π(t)\Pi(t)Π(t) 做平滑):

Lfoot=∑c=1C∑t=t0(c)t1(c)Π(t) ∥FK(Q,S,P)jc(t)−pc∥2. L_{\text{foot}}=\sum_{c=1}^C\sum_{t=t_0(c)}^{t_1(c)} \Pi(t)\,\big\| \mathrm{FK}(Q,S,P)_{j_c(t)} - p_c\big\|^2. Lfoot=c=1Ct=t0(c)t1(c)Π(t)FK(Q,S,P)jc(t)pc2.

说明:jc(t)j_c(t)jc(t) 表示该接触期对应的 contact joint(通过 FK 得到其世界坐标);Π(t)\Pi(t)Π(t) 是矩形波但有平滑边缘以避免突变。

(c )全局轨迹(速度一致性)
论文避免直接约束位置以防引入不自然加减速,转而约束根轨迹速度的变化:

Ltraj=∑t(∥V(t)∥−∥V~(t)∥)2,V(t)=P(t+ΔT)−P(t)ΔT, L_{\text{traj}}=\sum_t\big(\|V(t)\|-\|\tilde V(t)\|\big)^2,\quad V(t)=\frac{P(t+\Delta T)-P(t)}{\Delta T}, Ltraj=t(V(t)V~(t))2,V(t)=ΔTP(t+ΔT)P(t),

其中 V~(t)\tilde V(t)V~(t) 是输入(待修正前)轨迹速度。

(d) vGRFs 不变性约束(关键创新项)
把网络 Ψθ\Psi_\thetaΨθ 嵌入到优化中,要求优化后动作的 vGRF 与原始由网络对输入动作估计的 F~\tilde FF~ 保持一致:

LvGRFs=MSLE(F, F~),F=Ψθ(FK(Q,S,P)),F~=Ψθ(FK(Q~,S,P~)). L_{\text{vGRFs}}=\mathrm{MSLE}\big(F,\ \tilde F\big), \quad F=\Psi_\theta\big(\mathrm{FK}(Q,S,P)\big), \quad \tilde F=\Psi_\theta\big(\mathrm{FK}(\tilde Q,S,\tilde P)\big). LvGRFs=MSLE(F, F~),F=Ψθ(FK(Q,S,P)),F~=Ψθ(FK(Q~,S,P~)).

也就是用 MSLE 来衡量 Ψθ\Psi_\thetaΨθ 在修正后动作和原始估计之间的 vGRF 差异,允许梯度通过 Ψθ\Psi_\thetaΨθ 回传到 Q,PQ,PQ,P

4 实验中用的超参与实现细节

  • 优化迭代次数 N=100N=100N=100

  • 权重(论文实验值):ωq=10−3, ωf=10−5, ωt=102, ωv=5⋅10−5.\omega_q=10^{-3},\ \omega_f=10^{-5},\ \omega_t=10^{2},\ \omega_v=5\cdot10^{-5}.ωq=103, ωf=105, ωt=102, ωv=5105. 这些在论文里用于生成表征性结果(脚在接触期速度约减半)。

  • 优化流程简述(实现顺序):

    1. 以原始 Q~,P~Q̃,P̃Q~,P~ 初始化 Q,PQ,PQ,P
    2. 计算 F~=Ψθ(FK(Q~,S,P~))\tilde F=\Psi_\theta(FK(Q̃,S,P̃))F~=Ψθ(FK(Q~,S,P~))C=Γ(F~)C=\Gamma(\tilde F)C=Γ(F~)
    3. 用梯度下降(可用 Adam/SGD)最小化 L\mathcal{L}L,每步通过 FK 与 Ψθ\Psi_\thetaΨθ 计算 FFF 以获得 LvGRFsL_{\text{vGRFs}}LvGRFs 的梯度并回传到 Q,PQ,PQ,P

5 细节注释(容易糊掉但很关键)

  • Π(t)\Pi(t)Π(t) 要“平滑”接触边缘,避免接触起止瞬间产生不连续位置约束。
  • pcp_cpc(接触位置)一般来源于输入序列在该 contact phase 的足底位置估计(论文把它当作该相位的 contact positions);你实现时通常用接触期中足底位置的时间加权平均或首帧位置作为 pcp_cpc。论文用符号 pcp_cpc 但并未把这个估计细化到一个唯一公式(他们在文中以“contact position during contact phase”描述)。
  • Ψθ\Psi_\thetaΨθ 也用作优化中的“可微模块”是关键:这允许优化在满足几何约束的同时,保留与力学一致性的触觉信息(论文强调这一点)。
http://www.xdnf.cn/news/19421.html

相关文章:

  • 【Linux篇章】再续传输层协议UDP :从低可靠到极速传输的协议重生之路,揭秘无连接通信的二次进化密码!
  • 基于STM32的ESP8266连接华为云(MQTT协议)
  • 基于Flask的企业级产品信息管理系统技术实现笔记
  • 从 “能用” 到 “好用”:生成式 AI 落地三大核心痛点与破局路径
  • GPT-5 正式发布:把一个“博士团队”装进手机,AI 新时代开启
  • DevOps篇之通过GitLab CI 流水线实现k8s集群中helm应用发布
  • mysql深度分页
  • C语言:结构体
  • 暄桐:唯有认真思考过死亡,才足以应对日常
  • Android开发-设计规范
  • 【LLM】强化学习训练框架(slime、verl框架)
  • 【代码随想录day 21】 力扣 216.组合总和III
  • CD73.【C++ Dev】map和set练习题1(有效的括号、复杂链表的复制)
  • Docker中Mysql容器忽略大小写
  • C语言————深入理解指针1(通俗易懂)
  • Linux-搭建NFS服务器
  • 【PyTorch】基于YOLO的多目标检测(一)
  • 【CNB.COOL】智能花卉分类系统 – 部署指北
  • 由题构造 嵌入汇编(汇编)
  • python调用豆包大模型给人脸生成卡通图像
  • 八大排序--快速排序
  • 福彩双色球第2025100期数据统计
  • hardhat 3 测试框架选择
  • linux系统学习(14.日志管理)
  • 华秋DFM检查PCB设计缺陷、一键导出Gerber、BOM、坐标文件
  • 第八章 光照
  • Qt QNetworkAccessManager 简述及例程
  • C++11——万能模板及完美转发
  • GMTapSDK 扩展使用文档
  • 【开题答辩全过程】以 基于springboot的垃圾分类管理系统为例,包含答辩的问题和答案