V-JEPA 2: Self-Supervised Video Models Enable Understanding, Prediction and Planning

Paper: arXiv:2506.09985 Code: facebookresearch/vjepa2 Code reference: main @ 204698b4 (2026-03-23)

1. Motivation (研究动机)

这篇论文要解决的不是单一的 video understanding benchmark,而是一个更接近 LeCun/JEPAs 路线的核心问题:模型能不能主要通过“观察”学习世界表征,再用少量无奖励、无任务标签的 interaction data,把这种表征转成可用于 physical planning 的 latent world model。作者把目标拆成三层能力:理解视频、预测未来、用预测做规划;V-JEPA 2 是 action-free video encoder,V-JEPA 2-AC 是在其 frozen representation 上训练的 action-conditioned predictor。

现有路线的瓶颈很具体。第一类 interaction-based world model 需要大量 state-action sequence,很多还依赖 reward 或环境反馈来推断 goal;真实机器人 interaction data 昂贵且覆盖窄,所以很难像互联网视频那样 scale。第二类 action-conditioned video generation world model 可以利用 web video 或 robot video,但规划时要在 pixel/video space 里生成未来,计算成本高,而且论文指出这类工作常把预测画面是否真实、视觉质量是否好当作主要评价,真正的 robot execution planning 结果很有限。第三类纯 video encoder/representation learner 通常能做分类或检索,却没有明确证明:这种 action-free observation pretraining 学到的 latent representation 是否足够支持后续的 action-conditioned control。

V-JEPA 2 的研究动机正是把这三个断点连起来:先用 internet-scale video/image 训练一个不需要 action 的 JEPA video representation,再只用 Droid 中不到 62 小时的 unlabeled robot videos 和 end-effector states/actions,训练一个 latent predictor,使机器人可以在新的 lab、同一套权重、没有 task-specific reward 和 environment-specific data 的情况下,根据 image goals 做 reaching、grasping、pick-and-place。这个问题值得研究,是因为如果成立,world model 的可扩展部分就从稀缺 robot data 转移到了丰富的 observation data;interaction data 只负责把 latent dynamics 接上 action space,而不是从零学习视觉世界。

Figure 1 解读:整篇论文的流水线分成三条输出路径。左侧用 1M hours video 与 1M images 做 V-JEPA 2 pretraining;中间的 encoder 可接 attentive probe 做 action/object classification 和 action anticipation,也可接 LLM 做 Video QA;底部则 freeze encoder,用 62 hours robot data 学 action-conditioned predictor,最后在 MPC loop 中做 robot manipulation。这张图说明论文的核心 claim 不是“一个新 benchmark 上更高”,而是同一个 self-supervised video backbone 同时支持 understanding、prediction、planning。

更具体地说,作者希望证明 JEPA 的 latent prediction 比 pixel-level generation 更适合做 scalable world model。JEPA 不要求精确重建每一片树叶或背景纹理,而是预测 representation space 中稳定、可预测、与行为相关的因素,例如物体运动轨迹、手臂末端与物体关系、场景中可被 action 改变的状态。对 robot planning 来说,很多 pixel detail 是 nuisance;如果 latent representation 保留了“当前状态到 goal 状态的可达差异”,那么优化 latent L1 distance 就可能比优化视频生成结果更便宜、更直接。

2. Idea (核心思想)

核心 insight:先用 action-free video JEPA 从大规模观察数据里学习“世界状态的可预测表征”,再在 frozen latent space 上学习一个小得多的 action-conditioned predictor;规划时不生成 pixel video,而是在 latent space 中搜索使 imagined representation 接近 goal representation 的 action sequence。

这和纯 behavior cloning / VLA 的根本差异是,V-JEPA 2-AC 不直接学习从 observation 到 action 的 policy,也不需要任务成功标签或 reward;它学习的是 action 如何改变 V-JEPA 2 latent state。和 Cosmos 这类 video generation world model 的差异是,V-JEPA 2-AC 的 rollout target 是 encoder feature map,目标函数是 latent L1,不必为每个 planning candidate 生成可观看视频,因此同样用 Cross-Entropy Method 时,论文报告 V-JEPA 2-AC 每步规划约 16 秒,而 Cosmos 在较少 samples 下每步约 4 分钟。

