HandFlow: Fully Generative 4D Hand Recovery with Flow Matching
Introduction
单目 4D 手部重建的目标是:给定一段普通 RGB 视频,恢复手部在每一帧中的三维形状、关节姿态和空间位置,并让这些结果沿时间形成连贯的运动轨迹。
这里的“4D”表示:
- 3D:每一帧中的三维手部;
- 第四维:时间;
- 最终输出是一段连续变化的 3D 手部序列。
这一任务在 AR/VR、机器人模仿学习、第一人称交互理解和动作捕捉中都有重要作用。然而,单目视频只能提供二维投影,手部又经常出现快速运动、运动模糊、自遮挡、物体遮挡和离开画面的情况,因此同一张图像可能对应多种合理的三维姿态。
现有方法主要有两条路线:
- 单帧回归方法:HaMeR、WiLoR、HandOS 等方法逐帧预测 MANO 参数。单帧清晰时精度较高,但连续应用到视频后容易产生抖动。
- 时序回归方法:Deformer、HaWoR、Dyn-HaMR、HaPTIC 等方法引入相邻帧或整段视频信息,能够提升时间一致性,但通常仍然为每段输入输出一个确定结果。
确定性回归在观测清晰时较为有效。当手部被严重遮挡时,输入中并没有足够的信息确定唯一的三维姿态,模型只能在训练数据中的多种可能结果之间寻找折中,容易产生:
- 手指姿态过度平滑;
- 深度方向预测错误;
- 快速运动被压平;
- 全局轨迹漂移;
- 遮挡帧与前后帧不连续。
HandFlow 将这个问题表述为 MANO 参数空间中的条件生成任务:模型学习视频条件下合理手部运动序列的分布,再从噪声出发生成一条符合视觉观测和运动先验的完整轨迹。
HandFlow 的核心设计可以概括为:
- 使用冻结的 HaMeR 提取视觉特征、二维骨架和检测置信度;
- 使用 Rectified Flow 从高斯噪声生成完整 MANO 参数序列;
- 使用 Flux 风格的双流 Transformer 联合建模条件和手部状态;
- 根据检测置信度连续削弱不可靠观测;
- 在 ODE 积分过程中融合重叠窗口的速度,处理长视频;
- 使用 SLAM 将相机坐标系中的手部转换到世界坐标系。
需要注意,HandFlow 的生成模型主要恢复 相机坐标系中的手部状态和轨迹。世界坐标系结果仍然需要 ViPE-SLAM 提供相机位姿。
Related Work
Single-frame Hand Reconstruction
单帧手部重建通常从一张裁剪后的手部图像中预测 MANO 参数。
代表性方法包括:
- HaMeR:使用 ViT-Huge 和大规模训练数据,具备较强的野外图像泛化能力;
- WiLoR:联合手部检测与三维重建,提高定位和恢复精度;
- HandOS:将检测与重建整合到单阶段框架中。
这些方法在图像清晰时可以获得较好的单帧精度,但每一帧独立处理,缺少显式的时间约束。连续视频中较小的图像变化便可能引起较大的三维姿态变化。
Video-based 4D Hand Reconstruction
视频方法通过聚合时间信息提升稳定性:
- Deformer:利用相邻帧的动态融合帮助当前帧预测;
- HaWoR:将相机坐标系手部估计与 SLAM 相机轨迹结合,恢复第一人称视频中的世界坐标手部运动;
- Dyn-HaMR:结合 SLAM、手部先验和多阶段优化,处理动态相机下的全局手部运动;
- HaPTIC:使用跨视角与全局交叉注意力预测 4D 手部轨迹。
这类方法已经开始关注全局轨迹和时间平滑性,但主干通常仍然是确定性预测或多阶段优化流程。在模糊、遮挡和手部出画时,模型难以表达多种潜在的合理状态。
Generative Hand Reconstruction
生成模型可以利用学习到的运动分布补全缺失信息:
- HandDiff:使用图像和点云条件,通过扩散模型估计单帧 3D 手部姿态;
- MaskHand:在离散化的 VQ-MANO token 上进行掩码生成;
- UniHand:将估计和生成统一为条件运动生成,并通过 VAE 压缩结构化信号;
- FMPose3D:将 Flow Matching 用于单帧人体三维姿态估计。
HandFlow 的区别主要体现在:
- 直接生成一段时序 MANO 参数;
- 不通过 VAE 压缩 MANO 状态;
- 同时生成关节姿态、全局平移和共享手型;
- 使用 Rectified Flow 将推理压缩到少量 ODE 步;
- 对完整时间窗口进行双向注意力建模。
Method
Overview
HandFlow 的完整流程分为三个阶段:
-
Condition Extraction
HaMeR 从每一帧中提取:
- 手部裁剪图像;
- ViT-Huge patch 特征;
- 21 个二维手部关键点;
- 手部检测置信度。
-
Flow-Matching Denoising
模型从标准高斯噪声出发,通过双流 Transformer 预测速度场,并利用 ODE 积分逐步生成 MANO 参数序列。
-
Long-video Inference
长视频被划分为重叠窗口。多个窗口对同一帧预测出的速度在 ODE 积分期间进行融合,从而减少窗口边界处的运动突变。
MANO Sequence Representation
设视频窗口长度为 。HandFlow 中的一段手部状态由三部分组成:
- 手型参数:;
- 每帧姿态:;
- 每帧平移:。
其中:
- 描述手掌宽度、手指长度等个体形状,在整个窗口中共享;
- 包含 3 维全局轴角旋转和 45 维关节轴角旋转;
- 表示手部在相机坐标系中的三维平移。
整个窗口可以写为:
由于姿态、手型和平移的数值范围不同,模型首先按维度进行标准化:
Flow Matching 在标准化空间中进行;几何损失和 MANO 前向运动学则在反标准化后的真实参数空间中计算。
官方推理配置使用:
- 窗口长度:;
- 重叠帧数:2;
- ODE 积分步数:3。
Rectified Flow
基本思想
扩散模型通常通过多步去噪,从高斯噪声逐渐恢复数据。Rectified Flow 将噪声和真实数据之间的路径构造为近似直线,并训练模型预测沿这条路径移动的速度。
设:
- 为随机噪声;
- 为真实 MANO 参数序列;
- 为流动时间。
中间状态为:
当 时, 是纯噪声;当 时, 到达真实手部序列。
这条直线路径的目标速度为:
网络接收 、时间 和视频条件 ,预测速度:
Flow Matching 损失为:
直观上,网络学习回答:
当前 MANO 序列还带有多少噪声,下一步应该朝哪个方向移动,才能形成符合视频观测的合理手部运动?
推理时从随机噪声开始求解:
HandFlow 使用 Euler 方法,只执行 3 个 ODE 步。论文的步数实验显示,1 步会产生明显积分误差,MPJPE 约为 43 mm;2 步后下降到约 27 mm,并进入相对稳定的平台区间。作者选择 3 步,为分布变化保留一定安全余量。
Visual Condition
对于每个手部裁剪区域,冻结的 HaMeR ViT-Huge 输出:
192 对应 个图像 patch,每个 patch 为 1280 维。
直接将所有 patch 输入时序 Transformer 会产生较大的 token 数量。HandFlow 使用一个包含 8 层 Cross-Attention Pooling 的 Frame Compressor,将每一帧的 patch 特征压缩为一个图像 token:
因此,视觉分支为每一帧提供一个包含手部外观、遮挡关系和局部纹理信息的紧凑表示。消融实验显示,移除图像特征后,PA-MPJPE 从 4.75 mm 上升到 8.47 mm,F@5 从 66.63% 降至 13.42%,说明视觉特征是主要的姿态信息来源。
Skeletal Condition
HaMeR 同时预测 21 个二维关键点。
普通二维坐标只表示关键点在图像上的位置,难以直接表达相机投影几何。HandFlow 根据裁剪区域对应的相机内参,将二维关键点反投影为相机归一化三维射线。
对于图像坐标 和内参 ,可以写为:
这条射线表示:三维关键点应当位于从相机中心穿过该像素的空间方向上,具体深度仍然未知。
所有关键点射线经过位置编码和投影后,被压缩为每帧一个骨架 token:
骨架条件主要提供:
- 手部在图像中的位置;
- 手指关节的二维结构;
- 与相机投影相关的方向信息;
- 对全局平移的几何约束。
移除骨架条件后,模型性能下降幅度小于移除视觉特征,但 MPJPE 从 18.73 mm 增加到 22.86 mm,说明骨架 token 更接近一种几何锚点。
Confidence-aware Continuous Masking
动机
HaMeR 在以下情况中会输出较低置信度:
- 手部被物体遮挡;
- 自遮挡严重;
- 快速运动造成模糊;
- 手部只剩一部分位于画面中;
- 手部完全离开画面。
这些帧的视觉特征和二维关键点都可能包含错误信息。如果模型始终强制使用观测条件,错误的二维位置可能进一步破坏三维平移和整段轨迹。
HandFlow 为图像和骨架模态分别学习一个 mask token。设原始条件 token 为 ,HaMeR 置信度为 ,可学习 mask token 为 ,连续掩码可以写为:
当置信度较高时:
模型主要依赖当前帧观测。
当置信度较低时:
当前帧条件逐渐退化为一个“信息缺失”标记,模型更多利用前后帧和学习到的手部运动先验完成预测。
这种连续插值比硬阈值更平滑,置信度从 0.8 降到 0.4 时,条件信息也会逐渐减弱。
训练期间,模型还会随机遮挡约 20% 的帧,迫使网络学习从时间上下文中恢复缺失状态。将随机遮挡率从 0 提升到 0.2 后,单帧 MPJPE 仅增加约 0.36 mm,而加速度误差降低约 33%,W-MPJPE 降低 2.28 mm。关闭推理阶段的置信度加权后,MPJPE 增加约 86%,PA-MPJPE 基本不变,说明连续掩码主要改善全局位置和时间稳定性。
Dual-Stream Transformer
HandFlow 使用受 Flux 启发的双流结构,分别维护:
- z-stream:待生成的 MANO 参数;
- c-stream:从视频中提取的图像和骨架条件。
Tokenization
对于 16 帧窗口,z-stream 包含:
- 1 个共享 shape token;
- 16 个 pose token;
- 16 个 translation token。
总计:
个 MANO token。
c-stream 包含:
- 16 个 image token;
- 16 个 skeleton token。
总计:
个条件 token。
各类参数拥有独立的输入投影层,因为 10 维手型、48 维姿态和 3 维平移具有不同语义和数值结构。
Dual-stream Block
在双流模块中,z-stream 和 c-stream 分别计算 Query、Key、Value:
随后将两条流的 QKV 拼接,执行联合注意力:
因此:
- MANO token 可以读取图像和骨架条件;
- 条件 token 也能根据当前生成状态重新组织信息;
- 不同帧的 pose 和 translation token 可以直接交互;
- 一个被遮挡帧可以从前后帧获得信息。
联合注意力结束后,输出重新拆分为两条流,并分别经过各自的前馈网络。
消融实验中,使用单向 Naive Cross-Attention 后,MPJPE 从 18.73 mm 增加到 22.04 mm,加速度误差从 4.08 增加到 6.12 。这说明条件到状态的单向读取不足以实现稳定融合,双向 token 交互是主要增益来源。
Single-stream Block
经过 8 层双流模块后,z-token 和 c-token 被拼接,再经过 16 层 DiT 风格的单流自注意力模块。
完整配置为:
| 模块 | 配置 |
|---|---|
| Hidden Size | 512 |
| Attention Heads | 16 |
| Dual-stream Blocks | 8 |
| Single-stream Blocks | 16 |
| MLP Ratio | 4 |
| Dropout | 0.1 |
时间步 使用正弦编码,并通过 MLP 生成 Adaptive LayerNorm 的调制参数。RoPE 根据帧编号编码时间位置,同一帧的 pose、translation、image 和 skeleton token 使用相同位置编号,使模型知道它们属于同一时刻。
Training Objectives
仅使用 Flow Matching 损失可以让网络学习数据分布,但三维手部重建还需要满足几何精度和时间连续性。
HandFlow 使用组合损失:
其中:
Shape Loss
约束预测手型与真实手型一致:
Velocity Loss
约束相邻帧 MANO 参数的一阶差分:
它要求预测序列具有正确的移动方向和速度。
Acceleration Loss
约束二阶时间差分:
它用于减少不自然的帧间抖动,同时保留真实快速运动。
2D Reprojection Loss
将预测 MANO 关节投影回裁剪图像,约束其与二维关键点一致:
Absolute 3D Joint Loss
直接约束相机坐标系中的三维关节位置:
这些辅助损失作用于根据当前速度估计得到的一步干净预测,并根据采样时间进行缩放。
Velocity-blended Overlapping Windows
为什么需要重叠窗口
模型一次处理 16 帧。对于更长视频,需要切分为多个窗口。
直接使用无重叠窗口时,每个窗口边缘的帧只能看到单侧上下文:
- 第一个窗口末帧看不到后续运动;
- 第二个窗口首帧看不到更早运动;
- 两段预测容易在边界处产生速度跳变。
一种简单方法是分别生成每个窗口,然后对重叠帧的最终 MANO 参数求平均。问题在于,各窗口从不同噪声状态独立求解 ODE,最终状态可能位于不同生成轨迹上。直接平均终点会产生缺乏物理意义的中间状态。
ODE 内速度融合
HandFlow 在每一个 ODE 步中融合速度。
设全局帧 同时出现在多个窗口中,第 个窗口对该帧预测速度为 。根据该帧到窗口中心的距离分配权重 :
靠近窗口中心的帧拥有更完整的前后文,因此权重更大。
共享状态随后只更新一次:
所有窗口始终从同一个全局帧状态计算速度,因此整段视频沿一条共享 ODE 轨迹演化。
实验中:
- 无重叠窗口的加速度误差为 4.49;
- 后处理平均会在重叠边界产生更高误差;
- 使用 2 帧重叠和速度融合后,加速度误差降至 4.26;
- 更大的 4 帧重叠可降至 4.18,但需要处理更多窗口。
官方配置选择 2 帧重叠,在计算成本和轨迹连续性之间取得平衡。
Experiment
Dataset
DexYCB
DexYCB 包含多视角手部抓取物体数据,HandFlow 使用标准 s0 协议:
- 训练使用 10 名参与者和 8 个相机视角中的训练序列;
- s0 测试序列从训练中排除;
- 主要评估相机坐标系姿态精度和遮挡鲁棒性。
HOT3D
HOT3D 包含第一人称多视角手部与物体交互,具有:
- 动态头戴相机;
- 频繁自遮挡和物体遮挡;
- 快速手部运动;
- 世界坐标轨迹标注。
由于官方验证集的真值尚未公开,作者在官方训练集中自行划分验证集:
- 1,347 个 clip 用于训练;
- 169 个 clip 用于验证;
- 所有重新运行的对比方法使用相同划分。
Metrics
MPJPE
Mean Per-Joint Position Error,直接计算预测关节和真实关节之间的平均三维距离:
它同时受到姿态、旋转和平移误差影响。
PA-MPJPE
先通过 Procrustes Alignment 对齐平移、旋转和尺度,再计算 MPJPE。
该指标主要反映手指关节相对结构是否准确,弱化全局位置误差。
RA-MPJPE
只对齐根节点方向,再计算 MPJPE,对全局位置和深度误差更加敏感。
W-MPJPE
只使用序列前两帧进行对齐,其余帧不再重新对齐,因此后续轨迹漂移会持续累积。
该指标主要衡量世界坐标系轨迹是否准确。
WA-MPJPE
将整段序列视为一个整体点云,执行一次 Procrustes 对齐,再计算误差。
它弱化整体刚体偏移,更关注整段运动的形状和相对轨迹。
Acceleration Error
比较预测关节加速度与真实加速度:
加速度误差较低通常意味着轨迹平滑,但单独降低该指标可能导致真实快速运动被过度平滑,因此需要与世界坐标误差一起分析。
DexYCB Camera-space Results
| Method | RA-MPJPE ↓ | PA-MPJPE ↓ | 75%–100% 遮挡 PA-MPJPE ↓ |
|---|---|---|---|
| Deformer | 13.64 | 5.22 | 6.34 |
| HaWoR | 14.22 | 4.76 | 5.07 |
| UniHand | — | 4.08 | 4.26 |
| HandFlow | 8.12 | 3.88 | 4.85 |
主要结论:
- HandFlow 的 RA-MPJPE 为 8.12 mm,相比第二名 Deformer 的 13.64 mm 降低约 41%;
- 在完整测试集和轻度遮挡中,HandFlow 获得最佳结果;
- 在 50% 以上严重遮挡中,UniHand 的 PA-MPJPE 略低;
- HandFlow 和 UniHand 在 75%–100% 遮挡中均保持在 5 mm 以下,而单帧回归方法的误差上升更明显。
该结果支持生成式运动先验对于遮挡恢复的价值,同时也说明 HandFlow 在极端遮挡下并未全面超过所有生成式基线。
HOT3D World-space Results
HandFlow 在 HOT3D 上的关键结果包括:
| Metric | HandFlow | 代表性对比 |
|---|---|---|
| W-MPJPE ↓ | 43.00 mm | UniHand:63.97 mm |
| WA-MPJPE ↓ | 16.17 mm | UniHand:25.24 mm |
| HaWoR:27.37 mm | ||
| Dyn-HaMR:31.01 mm | ||
| Acceleration ↓ | 4.18 | Dyn-HaMR:4.77 |
| RTE ↓ | 2.32% | 第二名:2.44% |
UniHand 的单帧 PA-MPJPE 为 4.76 mm,低于 HandFlow,但其 W-MPJPE 和 WA-MPJPE 明显更高。
这说明:
单帧手指姿态更准确,并不必然产生更准确的全局轨迹。
世界坐标结果还会受到以下因素共同影响:
- 相机坐标系中的三维平移;
- 连续帧之间的速度一致性;
- 长时间轨迹漂移;
- SLAM 相机位姿误差。
HandFlow 的优势主要集中在全局轨迹和时间连贯性,而非所有单帧对齐指标。
Computational Efficiency
论文在单张 NVIDIA H100 80 GB 上测试 150 帧 HOT3D 序列:
| Method | Reconstruction | SLAM | Total | Peak VRAM |
|---|---|---|---|---|
| Dyn-HaMR | 288.58 s | 16.21 s | 304.79 s | 1.1 GB |
| HaWoR | 38.13 s | 15.78 s | 53.91 s | 6.9 GB |
| HandFlow | 3.19 s | 16.21 s | 19.40 s | 13.1 GB |
HandFlow 的核心重建速度约为:
相比 HaWoR 的核心重建过程快约 12 倍。
不过,47 FPS 只计算 Flow Matching 重建部分。加入 SLAM 后,总耗时为 19.40 秒,其中约 84% 时间用于相机位姿估计。
HandFlow 的显存占用达到 13.1 GB,原因是多个时间窗口被并行送入网络以获得最大吞吐量。降低窗口并行度可以减少显存占用,但会牺牲运行速度。
Ablation Study
Condition Modalities
| Setting | MPJPE ↓ | PA-MPJPE ↓ | Accel ↓ | F@5 ↑ |
|---|---|---|---|---|
| Full | 18.73 | 4.75 | 4.08 | 66.63 |
| Image Only | 22.86 | 4.82 | 4.61 | 65.67 |
| Skeleton Only | 26.66 | 8.47 | 7.08 | 13.42 |
视觉特征承担主要的姿态恢复任务,骨架条件补充全局位置和投影几何信息。
Denoiser Architecture
| Setting | MPJPE ↓ | PA-MPJPE ↓ | Accel ↓ |
|---|---|---|---|
| Full Dual + Single Stream | 18.73 | 4.75 | 4.08 |
| Naive Cross-Attention | 22.04 | 6.03 | 6.12 |
| Only Dual-Stream | 21.12 | 5.09 | 5.54 |
| Only Single-Stream | 19.80 | 4.92 | 4.69 |
Only Single-Stream 已经能够完成较强的双向 token 融合,完整模型进一步提升性能。Naive Cross-Attention 的下降最明显,说明真正关键的是条件 token 与 MANO token 之间充分的联合建模。
Initial Noise Sensitivity
HandFlow 从随机噪声开始生成,因此一个自然问题是:不同随机种子会不会产生明显不同的重建结果?
作者使用 10 个不同随机种子测试:
| Metric | Mean | Range | CV |
|---|---|---|---|
| PA-MPJPE | 4.76 mm | 0.025 mm | 0.16% |
| RA-MPJPE | 10.30 mm | 0.104 mm | 0.31% |
| W-MPJPE | 38.02 mm | 0.779 mm | 0.82% |
| Acceleration | 3.98 | 0.148 | 1.12% |
不同初始噪声最终收敛到非常接近的结果。这里的“生成式”主要体现在使用生成模型和运动分布完成条件恢复,默认配置并不会产生高度多样化的多个候选运动。
Limitations
Occlusion and Out-of-view Are Conflated
cmask 使用 HaMeR 置信度判断当前帧是否可靠,但低置信度可能来自两种完全不同的情况:
- 手部仍在画面中,只是被部分遮挡;
- 手部已经完全离开画面。
第一种情况下,前后帧和运动先验可以帮助补全姿态。第二种情况下,视频中缺少任何当前手部位置证据,模型只能根据先验猜测。
HandFlow 无法显式区分这两种情况,也不会主动标记预测失败。
Dependence on Camera Intrinsics and SLAM
二维骨架射线、三维平移和世界坐标转换都依赖相机内参。
当内参未知时,ViPE 需要同时估计内参和相机轨迹。如果视频中的相机运动较少,几何约束不足,内参估计误差可能显著降低重建质量。
此外,HandFlow 本身没有直接生成世界坐标系中的手部轨迹。其世界坐标结果仍然通过:
计算,其中 来自 ViPE-SLAM。
MANO Representation Bound
模型只在 MANO 参数空间工作,因此最终几何精度受到以下因素限制:
- MANO 手型空间的表达能力;
- 训练数据中 MANO 拟合标注的精度;
- MANO 难以表达的局部皮肤形变;
- 与物体接触时的细粒度表面变形。
HandFlow 没有直接生成高密度表面、接触场或隐式几何。
Dataset Generalization
模型在 DexYCB 和 HOT3D 的训练划分上训练,并在相同数据集的保留序列上测试。
现有实验能够验证:
- 未见序列上的重建;
- 不同遮挡比例下的鲁棒性;
- 相机坐标和世界坐标精度。
现有实验尚未充分验证:
- 完全跨数据集泛化;
- 新相机内参和新成像域;
- 长时间完全出画后的轨迹恢复;
- 双手交互;
- 新型机器人或可穿戴设备视角。
Engineering Constraints
当前官方配置还存在一些工程限制:
- 模型在右手数据上训练,左手视频需要先镜像;
- 最大吞吐配置需要约 13.1 GB 显存;
- H100 上测得的速度不能直接等同于消费级显卡速度;
- 当前 V1 开源仓库只包含推理和可视化代码;
- 训练、数据预处理和评估代码仍列在后续发布计划中。
Conclusion
HandFlow 将单目 4D 手部重建表述为 MANO 参数空间中的条件生成问题。
其主要贡献包括:
-
Rectified Flow Sequence Generation
从高斯噪声直接生成完整 MANO 参数窗口,只需 3 个 ODE 步即可获得稳定结果。
-
Visual-Skeletal Dual Conditioning
密集图像特征提供姿态和外观信息,二维骨架射线提供位置和投影几何约束。
-
Confidence-aware Continuous Masking
根据检测置信度连续调整观测条件的强度,使低质量帧更多依赖时间上下文和运动先验。
-
Flux-style Dual-stream Transformer
在完整时间窗口内联合建模 MANO token 和条件 token,避免逐帧或自回归预测带来的误差累积。
-
Velocity-blended Window Inference
在 ODE 积分阶段融合重叠窗口速度,使长视频沿共享轨迹连续演化。
实验显示,HandFlow 在 DexYCB 上显著降低相机空间姿态误差,在 HOT3D 上进一步提升世界坐标轨迹精度和时间平滑性,并将 150 帧序列的核心重建耗时降低到 3.19 秒。
从方法层面看,HandFlow 最重要的启发是:
4D 手部重建的核心不只在于提高每一帧的姿态精度,还需要学习合理的手部运动分布,并让局部观测、时间先验和全局轨迹在同一个生成过程中共同约束结果。
同时,HandFlow 仍然依赖单帧 HaMeR 前端和外部 SLAM。未来若要构建真正端到端的世界坐标手部生成模型,还需要进一步联合建模:
- 相机运动;
- 手部全局运动;
- 双手关系;
- 手物接触;
- 观测可见性;
- 多假设轨迹及其置信度。