Files
worldmodel/research/multiply/V-JEPA2深度技术剖析.md
T

20 KiB
Raw Blame History

title, date, draft, tags, categories, description
title date draft tags categories description
V-JEPA 2 深度技术剖析:从自监督视频表征到零样本机器人规划 2026-05-24 false
V-JEPA 2
JEPA
Meta
world-model
self-supervised
video
robotics
action-conditioned
MPC
JEPA
论文(arXiv:2506.09985+ 官方代码(facebookresearch/vjepa2)结合的 V-JEPA 2 深度技术剖析:逐模块讲解编码器/预测器架构、四支柱 scaling 策略、动作条件世界模型 V-JEPA 2-AC,以及基于 MPC + CEM 的零样本机器人规划。

本文聚焦 V-JEPA 2Assran, Bardes, Fan, Garrido, LeCun 等,FAIR @ Meta + MilaarXiv:2506.099852025-06),采用"论文 + 代码"双线讲解:先讲清论文里的设计动机与方法,再对照官方仓库 facebookresearch/vjepa2 与 HuggingFace transformers 集成讲实现细节。它是 JEPA 系列综述 中 V-JEPA 2 一节的展开深挖版。


一、一句话定位与三大能力

V-JEPA 2 把一个核心论断推到了规模化的极致:在表示空间(latent space)中做预测,而不是在像素空间里重建,配合互联网级视频数据,可以让一个自监督模型同时具备三种能力——

  1. 理解(Understanding:作为冻结视觉编码器,在运动理解、动作识别上达到 SOTA。
  2. 预测 / 预判(Prediction / Anticipation:预测未来表示,在人类动作预判(Epic-Kitchens-100)上超过专用模型。
  3. 规划(Planning:在少量机器人交互数据上后训练出 V-JEPA 2-ACaction-conditioned),用世界模型做模型预测控制(MPC),在两个全新实验室的 Franka 机械臂上零样本完成抓取与放置。

它与两条主流路线的区别构成了全文的方法论主线:

  • vs 纯交互式学习(RL / 行为克隆):那类方法依赖昂贵的真机交互数据。V-JEPA 2 用互联网视频学习"世界如何演化"——视频里有状态序列但没有显式动作标签,自监督正好能利用这种"无动作"数据。
  • vs 视频生成式世界模型(如扩散类 Cosmos):生成式目标逼迫模型刻画像素级的不可预测细节(纹理、光影)。JEPA 只预测可预测的语义部分(如运动物体的轨迹),主动忽略不可预测细节,因此表示更紧凑、规划更快。

二、设计哲学:为什么是 latent prediction + 两阶段

JEPA 的基本计算图(沿用自 LeCun 2022 与 I-JEPA / V-JEPA):

上下文块 x_ctx  ──► 编码器 E_θ        ──► z_ctx
目标块   x_tgt  ──► 目标编码器 E_θ̄(EMA) ──► z_tgt   (stop-gradient)
预测器 P_φ(z_ctx, mask_tokens)        ──► ẑ_tgt
损失  L = || ẑ_tgt  z_tgt ||         (仅在被掩码 patch 上计算)

两个关键稳定性设计:

  • 目标编码器用 EMA(指数移动平均)更新,而非反向传播,避免表示坍塌(representation collapse)。
  • stop-gradient 切断目标分支梯度,防止编码器把所有输入映射到常数这种平凡解。

V-JEPA 2 在此之上做的最大结构决策是两阶段解耦

  • 阶段一(动作无关预训练):在 100 万+ 小时互联网视频上学"世界的动态",得到通用视觉表示 + 一个动作无关的预测器。这一步完全不需要动作标签。
  • 阶段二(动作条件后训练,V-JEPA 2-AC)冻结阶段一编码器,只在 <62 小时的无标注机器人视频(Droid)上训练一个新的、动作条件的预测器

这种解耦的好处:把"昂贵但稀缺"的真机数据只用在很小的预测器上,把"廉价且海量"的网络视频用在大编码器上——这正是它能用极少机器人数据做零样本规划的根因。


三、阶段一:动作无关自监督预训练

3.1 数据 —— VideoMix22M (VM22M)

  • 规模:超过 100 万小时互联网视频 + 约 100 万张图像。
  • 视频条数从 V-JEPA(一代)的约 200 万条扩大到 2200 万条
  • 组成:SSv2、Kinetics、HowTo100M、ImageNet,叠加一个经过筛选的 YT-Temporal-1B 子集。
  • 数据扩量是后面所有性能提升的基础"燃料"。

3.2 输入 tokenization 与 3D-RoPE

  • 视频切成 tubelet(时空管元),尺寸 2 × 16 × 16(T × H × W),即每 2 帧 × 16×16 像素打成一个 token。
  • 位置编码采用 3D-RoPE(三维旋转位置编码):把特征维度近似三等分,分别对应时间 / 高 / 宽三个轴,各自施加 1D 旋转。
  • 动机是大模型训练稳定性:论文发现在十亿参数规模下,用 3D-RoPE 取代绝对 sincos 位置编码能显著稳住训练。这是 scaling 到 ViT-g 的关键一招。

3.3 编码器:ViT-g>1B

  • 从 V-JEPA 的 ViT-L(约 300M 扩到 ViT-g>1B
  • ViT-g 的隐藏维度 embed_dim = 1408(这一点在代码里直接可见,见 §4.3)。
  • 编码器承担"把视频/图像编码成语义表示"的全部重活。

3.4 预测器:刻意做小

  • 阶段一的预测器是一个轻量 Transformer:约 12 层、宽度 384、约 22M 参数ViT-S 量级)。
  • 设计意图:预测器只负责"在表示空间里补全被掩码区域",不需要很大;把容量集中给编码器。

3.5 掩码策略

  • Multi-block 时空掩码:混合短程与长程块,整体掩码率逼近 90%
  • 空间尺度 0.15–0.7,时间维掩码率 ≈ 1.0(即被选中的空间区域在整段时间上都被遮)。
  • 损失只在被掩码 patch 的预测上计算——逼模型真正去"想象"看不见的部分,而不是抄可见区域。

3.6 四支柱 Scaling 策略(论文最实用的工程经验)

V-JEPA 2 把"如何把 V-JEPA 放大"拆成四条同时发力的轴:

支柱 一代 V-JEPA V-JEPA 2
数据 ~2M 视频 ~22M 视频(VM22M>1M 小时)
模型 ViT-L 300M ViT-g >1B+3D-RoPE 稳定)
分辨率/时长 固定 渐进式分辨率progressive resolution
训练时长 90k 迭代 252k 迭代warmup-constant-decay

其中渐进式分辨率训练最值得单独说:

  • 训练大部分时间跑在低分辨率、短时长16 帧 @256×256)的 warmup/constant 阶段;
  • 仅在末尾 cooldown 阶段切到高分辨率、长时长64 帧 @384×384)。
  • 相比全程高分辨率,最高约 8.4× 加速,同时几乎不损失(甚至提升)性能。

