LeRobot documentation

VLA-JEPA

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.6.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

VLA-JEPA

이것은 VLA-JEPA의 LeRobot 포트입니다. VLA-JEPA는 Qwen3-VL 언어 백본, 자기지도 학습 비디오 월드 모델(V-JEPA2), flow-matching DiT 액션 헤드를 결합한 Vision-Language-Action 모델입니다.


아키텍처 개요

VLA-JEPA에는 세 가지 주요 구성 요소가 있습니다:

컴포넌트모듈역할
Qwen3-VL 백본Qwen3VLInterface이미지와 언어 지시문을 컨텍스트 토큰으로 융합
DiT-B 액션 헤드VLAJEPAActionHead액션 청크에 대한 Flow-matching diffusion
V-JEPA2 월드 모델ActionConditionedVideoPredictor자기지도형 비디오 예측 손실(학습 전용)

데이터 흐름

학습:

  1. num_video_frames 프레임의 비디오 클립은 V-JEPA2에 의해 프레임별 패치 토큰으로 인코딩됩니다.
  2. Qwen3-VL 백본은 다중 뷰 이미지와 작업 지시문을 처리하여, 월드 모델 조건화에 사용되는 특수 동작 토큰과 embodied 토큰을 포함하는 컨텍스트 토큰 시퀀스를 생성합니다.
  3. 액션 헤드는 해당 컨텍스트 토큰을 크로스 어텐션의 키/값으로 받아 flow matching을 통해 노이즈가 제거된 액션 청크를 예측합니다.
  4. world model predictor는 Qwen에서 추출된 action token을 사용하여 미래의 V-JEPA2 프레임 임베딩을 예측합니다. 해당 예측에 대한 회귀 손실이 action 손실에 추가됩니다.

추론: Qwen과 액션 헤드만 사용됩니다. 추론 시에는 월드 모델이 필요하지 않습니다.

액션 헤드 세부 정보

action_model_type를 통해 사용할 수 있는 프리셋:

프리셋헤드Head dim
DiT-B1264
DiT-L3248

프리셋은 주의(attention) 기하 구조만 설정하며, 각 항목은 action_num_heads / action_attention_head_dim으로 재정의할 수 있습니다. 여기서 두 가지 폭이 도출됩니다:

  • DiT의 내부 폭은 heads x head_dim이며(DiT-B의 경우 768), 설정값이 아닌 파생 값입니다;
  • DiT의 출력 폭과 action-decoder 및 state-encoder MLP의 폭은 action_hidden_size(기본값 1024)입니다.

따라서 DiT-B는 768 폭의 transformer를 실행하여 1024로 투영합니다. 이 두 가지는 독립적입니다.

월드 모델 세부 정보

비디오 예측기는 ViT 스타일의 트랜스포머(ActionConditionedVideoPredictor)로 다음을 입력으로 받습니다:

  • 프레임 토큰: predictor_embed_dim으로 투영된 V-JEPA2 패치 임베딩
  • 액션 토큰: predictor_embed_dim으로 투영된 Qwen 액션 토큰 임베딩

블록 인과적(block-causal) 어텐션을 사용하여 각 시간 단계가 모든 이전 단계에 어텐션을 기울일 수 있습니다. 예측기의 입력 embed_dim은 num_views × video_encoder_hidden_size와 같습니다(예: 사전 학습된 체크포인트의 경우 2 views × 1024 = 2048).


사전학습된 체크포인트

LeRobot 조직에서 다음 세 개의 체크포인트를 직접 사용할 수 있습니다: lerobot/VLA-JEPA, ginwind/VLA-JEPA에서 변환되었습니다:

체크포인트데이터셋카메라월드 모델액션 차원
lerobot/VLA-JEPA-LIBEROLIBERO-102 (agentview + wrist)활성화됨7
lerobot/VLA-JEPA-PretrainDROID 1.0.12 (외부 왼쪽 뷰)활성화됨7
lerobot/VLA-JEPA-SimplerEnvOXE Bridge / RT-11 (2회 중복 표시)활성화됨7