论文的关键创新可以概括为四个层次。第一,扩展 V-JEPA pretraining:从 V-JEPA v1 的 2M video 级别扩到 VM22M,并用 ViT-g/16、longer schedule、progressive resolution/duration training。第二,方法上保持 mask-denoising in representation space,不让模型被 pixel reconstruction 牵着走。第三,post-training 阶段把 frozen V-JEPA 2 encoder 当 frame encoder,训练约 300M 参数的 causal transformer predictor,把 action/state token 与 frame feature token interleave。第四,deployment 阶段用 image goal 编码出的 latent feature 作为 energy minimum,做 receding-horizon MPC。

Figure 2 解读:左半边是 V-JEPA 2 pretraining:masked video tokens 进入 encoder,predictor 看到 context features 与 mask tokens,只对 masked patch 的 EMA target representation 做 regression。右半边是 V-JEPA 2-AC:encoder frozen,不再随机 mask,而是给 predictor 过去 frames 的 representation、robot actions 和 poses,让它 autoregressively 预测 future frame representation。两阶段共享的关键是 latent target,而不是 pixel target。

这个想法的直觉是:大规模视频提供的是“什么变化是自然的、什么对象关系稳定、哪些时序模式可预测”的 background knowledge;少量 robot data 提供的是“7D end-effector action 对相机中 latent state 的影响”。如果直接用 robot data 学全部视觉表示,数据不足;如果直接用 web video 学 action predictor,又没有 action;如果做 pixel video generation,规划候选太贵。V-JEPA 2 的组合把三者拆开,使可 scale 的部分和必须 interaction 的部分各自承担最合适的学习任务。

3. Method (方法)

3.1 V-JEPA 2 action-free pretraining:在 representation space 做 mask denoising

V-JEPA 2 继承 JEPA 的基本目标:给定原始视频 与被 masking 后的 view ,encoder 提取 context representation,predictor 根据 context 和 learnable mask token 预测 dropped patches 的 representation。论文公式为: 这里 表示 stop-gradient, 是 encoder weights 的 exponential moving average。loss 只作用在 masked patches 的 predictions 上。这个设计有两个作用:一是避免 trivial collapse,因为 target branch 不被 predictor 直接反向传播;二是让模型学习 representation 中可预测的语义与动态,而不是像 generative reconstruction 那样把容量花在不可预测的 pixel detail 上。

结构上,encoder 与 predictor 都是 Vision Transformer。V-JEPA 2 的一个工程变化是把 V-JEPA v1 的 absolute sin-cos positional embedding 换成 3D-RoPE:把 feature dimension 分成 temporal、height、width 三段,分别应用 1D rotations。论文指出 3D-RoPE 对最大模型训练更稳定。输入视频会被 patchify 成 tubelets,大小为 ),并沿用 multiblock masking。

Figure 3 解读:这张图把从 V-JEPA v1 到 V-JEPA 2 的 scaling path 做成累积增益。以 ViT-L/16、2M videos 为 baseline,数据从 2M 扩到 22M 带来 +1.0 average accuracy;模型从 300M 扩到 1B 带来 +1.5;训练从 90K 到 252K iterations 再带来 +0.8;最后 spatial resolution 从 256 到 384、temporal duration 从 16 到 64 frames 共同把 average accuracy 推到 88.2,累计约 +4.0。

3.2 数据与 scaling recipe

VM22M 由四类 video source 和一个 image dataset 组成,训练时 image 被复制成 16-frame static video,以便 joint image/video pretraining。论文强调使用 public sources 是为了可复现,但 YT1B 需要 retrieval-based curation 来过滤 cartoon/clipart-style 等 noisy content。

SourceSamplesTypeTotal HoursApply CurationWeight
SSv2168KEgoVideo168No0.056
Kinetics733KExoVideo614No0.188
HowTo100M1.1MExoVideo134KNo0.318
YT-Temporal-1B19MExoVideo1.6MYes0.188
ImageNet1MImagesn/aNo0.250

Figure 4 解读:左图比较 VM2M 与 VM22M,VM22M 平均提升约 +1.0,尤其对 K400、COIN、ImageNet 这类 appearance coverage 相关任务有帮助。右图比较 curated YT1B 与 uncurated YT1B,curation 平均提升 +1.4,说明 web-scale data 不是越多越好;如果噪声 distribution 偏离 target,长训到后期可能退化。

Figure 5 解读:左图显示 model scale 从 ViT-L 到 ViT-g 带来稳定收益;中图显示直接用 训练 ViT-g 成本极高,论文估计约 60 GPU-years,而 progressive resolution/duration training 能带来约 GPU time reduction;右图说明即便 evaluation 固定 16 frames,pretraining 时更长 clip/更高 resolution 仍有收益。