综合这四支柱,冻结编码器在 6 个运动/外观分类任务(SSv2、Diving-48、Jester、Kinetics、COIN、ImageNet)上取得 88.2% 平均准确率


四、代码剖析:官方仓库 + HuggingFace 集成

官方仓库:facebookresearch/vjepa2"PyTorch code and models for VJEPA2 self-supervised learning from video")。本节路径/类名均来自官方仓库与 HF transformers 文档;建议在本地 git clone 后对照阅读。

4.1 顶层目录结构

vjepa2/
├── app/                      # 训练 loop(按用途分子目录)
│   ├── vjepa/                # V-JEPA 2 预训练
│   ├── vjepa_2_1/            # V-JEPA 2.1 预训练(后续版本)
│   ├── vjepa_droid/          # 动作条件模型(V-JEPA 2-AC)训练,train.py
│   ├── main.py               # 本地启动入口
│   └── main_distributed.py   # SLURM 集群启动入口
├── configs/                  # 全部实验超参(YAML)
│   ├── train/                # 预训练 phase1 + cooldown phase2 + 动作条件
│   ├── train_2_1/            # V-JEPA 2.1
│   └── eval/  (含 inference/) # 冻结评测 / 仅推理
├── evals/                    # 基于冻结骨干的 attentive probe 评测
│   ├── video_classification_frozen/
│   ├── image_classification_frozen/
│   ├── action_anticipation_frozen/   # 动作预判 eval.py
│   ├── main.py / main_distributed.py
├── src/                      # 核心包
│   ├── datasets/             # 数据集与 data loader
│   └── models/               # 模型定义(编码器 + probe
└── notebooks/
    └── vjepa2_demo.ipynb     # 最小可跑 demo