모든 체크포인트는 언어 백본으로 Qwen/Qwen3-VL-2B-Instruct를 사용합니다.


구성

VLAJEPAConfig의 주요 매개변수:

매개변수기본값설명
chunk_size7추론 호출당 예측되는 액션 수
n_action_steps7재계획 전에 예측된 청크에서 실행된 단계
num_video_frames8월드 모델에 입력되는 비디오 클립 길이
enable_world_modelTrueV-JEPA2 예측기를 로드하고 학습할지 여부
world_model_loss_weight0.1JEPA 예측 손실의 액션 손실에 대한 가중치
causal_world_model_contextFalse세계 모델 컨텍스트를 인과적으로 인코딩하여(컨텍스트 위치마다 prefix-only V-JEPA2 패스 1회) 양방향 어텐션이 예측기 입력에 미래 프레임을 누출하지 못하도록 합니다. t_enc_ctx만큼의 추가 인코더 호출 비용이 발생합니다
num_inference_timesteps4행동 노이즈 제거를 위한 Euler 적분 단계
freeze_qwenFalseQwen3-VL 백본을 동결하고 액션 헤드만 학습합니다
reinit_modulesNone로드 시 무작위로 재초기화할 수 있는 주요 접두사(크로스 임보디먼트 전이에 대해 다른 임보디먼트에서 파인튜닝을 참조)
resize_images_toNone(height, width)는 Qwen3-VL 비전 타워에 입력되기 전에 모든 카메라 프레임이 리사이즈되는 크기입니다. None을 사용하면 네이티브 해상도가 유지되며, Qwen3-VL의 패치 수가 해상도에 따라 증가하므로 720x1280 카메라의 경우 GPU 메모리가 소진될 수 있습니다. 공개된 체크포인트는 [224, 224]를 사용합니다.
gripper_dim6액션 벡터에서 그리퍼 차원의 인덱스입니다. gripper_joint_names가 데이터셋의 액션 이름과 일치하는 경우 무시됩니다.
gripper_joint_names["gripper"]그리퍼를 식별하는 액션 차원 이름; 일치하는 인덱스가 gripper_dim보다 우선합니다
gripper_threshold0.5pre_snap_gripper_action와 binarize_gripper_action에서 사용되는 임계값입니다. binarize는 비정규화 이후에 실행되므로, 이 값은 그리퍼의 물리적 값과 비교됩니다.
pre_snap_gripper_actionFalseunnormalization 전에 gripper dim을 {0, 1}로 snap합니다. LIBERO 전용이며, 아래를 참조하세요
binarize_gripper_actionFalseunnormalization 후 gripper dim을 {-1, 1}로 이진화합니다. LIBERO 전용이며, 아래를 참조하세요
clip_normalized_actionsTrueACTION이 MIN_MAX를 사용하는 경우에만 적용되며, MEAN_STD에서는 1 sigma에서 잘리게 되므로 무시됩니다(경고와 함께). 비정규화하기 전에 정규화된 동작을 [-1, 1]로 클리핑합니다.
world_model_num_viewsNoneCamera world-model predictor가 구축된 대상입니다. 체크포인트 형식에 고정되어 있습니다. None은 공개된 체크포인트에 인코딩된 jepa_tubelet_size로 대체됩니다.

pre_snap_gripper_action와 binarize_gripper_action은 starVLA LIBERO eval 루프의 이식된 코드이며, LIBERO의 액션 규약에 대해서만 정확합니다. pre_snap은 normalized 공간에 {0, 1}을 기록하고, unnormalizer는 해당 값을 중간점과 최대값으로 매핑하며, binarize는 그런 다음 해당 physical 값을 gripper_threshold(0.5)와 비교합니다. 그립퍼가 도, mm 또는 [0, 100] 단위로 측정되는 경우, 두 값 모두 임계값을 초과하여 명령된 그립퍼가 상수가 됩니다. 이 때문에 기본값은 False입니다. LIBERO 스타일의 설정에서만 활성화하고, 활성화할 경우 gripper_threshold를 그립퍼 자체의 단위로 설정하십시오. 데이터셋 통계에서 범위가 작동할 수 없음을 나타내면 프로세서 팩토리가 경고를 표시합니다.


