Add multiple research papers in PDF format to the repository, including recent works on AI and physics, with file sizes ranging from 1.7 MB to 32.3 MB.
Sync to site1 / sync (push) Has been cancelled

This commit is contained in:
gaojie
2026-06-02 04:12:38 +08:00
parent 36fe037bc1
commit c55f47b287
57 changed files with 278820 additions and 3 deletions
@@ -0,0 +1,344 @@
---
title: "V-JEPA 2 深度技术剖析:从自监督视频表征到零样本机器人规划"
date: 2026-05-24
draft: false
tags: ["V-JEPA 2", "JEPA", "Meta", "world-model", "self-supervised", "video", "robotics", "action-conditioned", "MPC"]
categories: ["JEPA"]
description: "论文(arXiv:2506.09985+ 官方代码(facebookresearch/vjepa2)结合的 V-JEPA 2 深度技术剖析:逐模块讲解编码器/预测器架构、四支柱 scaling 策略、动作条件世界模型 V-JEPA 2-AC,以及基于 MPC + CEM 的零样本机器人规划。"
---
> 本文聚焦 **V-JEPA 2**Assran, Bardes, Fan, Garrido, LeCun 等,FAIR @ Meta + MilaarXiv:2506.099852025-06),采用"论文 + 代码"双线讲解:先讲清论文里的设计动机与方法,再对照官方仓库 `facebookresearch/vjepa2` 与 HuggingFace `transformers` 集成讲实现细节。它是 [JEPA 系列综述](index.md) 中 V-JEPA 2 一节的展开深挖版。
---
## 一、一句话定位与三大能力
V-JEPA 2 把一个核心论断推到了规模化的极致:**在表示空间(latent space)中做预测,而不是在像素空间里重建**,配合互联网级视频数据,可以让一个自监督模型同时具备三种能力——
1. **理解(Understanding**:作为冻结视觉编码器,在运动理解、动作识别上达到 SOTA。
2. **预测 / 预判(Prediction / Anticipation**:预测未来表示,在人类动作预判(Epic-Kitchens-100)上超过专用模型。
3. **规划(Planning**:在少量机器人交互数据上后训练出 **V-JEPA 2-AC**action-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 编码器的关键调用:
```python
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**
```python
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 训练与评测的运行方式
```bash
# 本地预训练(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 用同一条命令、不同 config**cooldown / 动作条件的 config 与初始训练放在同一目录)。
- 动作条件模型走 `app/vjepa_droid/train.py`,用 teacher-forcing + 自回归 rollout 双目标。
- 评测:在冻结骨干上训 attentive probe;官方放出了 SSv2、Diving48 和 EK-100 三个任务的探针 checkpoint`wget .../vjepa2/evals/ssv2-vitg-384-64x2x3.pt`),可直接跑 `configs/inference/` 做推理。
### 4.5 HuggingFace `transformers` 集成(最易上手的路径)
`transformers` 已原生支持 V-JEPA 2`VJEPA2Model` / `VJEPA2ForVideoClassification` / `VJEPA2Config`)。
**(a) 抽取视频特征:**
```python
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 微调版):**
```python
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 系列综述](index.md) 中已记录的关联,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/动作