设计上职责清晰:app/ 放训练循环、evals/ 放探针评测、src/ 放核心模型、configs/ 放所有超参。

4.2 编码器入口:src/models/vision_transformer.py

demo 里加载 ViT-g 编码器的关键调用:

from src.models.vision_transformer import vit_giant_xformers_rope
# 函数名直接揭示三件事:
#   giant     -> ViT-g(十亿级)
#   xformers  -> 用 xFormers 做高效注意力
#   rope      -> 使用(3DRoPE 位置编码

4.3 注意力探针:src/models/attentive_pooler.py

冻结评测不是简单的线性探针,而是一个 4 层注意力探针(attentive probe

from src.models.attentive_pooler import AttentiveClassifier

# 以 Something-Something v2 为例(174 类)
classifier = AttentiveClassifier(
    embed_dim=1408,   # 对应 ViT-g 的隐藏维度
    num_heads=16,
    depth=4,          # 4 个 transformer block
    num_classes=174,
).cuda().eval()
# 权重从 checkpoint 的 ["classifiers"][0] 取

探针结构要点:4 个 transformer block最后一个 block 用 cross-attention + 一个可学习 query token 取代标准 self-attention,把整段视频 token 聚合成分类特征。推理时从一段视频里采多个 clip,logits 跨 clip 取平均。

4.4 训练与评测的运行方式

# 本地预训练(ViT-L 配置示例)
python -m app.main \
  --fname configs/train/vitl16/pretrain-256px-16f.yaml --devices cuda:0

# SLURM 分布式
python -m app.main_distributed \
  --fname configs/train/vitl16/pretrain-256px-16f.yaml \
  --time 6000 --account my_account --qos my_qos
  • 预训练 phase1 与 cooldown phase2 用同一条命令、不同 configcooldown / 动作条件的 config 与初始训练放在同一目录)。
  • 动作条件模型走 app/vjepa_droid/train.py,用 teacher-forcing + 自回归 rollout 双目标。
  • 评测:在冻结骨干上训 attentive probe;官方放出了 SSv2、Diving48 和 EK-100 三个任务的探针 checkpointwget .../vjepa2/evals/ssv2-vitg-384-64x2x3.pt),可直接跑 configs/inference/ 做推理。

4.5 HuggingFace transformers 集成(最易上手的路径)

transformers 已原生支持 V-JEPA 2VJEPA2Model / VJEPA2ForVideoClassification / VJEPA2Config)。

(a) 抽取视频特征:

from transformers import AutoVideoProcessor, AutoModel

hf_repo = "facebook/vjepa2-vitl-fpc64-256"     # fpc64 = 64 帧/clip
model = AutoModel.from_pretrained(hf_repo)
processor = AutoVideoProcessor.from_pretrained(hf_repo)

# 采 64 帧(要与模型的 fpc 对齐),过 processor,再前向
video = processor(frames, return_tensors="pt")
with torch.no_grad():
    embeds = model.get_vision_features(**video)

完整前向 outputs = model(**video) 会同时给出:

  • outputs.last_hidden_state —— 编码器输出(等价 get_vision_features());
  • outputs.predictor_output.last_hidden_state —— 预测器输出。

(b) 视频分类(SSv2 微调版):

from transformers import AutoVideoProcessor, AutoModelForVideoClassification

hf_repo = "facebook/vjepa2-vitl-fpc16-256-ssv2"
model = AutoModelForVideoClassification.from_pretrained(hf_repo).to("cuda").eval()
processor = AutoVideoProcessor.from_pretrained(hf_repo)
# 输入 pixel_values_videos: [B, T, C, H, W];分类头 = attentive pooler 上接一个线性层

关键超参 NUM_FRAMES:必须匹配 checkpoint——fpc64 用 64 帧,fpc16 用 16 帧。单图嵌入则把一帧 repeat 成 16/64 帧再喂进去。

可用预训练权重(编码器):facebook/vjepa2-vitl-fpc64-256-vith-fpc64-256-vitg-fpc64-256-vitg-fpc64-384;分类微调版:-vitl-fpc16-256-ssv2-vitg-fpc64-384-ssv2


五、理解与预测能力:评测数字