released code 中对应的 V-JEPA 2 pretraining recipe 主要在 configs/train/vitg16/pretrain-256px-16f.yamlconfigs/train/vitg16/cooldown-256px-64f.yamlconfigs/train/vitg16/cooldown-384px-64f.yaml。以 vitg16/pretrain-256px-16f.yaml 为例,配置写明 nodes=16tasks_per_node=8、per-GPU batch_size=24,因此 global batch 为 3072;crop_size=256dataset_fpcs=[16,16,16]fps=4tubelet_size=2;optimizer 使用 AdamW,epochs=800ipe=300lr=5.25e-4start_lr=1e-4warmup=40weight_decay=0.04。384 cooldown config 使用 nodes=64、per-GPU batch_size=6crop_size=384dataset_fpcs=[64,64,64]epochs=40final_lr=1e-6

论文公式与 released code 实现差异:论文 Table 1 描述 VM22M 包含 SSv2、Kinetics、HowTo100M、YT1B、ImageNet 五类来源,而当前 main@204698b4 的公开 configs/train/vitg16/pretrain-256px-16f.yaml 只列出 K710、SSv2、HowTo 三个 CSV placeholder 及 weights 0.335/0.100/0.565,没有直接公开 YT1B 与 ImageNet rows;另外论文 Appendix 的 abbreviated recipe 报告 Final Weight Decay=0.4,而 release config 中 final_weight_decay=0.04。因此笔记中的 paper-scale dataset/statistics 以论文为准,source-grounded pseudocode/config mapping 以当前 GitHub release 为准。

3.3 V-JEPA 2-AC:把 frozen video representation 接到 action-conditioned predictor

V-JEPA 2-AC 的目标是:给定当前 latent state、robot end-effector state 与 action,预测下一个 latent state。训练数据来自 Droid raw dataset,不使用 reward、task label、success/failure label,只用 raw video 和 end-effector state signals。论文设定中每个 clip 为 4 秒、256×256、4 fps,即 16 frames;每个 state 是 7D vector,前三维是 Cartesian position,中间三维是 extrinsic Euler orientation,最后一维是 gripper state;action 是相邻 frames 的 end-effector state difference。

Frozen V-JEPA 2 encoder 独立编码每一帧: 论文中 ViT-g encoder 产生的 feature map shape 是 。V-JEPA 2-AC predictor 是约 300M 参数的 transformer:24 layers、16 heads、1024 hidden dimension、GELU activations。它将 action token、state token、flattened feature tokens 分别用 affine projection 映射到 predictor hidden dimension,再用 block-causal attention 处理,使每个 time step 的 patch feature 可以 attend 当前与过去的 action/state/patch tokens,不能偷看未来。

Figure 6 解读:左侧 teacher forcing loss 让 predictor 在看到真实上一帧 representation 时预测下一帧;右侧 rollout loss 把 predictor 自己的输出再喂回去,训练短 horizon autoregressive stability。直觉上,teacher forcing 保证 one-step dynamics 学准,rollout loss 则缓解 planning 时反复 rollout 造成的 error accumulation。

Teacher-forcing loss: Rollout loss 写作: 总目标是: 论文说明实际 rollout loss 使用 ,只通过一个 recurrent step 反向传播。released code 的 app/vjepa_droid/train.pyconfigs/train/vitg16/droid-256px-8f.yaml 对应这一点:config 中 loss.auto_steps=2,训练代码计算 z_tfz_ar,再设 loss = jloss + sloss。代码还会对 target/predicted representation 做 layer norm(normalize_reps: true)。

论文公式与 released code 实现差异:论文正文把 V-JEPA 2-AC 输入描述为 4 秒、4 fps、16-frame clips,且 teacher forcing 中 ;当前 release 的 Droid config 文件名与内容为 droid-256px-8f.yamldataset_fpcs=[8]batch_size=8 per GPU、nodes=4tasks_per_node=8,训练代码中 action tensor 注释为 [B T-1 7],并在 forward_target 中把每个 frame repeat 成 2-frame tubelet 送入 video encoder。也就是说,public config 是 8-frame recipe,而 paper exposition 是 16-frame/4-second recipe;复现时不能把论文中的 直接当成 release config 的 sequence length。

3.4 Planning:用 goal-conditioned latent energy 做 MPC

