- 标题:
EgoScale: Scaling Dexterous Manipulation with Diverse Egocentric Human Data - arXiv:https://arxiv.org/abs/2602.16710
- 项目页:https://research.nvidia.com/labs/gear/egoscale/
论文整体采用三阶段训练,但数据处理链路从原始人类第一视角视频和对齐的人机数据采集就开始了。下面按阶段整理每一步的输入、处理和输出。
- 输入:
- 大规模 in-the-wild 第一视角
RGB视频,采样频率为30 FPS - 额外
829小时的EgoDex数据,提供更精确的手腕和手部跟踪
- 大规模 in-the-wild 第一视角
- 处理:
- 汇总多个大规模人类活动数据集
- 保留其中可用的任务标签或语言标签
- 输出:
- Stage I 预训练语料,总计
20,854小时 - 覆盖
9,869个场景、6,015个任务、43,237个物体
- Stage I 预训练语料,总计
- 输入:
- 人类桌面操作演示
- 同任务的机器人遥操作演示
- 统一采集配置:头部相机、双腕部相机、
Vivetracker、Manusglove
- 处理:
- 让人和机器人使用匹配的视角与相机内参
- 将运动信号与视频流同步
- 输出:
- 一个显式 embodiment-aligned 的数据集,包含
344个桌面任务 - 每个任务约
30条人类轨迹、5条机器人轨迹 - 共约
50小时人类数据和4小时机器人数据
- 一个显式 embodiment-aligned 的数据集,包含
设计文档:docs/stage1_motion_recovery_design.md
- 输入:
- 第一视角
RGB视频序列
- 第一视角
- 处理:
- 使用现成的
SLAM恢复相机运动 - 使用手部姿态估计恢复人手轨迹
- 使用现成的
- 输出:
- 相机位姿轨迹
- 人手关键点或手部位姿轨迹
- 输入:
- 相机坐标系下的手部位姿
SLAM提供的相机到世界坐标变换
- 处理:
- 将手腕位姿转换到世界坐标系
- 计算相邻帧之间的手腕相对变换
- 用相对运动去除对绝对相机位姿的依赖
- 输出:
- 可在人类与机器人之间共享的 wrist-level relative end-effector 动作序列
- 输入:
- 人手关键点或手部姿态轨迹
- 处理:
- 将人手动作 retarget 到
22-DoF Sharpa灵巧手关节空间 - 施加关节限位与运动学约束
- 通过优化求解并做时间平滑,降低抖动
- 将人手动作 retarget 到
- 输出:
22-DoF手部关节动作序列
- 输入:
- 视频帧
- 手腕相对动作
- 重定向后的手部关节动作
- 语言指令或任务标签
- 处理:
- 将感知与动作统一打包为 Vision-Language-Action 训练格式
- 输出:
- 用于大规模预训练的 action-labeled egocentric human video
- 输入:
- 阶段 2 生成的人类动作标注数据
- 图像观测与语言指令
- 处理:
- 用人类数据训练完整的 VLA 模型
- 由于人类数据没有机器人 proprioception,模型用可学习占位 token 替代
- 输出:
- 具有广泛操作先验的人类预训练策略或表示
- 输入:
- 阶段 0.2 的人机对齐 play data
- 共享的手腕动作表示
- 处理:
- 冻结 vision-language backbone
- 更新 vision encoder 和 DiT action expert,使表示对齐到机器人感知与控制空间
- 将人类预训练得到的表示落到可执行的机器人动作空间
- 输出:
- 既保留大规模人类先验、又适配机器人感知控制接口的策略
- 输入:
- 下游任务的机器人演示数据
- 处理:
- 在对齐后的策略上做任务级微调
- 输出:
- 最终可部署和评测的灵巧操作策略
原始第一视角人类视频 -> SLAM / 手部姿态恢复 -> 手腕相对运动 + 手部动作重定向 -> 人类动作标注预训练数据 -> 人机对齐中间训练数据 -> 任务级机器人微调 -> 最终机器人策略
- 论文主文明确写了使用现成的
SLAM和手部姿态估计流程,但没有给出具体实现名称。 - 附录中的手部重定向细节提到
URDF约束、CasADi、IPOPT、上一帧 warm start,以及指数平滑。
仓库现在已经补上了阶段 1 的代码骨架,目录在 src/egoscale/stage1。
ingest:视频合法性检查、ffprobe元数据读取、clip_id和输入指纹生成decode:ffmpeg解码器camera_tracking:相机轨迹后端接口和基于OpenCV的单目视觉里程计实现hand_tracking:手部姿态后端接口和基于OpenCV的轮廓/肤色检测实现normalize:对齐到统一frame_id时间轴并补缺失占位qc:基础质量指标和accept/review/reject判定exporter:导出metadata.json、camera_poses.jsonl、hand_poses.jsonl、qc.jsonpipeline/cli:单视频和批处理入口
当前真正可直接运行的是视频探测与解码层:
- 元数据读取默认走
ffprobe - 帧导出默认走
ffmpeg - 相机轨迹默认走
opencv后端,基于ORB特征匹配、Essential Matrix和recoverPose - 手部姿态默认走
opencv后端,基于肤色分割、轮廓提取和关键点拟合
先安装本地包:
python3 -m pip install -e .单视频运行:
egoscale-stage1 single path/to/clip.mp4 --artifacts-root artifacts/stage1批处理运行:
egoscale-stage1 batch path/to/manifest.jsonl --artifacts-root artifacts/stage1相机轨迹可视化:
egoscale-stage1 plot-camera artifacts/stage1/<clip_id>/camera_poses.jsonl默认会输出到:
artifacts/stage1/<clip_id>/plots/camera_trajectory.png
artifacts/stage1/<clip_id>/plots/camera_trajectory.txt
manifest.jsonl 每行一个样本,最小格式如下:
{"video_path": "data/demo.mp4", "clip_id": "demo_clip"}如果视频有已知内参,建议在 manifest 中附带 camera_intrinsics,相机轨迹恢复会优先使用它;否则后端会按图像尺寸构造一个近似 pinhole 模型:
{
"video_path": "data/demo.mp4",
"clip_id": "demo_clip",
"camera_intrinsics": {
"fx": 950.0,
"fy": 950.0,
"cx": 640.0,
"cy": 360.0
}
}