5.1 冻结探针(运动 / 外观理解)

  • 6 任务平均 88.2%SSv2 / Diving-48 / Jester / Kinetics / COIN / ImageNet)。
  • Something-Something v277.3 top-1(运动理解的硬骨头,强调时序因果而非静态外观)。
  • 协议:冻结编码器,只训 4 层 attentive probe(§4.3)。

5.2 动作预判(Anticipation

  • Epic-Kitchens-10039.7 recall@5,超过此前专用模型。这是"预测人接下来要做什么动作"的 SOTA。

5.3 视频问答(对齐 LLM 后)

把 V-JEPA 2 编码器作为视觉编码器对齐到一个 LLM(8B 规模),在多项 VideoQA 上 SOTA

  • PerceptionTest84.0
  • TempCompass76.9
  • 一个值得注意的发现:即便 V-JEPA 2 预训练时没有任何语言监督,对齐后的 VideoQA 表现依然很强——说明纯视频自监督学到的表示对语言对齐是友好的。

六、阶段二:V-JEPA 2-AC 动作条件世界模型

6.1 架构与"块因果"注意力

  • 一个 约 300M 参数 的 Transformer 预测器 P_φ24 层、16 头、隐藏 1024、GELU
  • 训练时冻结阶段一的 ViT-g 编码器,只学这个新预测器。
  • 核心机制 block-causal attention(块因果注意力):在某个时间步上,每个 patch 特征可以注意到——同一时间步的动作、末端执行器状态(end-effector state)、其他 patch,以及所有更早时间步的对应内容;但不能看未来。由此自回归地预测"下一帧的表示"。
  • 位置编码:视频 patch 用 3D-RoPE,动作与位姿用时间维 RoPE,再叠加块因果掩码刻画时间上的因果依赖。

6.2 训练数据与目标

  • 数据:Droid 数据集的无标注机器人视频,< 62 小时 / 约 23k 条轨迹(含成功与失败,来自遥操作的 Franka Emika Panda)。
  • 目标:teacher-forcing 损失(预测下一帧表示)+ rollout 损失(多步自回归预测)联合优化。后者是让模型在"想象多步未来"时不漂移的关键。

6.3 规划:MPC + 交叉熵法(CEM)

V-JEPA 2-AC 不学固定策略,而是把预测器当世界模型,在**模型预测控制(MPC)**回路里在线优化动作:

给定当前观测 x_k 与目标图像 x_g:
  1. 编码:x_k, x_g ──► 表示空间
  2. 对候选动作序列 a_{k:k+T},用预测器想象未来状态 ẑ
  3. 能量函数  E = || ẑ_future  z_goal ||_1   latent 空间 L1 距离)
  4. 用交叉熵法(CEM)采样-评估-更新,找使 E 最小的动作序列
  5. 只执行第一个动作,然后重新规划(receding horizon,滚动时域)

实现细节:

  • 能量 = 想象未来表示与目标表示在 latent 空间的 L1 距离goal-conditioned energy function)。论文报告该能量地形平滑且局部凸,因此 CEM 能高效收敛。
  • 动作被约束在 L1 球、半径 0.075 内(约对应末端执行器单步位移 ≤ 13 cm),因为大动作对模型而言偏离分布。
  • 多阶段任务(pick-and-place)用多子目标:先对"抓住"子目标优化 4 步 → 切到"举起"子目标 10 步 → 最后"放置"子目标 4 步。

6.4 机器人实验结果(零样本、跨实验室)

部署条件极具挑战:同一套权重与推理代码,部署到两个不同实验室Droid 里没出现过的 Franka + RobotiQ 夹爪,仅靠一个未标定的低分辨率单目 RGB 相机无奖励、无任务特定数据