Planning 阶段不训练 policy。给定 current frame 、goal image 与 current state ,分别编码得到 。对一个 horizon ,优化 action sequence: 论文用 Cross-Entropy Method 近似求解:从一组 Gaussian distributions 采样 action trajectories,rollout world model 得到 final latent state,按与 goal latent 的 distance 选 top-,用 elite statistics 更新 Gaussian mean/std,重复若干 iterations,最后执行第一个 action,然后重新观察和再规划。这是 receding horizon control。

Figure 7 解读:当前 observation 和 goal image 都通过同一个 frozen encoder 进入 latent space;predictor 根据 candidate actions 想象未来 latent state;energy 是 imagined future 与 goal latent 的 距离。因为优化变量是 action,而不是模型参数,部署时可以完全 zero-shot 使用同一套 world model weights。

released code 中 planning utilities 位于 notebooks/utils/mpc_utils.pynotebooks/utils/world_model_wrapper.pycem() 的默认接口是 world_model(context_frame, action) -> next_frame,内部维护 action trajectory 的 Gaussian mean/std;WorldModel.infer_next_action() 把 encoder/predictor 包装成 planning-time step function。论文实验中,V-JEPA 2-AC 使用 800 samples、10 refinement steps、horizon 1;每个 sampled action 被限制在 ball radius 0.075,约对应每步最大 13 cm end-effector displacement。

3.5 Source-grounded pseudocode

Code reference: main @ 204698b4 (2026-03-23) — pseudocode and mapping based on this commit

def vjepa2_pretrain_step(encoder, target_encoder, predictor, clips,
                         masks_enc, masks_pred, optimizer, loss_exp=1.0):
    # app/vjepa/train.py: target branch is EMA encoder, no gradient.
    with torch.no_grad():
        targets = target_encoder(clips)
        targets = [F.layer_norm(h, (h.size(-1),)) for h in targets]
 
    # Context branch sees only unmasked/context tokens.
    preds = encoder(clips, masks_enc)
    preds = predictor(preds, masks_enc, masks_pred)  # returns masked-token preds
 
    # Loss is only on masked target tokens.
    masked_targets = [apply_masks(h, m, concat=False)
                      for h, m in zip(targets, masks_pred)]
    loss, n = 0.0, 0
    for pred_level, tgt_level in zip(preds, masked_targets):
        for pred_tokens, tgt_tokens in zip(pred_level, tgt_level):
            loss = loss + torch.mean(torch.abs(pred_tokens - tgt_tokens) ** loss_exp) / loss_exp
            n += 1
    loss = loss / n
 
    loss.backward()
    optimizer.step()
    optimizer.zero_grad()
 
    # EMA target update: param_k = m * param_k + (1-m) * param_q
    with torch.no_grad():
        m = next(momentum_scheduler)
        for param_q, param_k in zip(encoder.parameters(), target_encoder.parameters()):
            param_k.data.mul_(m).add_((1.0 - m) * param_q.detach().data)
    return loss
def vjepa2_ac_train_step(frozen_encoder, ac_predictor, clips, actions, states,
                         extrinsics, optimizer, tokens_per_frame, auto_steps=2,
                         normalize_reps=True, loss_exp=1.0):
    # app/vjepa_droid/train.py: clips [B, C, T, H, W], actions [B, T-1, 7]
    with torch.no_grad():
        # Released code encodes each frame as a repeated 2-frame tubelet clip.
        frame_clips = clips.permute(0, 2, 1, 3, 4).flatten(0, 1).unsqueeze(2).repeat(1, 1, 2, 1, 1)
        h = frozen_encoder(frame_clips)
        h = h.view(clips.size(0), clips.size(2), -1, h.size(-1)).flatten(1, 2)
        if normalize_reps:
            h = F.layer_norm(h, (h.size(-1),))
 
    def step_predictor(z_prefix, a_prefix, s_prefix, e_prefix):
        z_next = ac_predictor(z_prefix, a_prefix, s_prefix, e_prefix)
        return F.layer_norm(z_next, (z_next.size(-1),)) if normalize_reps else z_next
 
    # Teacher forcing: predict next latent tokens from true prefix.
    z_tf = step_predictor(h[:, :-tokens_per_frame], actions, states[:, :-1], extrinsics[:, :-1])
 
    # Short autoregressive rollout: feed predicted tokens back.
    z_roll = torch.cat([h[:, :tokens_per_frame], z_tf[:, :tokens_per_frame]], dim=1)
    for n in range(1, auto_steps):
        z_next = step_predictor(z_roll, actions[:, :n + 1], states[:, :n + 1], extrinsics[:, :n + 1])
        z_roll = torch.cat([z_roll, z_next[:, -tokens_per_frame:]], dim=1)
    z_ar = z_roll[:, tokens_per_frame:]
 
    def latent_l1(pred):
        target = h[:, tokens_per_frame: pred.size(1) + tokens_per_frame]
        return torch.mean(torch.abs(pred - target) ** loss_exp) / loss_exp
 
    loss = latent_l1(z_tf) + latent_l1(z_ar)
    loss.backward()
    optimizer.step()
    optimizer.zero_grad()
    return loss