학습

학습 단계 수는 데이터셋 크기와 컴퓨트 예산에 따라 달라질 수 있습니다. 원 논문에서는 ssv2 + droid를 결합하여 50k 단계로 사전 학습한 후, LIBERO를 위해 추가 30k 단계를 수행했지만, 제공된 사전 학습 체크포인트에서 파인튜닝을 수행할 경우 더 적은 단계로도 좋은 성능을 얻을 수 있습니다.

Full training from scratch

lerobot-train \
  --policy.type=vla_jepa \
  --policy.repo_id=your_org/your_repo \
  --dataset.repo_id=your_org/your_dataset

사전 학습된 체크포인트에서 파인튜닝

lerobot-train \
  --policy.path=lerobot/VLA-JEPA-Pretrain \
  --policy.repo_id=your_org/your_repo \
  --dataset.repo_id=your_org/your_dataset

Qwen 백본을 동결하고 액션 헤드만 학습하려면 policy.freeze_qwen=True를 설정하세요:

lerobot-train \
  --policy.path=lerobot/VLA-JEPA-Pretrain \
  --policy.repo_id=your_org/your_repo \
  --policy.freeze_qwen=true \
  --dataset.repo_id=your_org/your_dataset

다른 embodiment에 대한 Fine-tuning

대상 로봇의 동작 또는 상태 차원이 사전 학습된 체크포인트와 다르면, 동작 헤드의 입력/출력 투영 레이어의 형상이 일치하지 않아 직접 로드할 수 없습니다. reinit_modules는 형상 불일치가 허용되는 키 접두사를 나열할 수 있게 하며, 해당 레이어는 무작위로 재초기화되고 나머지 모든 가중치는 체크포인트에서 재사용됩니다. 나열된 접두사 범위를 벗어난 형상 불일치는 오류를 발생시킵니다.

action_dim과 state_dim에 의존하는 레이어는 다음과 같습니다:

레이어주요 접두사
액션 인코더 (action_dim → inner_dim)model.action_model.action_encoder
액션 디코더 (hidden_size → action_dim)model.action_model.action_decoder
상태 인코더 (state_dim → inner_dim)model.action_model.state_encoder
lerobot-train \
  --policy.path=lerobot/VLA-JEPA-Pretrain \
  --policy.repo_id=your_org/your_repo \
  --policy.freeze_qwen=true \
  --policy.reinit_modules='["model.action_model.action_encoder", "model.action_model.action_decoder", "model.action_model.state_encoder"]' \
  --dataset.repo_id=your_org/your_dataset

로봇에 고유 감각 상태(proprioceptive state)가 없으면 목록에서 model.action_model.state_encoder를 생략하세요.

LIBERO 결과 재현

LIBERO에서 학습: Pretrain 체크포인트에서 학습을 시작하고 LIBERO 데이터셋에서 30k 스텝 동안 학습합니다. 원 논문에서는 8개의 GPU에서 배치 크기가 32로 학습한다고 언급되어 있으며, 이는 전역 배치 크기가 256임을 의미합니다.

lerobot-train \
  --policy.path=lerobot/VLA-JEPA-Pretrain \
  --policy.repo_id=your_org/your_repo \
  --dataset.repo_id=HuggingFaceVLA/libero \
  --steps=30000

학습된 LIBERO-10 체크포인트 평가:

lerobot-eval \
  --policy.path=lerobot/VLA-JEPA-LIBERO \
  --env.type=libero \
  --env.task=libero_spatial,libero_object,libero_goal,libero_10 \
  --eval.n_episodes=10 \
  --eval.batch_size=5