任务 V-JEPA 2-AC 对比基线
Reach(到达目标位姿,无物体) 100% Cosmos: 80%
Grasp(抓杯/盒) 65%(杯)/ 25%(盒),均值 65% Octo: 15%Cosmos: 030%
Reach w/ Object(持物到位) 75%(杯)/ 75%(盒)
Pick-and-Place(取放,多阶段) 80%(杯)/ 65%(盒)
单步规划耗时 ~16 秒/动作 Cosmos: ~4 分钟/动作
  • 单目标到达可把位置误差稳定压到 4 cm 以内
  • 两个对比基线都被"降维打击":Octo(行为克隆 VLA,且在 100 万+ 轨迹的 Open-X 上预训练、又在整个 Droid 上微调,数据量远超 V-JEPA 2-AC)物体交互均值仅 ~15%Cosmos(扩散式视频生成世界模型,用同样的能量规划框架)reach 还行(80%)但物体交互很弱,且单步规划要 4 分钟——一次完整取放要超过 1 小时机器人执行时间。
  • 核心结论:把"学观测"与"学动作条件"解耦,让大编码器吃海量被动视频、小预测器吃少量真机数据,就能换来零样本可迁移的规划能力。

七、局限与后续方向

论文与社区讨论中提到的主要局限:

  • 目标图像依赖:规划需要"目标图像"来定义能量,长程或语言指定的目标还不够自然(后续 TC-JEPA 这类文本条件方向正是补这一块)。
  • 相机/视角敏感:对相机位置较敏感,长时域规划仍可能漂移。
  • 空间任务为主:当前机器人评测集中在桌面抓取/取放等准静态任务。

后续演进(仅作指路,细节以各自原始来源为准):

  • V-JEPA 2.1:官方仓库已含 app/vjepa_2_1/configs/train_2_1/,社区报道其主打"解锁稠密特征(dense features",是 V-JEPA 2 的升级版。
  • JEPA 世界模型规划研究facebookresearch/jepa-wms"What drives success in physical planning with JEPA World Models?")。
  • 物理推理新基准Meta 随 V-JEPA 2 发布了 IntPhys 2 / MVPBench / CausalVQA 等物理常识评测,用于衡量世界模型的"直觉物理"。

上述 2026 年的后续工作请以各自论文/仓库的一手来源核实再引用,本文不对其细节数字背书。


八、与本项目(world model / 具身智能)的对接

结合 JEPA 系列综述 中已记录的关联,V-JEPA 2 对你正在做的方向有几处直接可借鉴:

  1. 两阶段解耦的工程范式:大编码器吃海量被动数据、小预测器吃少量交互数据——这套"廉价感知 + 稀缺动作"的配比,对任何"先建感知再加控制"的具身系统都成立。
  2. latent 能量规划(MPC + CEM:用"想象未来表示与目标表示的 L1 距离"作能量、滚动时域优化动作,是一个不需要奖励、不需要策略网络的轻量规划骨架,适合作为 imagination-based planning 的基线实现。
  3. 渐进式分辨率训练:若你也要 scaling 视频/多感官编码器,这条 8.4× 提速的 recipe 很值钱。
  4. 冻结骨干 + 注意力探针:作为下游任务(分类/检索/对齐 LLM)的标准评测协议,便于公平比较表征质量。

提示:要做"语言指定目标"的规划,V-JEPA 2 原生的"目标图像"接口需要替换为文本条件能量——这正是文本条件 JEPA 路线要解决的缺口。


九、参考与资源

论文 / 官方

  • V-JEPA 2 论文:arXiv:2506.09985"Self-Supervised Video Models Enable Understanding, Prediction and Planning"FAIR @ Meta + Mila
  • Meta 官方介绍:ai.meta.com/research/vjepa/ 与 ai.meta.com/blog/v-jepa-2-world-model-benchmarks/
  • 官方代码:github.com/facebookresearch/vjepa2demo: notebooks/vjepa2_demo.ipynb
  • HuggingFace 文档:huggingface.co/docs/transformers/en/model_doc/vjepa2
  • 权重:huggingface.co/facebookvjepa2-vit{l,h,g}-fpc64-* 及 ssv2 微调版)

关键数字速查

  • 编码器 ViT-g >1B(隐藏维 1408);预训练预测器 ~22M12 层/384);AC 预测器 ~300M24 层/16 头/1024
  • tubelet 2×16×163D-RoPE;掩码率 ~90%;训练 90k→252k 迭代;渐进分辨率 8.4× 提速
  • 数据:VM22M22M 视频,>1M 小时)+ 1M 图像;AC 数据 Droid <62h / ~23k 轨迹
  • SSv2 77.3EK-100 39.7 R@56 任务均值 88.2%PerceptionTest 84.0TempCompass 76.9
  • 机器人:Reach 100% / Grasp 65% / Pick-place 80%(杯)16 s/动作 vs Cosmos 4 min/动作