def cem_latent_mpc_step(encoder, world_model, current_image, current_pose, goal_image,
                        samples=800, cem_steps=10, horizon=1, maxnorm=0.075, topk=10):
    # notebooks/utils/mpc_utils.py + world_model_wrapper.py, simplified.
    context_rep = encoder(current_image)       # [1, 1, HW, D]
    goal_rep = encoder(goal_image)             # [1, 1, HW, D]
    mean = torch.zeros(horizon, 4, device=context_rep.device)  # dx, dy, dz, gripper
    std = torch.ones_like(mean)
 
    for _ in range(cem_steps):
        actions = torch.randn(samples, horizon, 4, device=mean.device) * std + mean
        actions[..., :3] = actions[..., :3].clamp(-maxnorm, maxnorm)
        actions[..., -1:] = actions[..., -1:].clamp(-0.75, 0.75)
        actions7 = torch.cat([actions[..., :3], torch.zeros(samples, horizon, 3), actions[..., -1:]], dim=-1)
 
        pred_rep, pred_pose = context_rep.repeat(samples, 1, 1, 1), current_pose.repeat(samples, 1, 1)
        for t in range(horizon):
            pred_rep, pred_pose = world_model(pred_rep, actions7[:, :t + 1], pred_pose)
        energy = torch.mean(torch.abs(pred_rep[:, -1].flatten(1) - goal_rep.flatten(1)), dim=-1)
        elite = actions[torch.topk(-energy, k=topk).indices]
        mean, std = elite.mean(dim=0), elite.std(dim=0)
 
    first_action = torch.cat([mean[:1, :3], torch.zeros(1, 3, device=mean.device), mean[:1, -1:]], dim=-1)
    return first_action
Paper ConceptSource FileKey Class/Function
V-JEPA 2 masked latent prediction trainingapp/vjepa/train.pymain(), nested forward_target, forward_context, loss_fn, EMA update
V-JEPA 2 model constructionapp/vjepa/utils.pyinit_video_model() initializes video_vit encoder and vit_predictor
Predictor with mask tokens and target-token outputsrc/models/predictor.pyVisionTransformerPredictor.forward()
ViT encoder / tubelet processing / RoPE supportsrc/models/vision_transformer.pyVisionTransformer family constructors
Multiblock video maskingsrc/masks/multiseq_multiblock3d.pymultisequence 3D mask collator used by app/vjepa/train.py
V-JEPA 2-AC trainingapp/vjepa_droid/train.pynested forward_target, forward_predictions, loss_fn, jloss + sloss
Action-conditioned predictorsrc/models/ac_predictor.pyVisionTransformerPredictorAC, vit_ac_predictor()
Droid post-training configconfigs/train/vitg16/droid-256px-8f.yamlpred_depth=24, pred_embed_dim=1024, auto_steps=2, epochs=315
CEM latent MPC plannernotebooks/utils/mpc_utils.pycem(), compute_new_pose()
Planning wrappernotebooks/utils/world_model_wrapper.pyWorldModel.encode(), infer_next_action()

4. Experimental Setup (实验设置)

4.1 Pretraining data 与 training config