일부 작업만 평가하려면:

lerobot-eval \
  --policy.path=lerobot/VLA-JEPA-LIBERO \
  --env.type=libero \
  --env.task=libero_10 \
  --env.task_ids='[0,1,2]' \
  --eval.n_episodes=10 \
  --eval.batch_size=5

예상 결과:

Suite에피소드성공 사례성공률
libero_spatial1009395.0%
libero_object100100100.0%
libero_goal1009898.0%
libero_101009693.0%
전체40038796.5%

카메라 수가 다른 데이터셋으로 Fine-tuning

사전 학습된 월드 모델 예측기는 embed_dim = world_model_num_views × 1024, 즉 두 개의 카메라 뷰로 학습되었습니다.

이 뷰 카운트는 temporal tubelet size를 지정하는 JEPA 인코더의 jepa_tubelet_size에서 읽혔습니다. 이제 해당 필드는 world_model_num_views입니다. None으로 두면 jepa_tubelet_size로 폴백되어 공개된 체크포인트가 변경 없이 로드됩니다.

기본 동작 — 패딩/트림 보기 (조치 불필요)

VLA-JEPA-Pretrain에서 파인튜닝할 때 모델은 world_model_num_views에 맞춰 월드 모델에 입력되는 뷰의 수를 자동으로 조정합니다:

  • 단일 뷰 데이터셋(예: BridgeV2): 단일 뷰 잠재 변수를 복제하여 두 뷰 월드 모델 입력을 생성합니다. 이를 통해 가중치 불일치 없이 JEPA 자기 감독 신호를 유지합니다.
  • >2개의 뷰를 가진 데이터셋(예: 3개의 뷰를 가진 DROID): 모든 뷰는 더 풍부한 컨텍스트를 위해 Qwen 백본에 전달되지만, 월드 모델에는 구성된 뷰 순서에 따라 첫 번째 world_model_num_views개의 뷰(손목 뷰 1개 + 서드 퍼슨 뷰 1개)만 사용됩니다.

옵션 1 — 월드 모델 비활성화

enable_world_model=False를 설정하면 JEPA 손실을 완전히 건너뜁니다. Qwen 백본과 액션 헤드만 로드되고 학습됩니다. 이는 좋은 액션 성능을 위해 충분합니다.

lerobot-train \
  --policy.path=lerobot/VLA-JEPA-Pretrain \
  --policy.enable_world_model=false \
  --policy.repo_id=your_org/your_repo \
  --dataset.repo_id=your_org/single_camera_dataset

옵션 2 — 예측기 입력 투영 재초기화

world_model_num_views를 2가 아닌 다른 값으로 변경하려면, strict=False로 체크포인트를 로드하고 새로운 embed_dim에 맞춰 model.video_predictor.predictor_embed를 다시 초기화해야 합니다. 나머지 예측기 블록 가중치(attention, MLP, norm, output projection)는 카메라 수와 무관하므로 사전 학습된 체크포인트에서 재사용할 수 있습니다.


인용

@misc{sun2026vlajepaenhancingvisionlanguageactionmodel,
  title         = {VLA-JEPA: Enhancing Vision-Language-Action Model with Latent World Model},
  author        = {Jingwen Sun and Wenyao Zhang and Zekun Qi and Shaojie Ren and Zezhi Liu and Hanxin Zhu and Guangzhong Sun and Xin Jin and Zhibo Chen},
  year          = {2026},
  eprint        = {2602.10098},
  archivePrefix = {arXiv},
  primaryClass  = {cs.RO},
  url           = {https://arxiv.org/abs/2602.10098},
}

라이선스

가중치는 원래 ginwind/VLA-JEPA 저장소의 라이선스 조항(Apache 2.0 License)에 따라 배포됩니다. LeRobot 통합 코드는 Apache 2.0 License를 따릅니다.

Update on GitHub