V-JEPA 2.1 入門 — MetaのWorld Modelで動画理解と物理世界予測を試す実践ガイド
2026年3月16日、MetaがV-JEPA 2.1をリリースしました。これは単なる動画モデルのアップデートではありません。「World Model」と呼ばれる、物理世界を理解・予測するAIの新しいパラダイムを実装したものです。
この記事では、V-JEPA 2.1の仕組みを理解し、実際にPythonで動かすところまでを解説します。
LLMの限界と「World Models」の台頭
Yann LeCun(ヤン・ルカン)という名前を聞いたことがあるでしょうか。チューリング賞受賞者で、現在はMetaのAI研究を率いている人物です。彼はこう言いました。
「もし人間レベルのAIに興味があるなら、LLMをやめなさい」
かなり衝撃的な発言ですよね。なぜ彼はこう言ったのでしょうか。
LLM(大規模言語モデル)は確かに凄い。文章を書く、コードを生成する、質問に答える。でも、LLMには決定的な弱点があります。「世界」を理解していないのです。
言語を理解しているように見えますが、実際には統計的なパターンを学習しているだけ。だから、「ハルシネーション」と呼ばれる現象が起きます。もっともらしく聞こえるけど、実際には間違った情報を自信満々に出力してしまう。
LeCunは、この問題の根本原因を**「LLMは現実世界の物理法則を学習していないから」**だと指摘しています。言葉だけで世界を理解しようとするのは、映像を見ずに映画の感想を語るようなもの。なんとなく雰囲気はつかめるけど、肝心の「何が起きたか」はわからない。
そこで登場するのが**World Model(ワールドモデル)**です。
World Modelは、物理世界のシミュレーションをAI内部に構築しようというアプローチ。ボールを投げれば放物線を描いて落ちる。コップを落とせば割れる。そういう「当たり前」をAIに理解させようという試みです。
Metaが2026年3月に公開したV-JEPA 2.1は、このWorld Modelの最前線を実装したモデルなんですね。
JEPAの核心 — ピクセルではなく「表現」を予測する
V-JEPA 2.1を理解するには、まず**JEPA(Joint-Embedding Predictive Architecture)**というアーキテクチャを知る必要があります。
従来の動画生成モデルを思い出してみましょう。これらは「次のフレーム」をピクセルレベルで予測しようとします。例えば、64×64ピクセルの画像を生成するなら、4096個のピクセル値をすべて予測しないといけない。
でも、考えてみてください。物理世界には「予測不可能な細部」が溢れていませんか。
木の葉が風に揺れる角度。水面のさざ波の形。雲の動き。これらを正確に予測するのは不可能に近いし、そもそも重要ではありません。重要なのは「ボールが落ちてきている」という事実であって、ボールの表面の影の細部ではないはずです。
JEPAはここで発想を変えました。
「ピクセルを予測するのではなく、表現(representation)を予測しよう」
表現というのは、動画の「意味的な特徴」を数値化したもの。具体的には、動画をVision Transformerに入力して得られる高次元ベクトルのことです。
イメージで言うとこうです。
- 従来のアプローチ: 「次のフレームはどう見えるか?」→ ピクセルを生成
- JEPAのアプローチ: 「次のフレームの意味的表現はどうなるか?」→ ベクトルを予測
これによって、ノイズのような細部は無視して、本質的な「世界の変化」だけを学習できるようになります。
落ちるボールを例にすると、「ボールの色」「表面のテクスチャ」「影の形」は無視して、「下方向に加速しながら移動している」という本質的なダイナミクスだけを捉える。それがJEPAの狙いです。
V-JEPA 2.1のアーキテクチャを解剖する
では、V-JEPA 2.1の具体的な構造を見ていきましょう。
全体構成
V-JEPA 2.1は大きく分けて3つのコンポーネントで構成されています。
- Encoder(エンコーダー): 動画を表現ベクトルに変換
- Predictor(プレディクター): マスクされた部分の表現を予測
- Target Encoder(ターゲットエンコーダー): 学習の安定化用
学習時には、動画の一部をマスク(隠す)して、そのマスクされた部分の表現を予測するタスクを解きます。いわば「動画の穴埋め問題」を大量に解くことで、世界のダイナミクスを学習するイメージです。
Vision Transformer (ViT) ベース
エンコーダーはVision Transformer (ViT) をベースにしています。画像を16×16のパッチに分割して、それぞれをトークンとして処理するアプローチですね。
動画の場合は、時間方向も考慮して「チューブレット(tubelet)」という単位を使います。例えば「2フレーム×16×16ピクセル」のかたまりを1つのトークンとして扱います。
3D Rotary Position Embeddings (3D-RoPE)
V-JEPA 2の重要な技術的特徴として、3D-RoPEが挙げられます。
通常の位置エンベディングは「このトークンは画像のどこにあるか」を表しますが、動画では「いつ」の情報も重要です。3D-RoPEは、空間(X, Y)と時間(T)の3次元の位置情報を回転行列でエンコードします。
これによって、大規模なモデル(10億パラメータ級)でも学習が安定するようになりました。
V-JEPA 2.1の新機能
2026年3月16日にリリースされたV-JEPA 2.1では、以下の新機能が追加されました。
1. Dense Predictive Loss(密予測損失)
従来はマスクされたトークンだけが損失計算の対象でした。V-JEPA 2.1では、可視部分とマスク部分のすべてのトークンが損失に寄与します。これにより、より豊かな表現が学習できるようになりました。
2. Deep Self-Supervision(深層自己教師あり学習)
エンコーダーの最終層だけでなく、中間層でも損失を計算します。これによって、階層的な特徴抽出が促進されます。
3. マルチモーダルトークナイザー
画像と動画の両方に対応したトークナイザーを導入。これにより、画像と動画を統一的に扱えるようになりました。
モデルサイズ
V-JEPA 2.1は4つのサイズで提供されています。
| モデル | パラメータ数 | 解像度 |
|---|---|---|
| ViT-B/16 | 80M | 384×384 |
| ViT-L/16 | 300M | 384×384 |
| ViT-g/16 | 1B | 384×384 |
| ViT-G/16 | 2B | 384×384 |
手元で試すならViT-L(300M)あたりがバランスが良いでしょう。Hugging Faceから簡単にロードできます。
2段階トレーニングで物理法則を学ぶ
V-JEPA 2の学習は、2つの段階に分かれています。この設計が非常に興味深いです。
Stage 1: Action-Free Pre-training
最初の段階では、アクション(行動)情報なしで動画を学習します。
使用するのは「VideoMix22M」というデータセット。100万時間以上のインターネット上の動画が含まれています。ラベルは一切なし。ただ大量の動画を見るだけ。
ここで何を学習するかというと、物理世界の基本的な法則です。
- 物体は落下する
- 重なり合う物体は手前にある方が大きく見える
- 人が歩くときは手足が交互に動く
こういう「当たり前」のことを、何億回もの「穴埋め問題」を通じて学習していく。赤ちゃんが世界を観察して物理法則を身につけるプロセスに近いのかもしれません。
この段階が終わると、汎用的な動画エンコーダーが完成します。このエンコーダーの重みは凍結(freeze)されて、次の段階では更新されません。
Stage 2: Action-Conditioned Post-training
次の段階では、ロボットの操作データを使って微調整します。ここで登場するのがV-JEPA 2-AC(Action-Conditioned)です。
使用するのは「Droid」というデータセット。ロボットアームの操作動画と、その時のアクション(関節の角度や移動量)がペアになっています。
ここでの学習タスクは、「現在の状態」と「アクション」から「次の状態」を予測すること。「こう動いたら、こうなる」という因果関係を学ぶイメージです。
面白いのは、この段階で使うデータは62時間未満と非常に少ないこと。事前学習で物理法則を理解しているから、少量のデータで「行動と結果」の紐付けができるんですね。
この2段階構成によって、大規模なラベルなしデータと、小規模なラベルありデータを効率的に組み合わせています。
PythonでV-JEPA 2.1を動かしてみる
では、実際にV-JEPA 2.1を使ってみましょう。Hugging Faceからモデルをロードして、動画から特徴量を抽出するコードを紹介します。
インストール
まずは必要なライブラリをインストールします。
pip install torch transformers torchcodec einops timm
CUDA対応のPyTorchをインストールすることをおすすめします。CPUでも動きますが、さすがに遅いです。
基本的な使い方
from transformers import AutoVideoProcessor, AutoModel
import torch
from torchcodec.decoders import VideoDecoder
import numpy as np
# Hugging Faceからモデルをロード(V-JEPA 2のViT-L)
hf_repo = "facebook/vjepa2-vitl-fpc64-256"
model = AutoModel.from_pretrained(hf_repo)
processor = AutoVideoProcessor.from_pretrained(hf_repo)
# GPUがあれば使用
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model = model.to(device)
# 動画を読み込む
video_path = "your_video.mp4"
decoder = VideoDecoder(video_path)
# 64フレームをサンプリング
frame_indices = np.arange(0, 64)
video = decoder.get_frames_at(indices=frame_indices).data # T x C x H x W
# 前処理
inputs = processor(video, return_tensors="pt").to(device)
# 特徴量を抽出
with torch.no_grad():
features = model.get_vision_features(**inputs)
print(f"特徴量の形状: {features.shape}")
# 出力例: torch.Size([1, 8192, 1024])
出力の解釈
出力の形状を見てみましょう。
- 1(バッチサイズ): 処理した動画クリップの数
- 8192(パッチ数): 64フレームを処理。各フレームは256×256にリサイズされ、16×16パッチに分割。チューブレットは2フレーム単位なので、(256/16) × (256/16) × (64/2) = 8192パッチ
- 1024(埋め込み次元): 各パッチを1024次元のベクトルで表現
この特徴量を使って、動画の分類、類似度計算、アクション認識などができます。
異なるモデルサイズを使う場合
Hugging Faceでは複数のモデルサイズが提供されています。
# より小さいモデル(高速)
hf_repo = "facebook/vjepa2-vitb-fpc16-256"
# より大きいモデル(高精度)
hf_repo = "facebook/vjepa2-vitg-fpc64-384"
# V-JEPA 2.1を使う場合
hf_repo = "facebook/vjepa2_1_vitl_dist_vitG_384"
用途に合わせて選んでみてください。
ロボティクス応用 — AIが「計画」を立てる仕組み
V-JEPA 2の真価は、ロボティクスへの応用にあります。ここまで説明してきたWorld Modelを使って、ロボットが自ら「計画」を立てる仕組みを見ていきましょう。
V-JEPA 2-AC:アクション条件付きモデル
V-JEPA 2-ACは、アクション(行動)を条件として次の状態を予測できるモデルです。
これが何を意味するかというと、「こう動いたらこうなる」をシミュレーションできるということ。ロボットの頭の中で、何千回もシミュレーションを実行して、最適な行動を選べるようになります。
Model-Predictive Control (MPC) の仕組み
具体的には、Model-Predictive Control (MPC) という手法を使います。
- ゴールの指定: 目標とする状態(ゴール画像)を与える
- エネルギー関数の定義: 予測された状態とゴールの距離を計算
- アクションの最適化: エネルギーを最小化するアクション列を探索
- 実行と再計画: 最初のアクションだけ実行し、新しい状態から再計画
これをCross-Entropy Method (CEM) という最適化アルゴリズムで実行します。乱数で大量のアクション列を生成して、良いものを選び出すアプローチです。
実際の成功率
Metaの実験では、Frankaというロボットアームを使って以下の成功率を達成しました。
| タスク | Octo | Cosmos | V-JEPA 2-AC |
|---|---|---|---|
| Reach(到達) | 100% | 80% | 100% |
| Grasp Cup | 10% | 0% | 60% |
| Grasp Box | 0% | 20% | 20% |
| Pick-and-Place Cup | 10% | 0% | 80% |
| Pick-and-Place Box | 10% | 0% | 50% |
特に注目すべきは、環境固有のデータ収集や、タスク固有の学習を一切行っていないこと。事前学習したモデルをそのまま新しい環境に持っていって、ゼロショットで動かしています。
これがWorld Modelの力です。物理世界の一般原理を学習しているから、未知の環境でも適応できる。
まとめ — World Modelsが開く可能性
LLMとWorld Modelsは、どちらが優れているかという話ではありません。役割が違うのです。
- LLM: 言語、知識、推論、コード生成が得意
- World Models: 物理世界の理解、予測、ロボティクスが得意
これらを組み合わせることで、より高度なAIシステムが構築できるはずです。「言語で指示を受けて、物理世界で行動する」エージェント。それがWorld Modelsが目指している未来です。
V-JEPA 2.1は、その第一歩を踏み出したモデルだと言えます。
読者へのアクションプラン
- まずは動かしてみる: Hugging Faceからモデルをロードして、手持ちの動画を処理してみる
- ベンチマークを確認する: どのようなタスクでどの程度の性能が出ているか、論文やGitHubを確認する
- 応用を考える: 動画分類、異常検知、アクション認識など、自分のプロジェクトに活用できないか考える
World Modelsの研究はまだ始まったばかり。V-JEPA 2.1を理解しておくことは、これからのAI開発において確実にプラスになるはずです。
GPUメモリ要件の目安
実際に動かす際のGPUメモリの目安をまとめておきます。
| モデル | パラメータ | 推奨VRAM |
|---|---|---|
| ViT-B/16 | 80M | 4GB以上 |
| ViT-L/16 | 300M | 8GB以上 |
| ViT-g/16 | 1B | 16GB以上 |
| ViT-G/16 | 2B | 24GB以上 |
ColabやKaggleの無料GPU(T4: 16GB)ならViT-Lまで快適に動きます。ViT-G以上はA100などのハイエンドGPUが必要です。