V-JEPA 2 pretraining 使用 VM22M:22M samples,视频总量超过 1M hours,构成见 §3 的 Table 1。图像数据 ImageNet 被复制成 static 16-frame video。核心 training recipe 包括 ViT-L/16、ViT-H/16、ViT-g/16 三种 encoder scale,其中 Table 12 给出的 encoder architecture 为:ViT-L 300M、width 1024、depth 24、heads 16、MLP 4096;ViT-H 600M、width 1280、depth 32、heads 16、MLP 5120;ViT-g 1B、width 1408、depth 40、heads 22、MLP 6144;predictor 固定为 ViT-s 22M、width 384、depth 12、heads 12、MLP 1536。released config 对 ViT-g pretraining 的实际 launch 数字如前所述来自 configs/train/vitg16/*.yaml:16 nodes×8 tasks,256px/16f pretraining;64 nodes×8 tasks,384px/64f cooldown。

4.2 Downstream understanding / prediction / VQA

Probe-based classification 评估 action/object recognition,主要 datasets 包括 SSv2、Diving-48、Jester、Kinetics-400、COIN、ImageNet-1K。评估方式是在 frozen encoder output 上训练 4-layer attentive probe;推理时采样多个 clips/views 并平均 logits。

action anticipation 使用 Epic-Kitchens-100:100 hours egocentric cooking videos、45 kitchen environments、3568 unique action labels、97 verb categories、300 noun categories;metric 是 mean-class recall-at-5 for verb/noun/action。

Video QA 则把 V-JEPA 2 vision encoder 和 LLM 对齐:controlled setting 使用 Qwen2-7B-Instruct,state-of-the-art setting 使用 Llama 3.1 8B,并把 alignment data 从 18M 扩到 full 88.5M samples。

VQA metrics 包括 PerceptionTest accuracy、MVP paired accuracy、TempCompass multi-choice accuracy、TemporalBench MBA-short QA、TOMATO accuracy、TVBench accuracy、MVBench accuracy。

4.3 Robot planning setup

V-JEPA 2-AC post-training 使用 Droid raw dataset 中不到 62 hours 的 left extrinsic camera videos;每个 trajectory 带 end-effector state metadata,但不使用 reward、task type 或 success label。论文正文称随机采样 4-second clips,256×256,4 fps;Appendix B.1 给出 optimizer:AdamW,warmup-constant-decay LR schedule,weight decay 0.04;LR 从 warmup 到 over 4500 iterations,constant 85500 iterations,最后 4500 iterations decay 到 0;batch size 256;random-resize-crop aspect ratio

Figure 14 解读:robot tasks 分成 grasp cup、reach with cup、pick-and-place cup。grasp/reach-with-object 只给 single goal image;pick-and-place 给两个 sub-goal 加 final goal,模型先对 grasp sub-goal 优化 4 time-steps,再对 vicinity sub-goal 优化 10 time-steps,最后对 place goal 优化 4 time-steps。这解释了为什么论文把 planning 评价拆成 Reach、Grasp、Reach w/ Obj.、Pick-&-Place。

Baselines 有两个。Octo 是 video-language-action behavior cloning baseline,基于 octo-base-1.5,预训练数据 Open-X Embodiment over 1M trajectories,并在 entire Droid 上用 hindsight relabeling fine-tune;输入是 side image view 256×256、two previous frames、horizon 4 future actions。Cosmos 是 action-conditioned video generation world model baseline,基于 latent diffusion-7B continuous tokenizer,原模型训练于 20M hours video,再用 officially released action-conditioned code fine-tune on Droid。Deployment 在两个新 lab 的 Franka Emika Panda + RobotiQ gripper 上进行,视觉输入是 uncalibrated low-resolution monocular RGB camera;两个 lab 都不在 Droid dataset 中。

5. Experimental Results (实验结果)

5.1 Understanding:classification 与 scaling

V-JEPA 2 在 frozen encoder + attentive probe setting 下,motion understanding 与 appearance understanding 都强。主表中 V-JEPA 2 ViT-g384 达到 average 88.2;SSv2 77.3、Diving-48 90.2、Jester 97.8、K400 87.3、COIN 91.1、IN1K 85.1。对比同协议下的 V-JEPA ViT-H average 85.2、InternVideo2s2-1B average 87.0,ViT-g384 说明 scaling + high resolution/long duration 对 motion-heavy tasks 有实质收益。

MethodParam.Avg.SSv2Diving-48JesterK400COININ1K
V-JEPA ViT-H600M85.274.387.997.784.587.180.0
InternVideo2s2-1B1B87.069.786.497.089.493.885.8
V-JEPA 2 ViT-L300M86.073.789.097.685.186.883.5
V-JEPA 2 ViT-H600M86.474.089.897.785.387.983.8
V-JEPA 2 ViT-g1B87.575.390.197.786.690.784.6
V-JEPA 2 ViT-g3841B88.277.390.297.887.391.185.1

关键 ablation 与 appendix 结果支持 scaling recipe。Table 14 显示 ViT-g 在 epoch 800/no cooldown 时 IN1K 83.8、COIN 89.1、SSv2 75.1、K400 85.8;256×256 annealed cooldown 后变成 84.6、90.7、75.3、86.6;384×384 annealed cooldown 后为 85.1、90.2、76.5、87.3。也就是说 cooldown 不是 cosmetic phase,而是带来超过 1 point 的多任务提升,尤其提高 SSv2/K400。

5.2 Prediction:EK100 action anticipation

EK100 action anticipation 是论文最能体现“prediction capability”的非机器人任务。V-JEPA 2 只用 frozen backbone + attentive probe,却超过专门为 anticipation 设计的模型。V-JEPA 2 ViT-g384 达到 Verb 63.6、Noun 57.1、Action 39.7;相比 PlausiVL 的 Action 27.6,是约 44% relative improvement。模型大小也呈单调 scaling:ViT-L Action 32.7,ViT-H 36.5,ViT-g 38.0,ViT-g384 39.7。

MethodParam.Verb R@5Noun R@5Action R@5
InAViT160M51.952.025.8
Video-LLaMA7B52.952.026.0
PlausiVL8B55.654.227.6
V-JEPA 2 ViT-L300M57.853.832.7
V-JEPA 2 ViT-H600M59.254.636.5
V-JEPA 2 ViT-g1B61.255.738.0
V-JEPA 2 ViT-g3841B63.657.139.7

Figure 11 解读:EK100 qualitative visualization 展示 V-JEPA 2 的 prediction 不只是识别当前画面物体,而是利用 context 推断接下来的人类动作。对 cooking egocentric videos,这要求模型捕捉手、工具、容器和动作阶段之间的时序关系。

Figure 17 解读:protocol ablation 表明 action anticipation 对 context frames、fps、resolution 都敏感;更多 frames 与合适帧率提高 recall-at-5,说明 prediction task 不是单帧 appearance classification。V-JEPA 2 的优势与它在 video pretraining 中保留 temporal dynamics 相关。

Figure 18 解读:longer-term anticipation 的性能下降揭示了 limitation:预测越远,context 中与 future action 直接相关的证据越弱,多种未来动作的可能性越大。这个现象和 robot rollout 中的 error accumulation 是同一个问题的两个版本。

5.3 Video QA:video encoder 可以被对齐到 LLM

在 controlled setup 中,V-JEPA 2 ViT-g512 + Qwen2-7B-Instruct 达到 Avg. 54.4、PerceptionTest 77.7、MVP 33.7、TempCompass 71.6、TemporalBench 32.3、TVBench 57.5、TOMATO 38.5、MVBench 69.5。最终 state-of-the-art setup 使用 full 88.5M alignment data、Llama 3.1 8B backbone、V-JEPA 2 ViT-g384,达到 Avg. 59.5、PerceptionTest 84.0、MVP 44.5、TempCompass 76.9、TemporalBench 36.7、TOMATO 40.3、TVBench 60.6、MVBench 73.5。论文强调这反驳了一种常见看法:video-language model 的视觉 encoder 必须用 language supervision 预训练;V-JEPA 2 是 self-supervised video encoder,但仍能通过后续 alignment 获得强 VQA 表现。

MethodEnc/LLMAvg.PerceptionTestMVPTempCompassTemporalBenchTOMATOTVBenchMVBench
InternVL-2.5300M/7B52.168.939.968.324.329.461.672.6
Qwen2.5VL1B/7B49.770.536.771.724.524.650.569.6
PLM 8B1B/8B56.782.739.772.728.333.263.577.1
V-JEPA 2 ViT-g384 + Llama 3.1 8B1B/8B59.584.044.576.936.740.360.673.5

5.4 Planning:zero-shot robot manipulation

V-JEPA 2-AC 在两个新 lab 的 Franka arms 上 zero-shot 部署。Single-goal reaching 中,模型在三个方向任务中都能把 end-effector 移到 goal 4 cm 以内,并且 error 单调下降。作者把这解释为一种 learned visual servoing:与经典 visual servoing 不同,它不是依赖几何标定和手写控制律,而是通过 unlabeled real-world videos 学到 action 对 latent state 的影响。

Figure 8 解读:三行分别对应 reaching。每行左侧是 start/goal images,右侧曲线是 robot execution 中 distance-to-goal 随 step 下降。该图证明 energy minimization 给出的 action 方向和实际相机视角中的空间关系一致,即模型从 monocular RGB 中隐式获得了 3D spatial understanding。

Figure 9 解读:作者固定 ,扫 ,可视化 equation (5) 的 energy landscape。ground-truth action 是 ,energy minimum 出现在接近 的区域;尽管不是精确 sensing,landscape 局部平滑且近似 convex,这解释了为什么 CEM 可以找到可执行动作。

Prehensile manipulation 上,V-JEPA 2-AC 的平均成功率为 Reach 100%、Grasp Cup 65%、Grasp Box 25%、Reach w/ Obj. Cup 75%、Reach w/ Obj. Box 75%、Pick-&-Place Cup 80%、Pick-&-Place Box 65%。Octo 平均为 100%、15%、0%、15%、70%、15%、10%。差距主要出现在 object interaction:grasp 和 pick-and-place 需要视觉反馈下的精细 control、gripper state、物体是否随手臂移动等 latent physics。

MethodLabReachGrasp CupGrasp BoxReach w/ Obj. CupReach w/ Obj. BoxPick-&-Place CupPick-&-Place Box
OctoLab 1100%20%0%20%70%20%10%
OctoLab 2100%10%0%10%70%10%10%
OctoAvg100%15%0%15%70%15%10%
V-JEPA 2-ACLab 1100%70%30%90%80%80%80%
V-JEPA 2-ACLab 2100%60%20%60%70%80%50%
V-JEPA 2-ACAvg100%65%25%75%75%80%65%

Figure 10 解读:pick-and-place execution 中高亮 frames 表示达到 sub-goal 后切换到下一个 goal。这个多阶段 goal schedule 很重要:模型本身不是训练好的 long-horizon policy,而是通过短 horizon MPC 反复追逐当前 sub-goal,从而组合 grasp、move、place 三个 atomic skills。

与 Cosmos 的 planning comparison 更突出 latent planning 的计算优势。在 single RTX 4090 上,Cosmos 使用 80 samples、10 refinement steps、horizon 1,每个 action 需要 4 min;V-JEPA 2-AC 使用 800 samples、10 refinement steps、horizon 1,每个 action 只需 16 sec。Table 3 中 Cosmos Reach 80%、Grasp Cup 0%、Grasp Box 20%、Pick-&-Place Cup 0%、Box 0%;V-JEPA 2-AC Reach 100%、Grasp Cup 60%、Grasp Box 20%、Pick-&-Place Cup 80%、Box 50%。这不是说 V-JEPA 2-AC 预测视觉更漂亮,而是它的 latent state 足够支持更快的 action search。

5.5 可解释性与 limitations

Figure 15 解读:作者训练一个简单 frame decoder,把 V-JEPA 2 / V-JEPA 2-AC representation 转回 pixel 便于分析。V-JEPA 2 reconstruction 捕捉了控制相关的 salient scene parts,但背景较模糊;V-JEPA 2-AC rollout 在给定 ground-truth action sequence 时能让 robot arm 动起来,并保持 shelf 等非交互对象稳定。open vs closed gripper ablation 中,closed gripper 会带动 cup,open gripper 下 cup 位置基本不变,显示模型学到了一些 object constancy/shape constancy/gravity 的直觉。但 Figure 15a 也显示 final frame 中 cup 位置略偏低,说明 autoregressive error accumulation 仍然存在。

Figure 16 解读:V-JEPA 2-AC 没有显式 camera calibration,却要从 monocular RGB 推断 action coordinate axis。当 camera position 改变时,inferred coordinate axis 的 rotation error 明显变化。论文把这列为主要 limitation:在很多视角下 robot base 不在画面中,坐标轴推断本身并不 well-defined,因此需要手动尝试 camera positions,最终选择一个 across experiments 工作较好的位置。

作者还列出 long-horizon planning 的限制。第一,autoregressive latent prediction 会累积误差,rollout 越长越难可靠 planning;第二,CEM 的 planning time 与 samples/refinement/horizon 成本相关,当前 setup 仍需要 16 sec/action,不能算实时;第三,Droid post-training 只覆盖有限 robot morphology、camera setup 和 tabletop manipulation distribution,因此不能外推到所有机器人或复杂 multi-step tasks。论文建议的改进包括减少 samples/refinement steps、在 world-model imagination 中训练 feed-forward policy 初始化 planning、以及对 V-JEPA 2-AC 尝试 gradient-based planning。

总体结论是:V-JEPA 2 把 self-supervised video representation 推到了一个能同时服务三类任务的位置。理解方面,ViT-g384 在多项 classification/VQA 指标上达到或接近 SOTA;预测方面,EK100 action anticipation 明显超过先前方法;规划方面,V-JEPA 2-AC 用少量 unlabeled robot video 和 image-goal latent MPC,在新 lab 中完成 zero-shot manipulation。最值得注意的不是某个单点指标,而是“action-free observation pretraining + small action-conditioned post-training + latent planning”这条路线被实验证明可行。