LeRobot documentation

OpenGalaxea G0.5

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

and get access to the augmented documentation experience

to get started

OpenGalaxea G0.5

G0.5는 하나의 스트림에서 embodied reasoning과 동작을 생성할 수 있는 Qwen3.5-2B vision-language-action 모델입니다. LeRobot은 동작 단계를 System 1로, 선택적인 네이티브 chain-of-thought 단계를 System 2로 노출합니다. 이들은 별개의 모델이 아닙니다. 런타임은 하나의 추론 호출로 두 가지를 모두 가져오며, 동작은 reasoning에 조건부적으로 연결됩니다.

모델 개요

Transformers에는 네이티브 멀티모달 Qwen3.5 백본, 비전 타워, 프로세서가 포함되어 있습니다. 그러나 G0.5는 표준 Qwen3_5ForConditionalGeneration 체크포인트가 아닙니다. 고유감각/액션 경로, 액션 전문가, 플로우 매칭 헤드, ActionCodec, 통합 CoT/액션 디코딩을 추가합니다. LeRobot은 이러한 G0.5 구성 요소를 네이티브로 구현하며, OpenGalaxea Python 패키지, Hydra, OmegaConf 없이 변환된 체크포인트를 로드합니다.

LeRobot 통합의 범위

  • policy.type=g05의 표준 구성 및 Hub 체크포인트 로딩.
  • 네이티브 연속 흐름 및 이산 ActionCodec 액션 생성.
  • 선택 사항인 동일한 패스에서의 System 2 추론 및 액션 생성.
  • 직렬화 가능한 카메라, 상태, 액션, 정규화, 프롬프트 프로세서.
  • lerobot-train을 통한 파인튜닝과 lerobot-rollout을 통한 추론.
  • LIBERO, RoboTwin, SO-101 및 R1 Lite/Pro 체크포인트 계약이 공개되었습니다.

G0.5 통합 코드(src/lerobot/policies/g05)와 체크포인트는 G0.5 Community License를 사용하며, 비상업적 제한이 포함됩니다. Apache-2.0은 해당 자료에 적용되지 않습니다. 변환된 체크포인트에는 LICENSE와 NOTICE가 함께 제공되며, Galaxea의 공식 승인을 받지 않았습니다.

체크포인트

입력 및 출력 계약

체크포인트발행된 액션 경로Raw → 정책 레이아웃카메라예측실행됨정규화
g05_base명시적으로 선택된 AR ActionCodec 또는 flowR1 Lite/Pro 관절 → 27D 전신 레이아웃머리 + 양 손목, 6단계 히스토리3216단계별 z-점수
g05_libero연속 흐름오른쪽 EEF 6 + 그리퍼 1 → 20D 그룹 레이아웃외부, 오른쪽 손목3210단계별 q01/q99
g05_robotwin20연속 흐름두 팔 6+그리퍼 → 20D 그룹 레이아웃높음, 왼손목, 오른손목328단계별 q01/q99
g05_so101Flow 또는 AR ActionCodec + 네이티브 CoTright arm joints 6 → 20D 그룹 레이아웃외부, 선택적 왼쪽 + 오른쪽 손목3216단계별 q01/q99

각 변환된 체크포인트에는 해결된 모델 및 프로세서 구성, ActionCodec 메타데이터, 통계, 정확한 프롬프트 템플릿, 라이선스가 저장됩니다.

변환된 체크포인트

리포지토리계약
lerobot/g05_base27D 기반, R1 Lite 프로세서
lerobot/g05_libero20D LIBERO
lerobot/g05_robotwin2020D RoboTwin
lerobot/g05_so10120D SO-101 (so100 프로필)

이 체크포인트는 비상업용 G0.5 Community License 하에 공개됩니다. 자세한 내용은 License를 참조하세요.

lerobot/g05_base는 해당 27D 모델 가중치, 두 개의 action head, ActionCodec 토크나이저, 그리고 공개된 6단계 R1 Lite 프로세서/통계 계약을 제공합니다.

설치 요구 사항

G0.5 Transformers 종속성을 사용하여 LeRobot을 설치합니다:

uv sync --extra g05 --extra test

GPU에서 학습 및 추론을 위해 flash-linear-attention을 설치하세요. Qwen3.5의 대부분의 decoder 레이어는 Gated DeltaNet linear attention을 사용하며, 이 라이브러리가 없으면 Transformers는 훨씬 느린 PyTorch 커널로 폴백하여 “The fast path is not available”을 기록합니다. 순수 Triton으로 작성되어 빌드 없이 설치할 수 있습니다:

uv pip install flash-linear-attention

이를 사용하면 학습 속도가 약 1.5배 빨라지고 메모리 사용량이 줄며, 손실 값은 동일합니다. Triton이 커널을 컴파일하는 동안 첫 번째 단계에 약 20초가 더 소요됩니다.

SO-100과 SO-101은 공개된 so100 embodiment 토큰과 6관절 우측 팔 계약을 공유합니다. 좌측 손목 카메라가 없는 경우 zero-padding으로 처리됩니다.

사용

대상 embodiment와 일치하는 checkpoint를 표준 --policy.path 옵션으로 로드합니다. 패키징된 구성은 올바른 action head, 카메라 순서, 차원, 정규화, 실행 horizon을 선택합니다.

인터랙티브 시스템 1 및 시스템 2 런타임

G0.5는 하나의 추론 스트림에서 추론과 행동을 출력합니다: 사고의 사슬은 청과 동일한 패스에서 생성되며, 행동은 이를 조건으로 합니다.

policy.runtime_system은 체크포인트에서 경로를 선택합니다. System 1은 선택된 ActionCodec 또는 flow chunk를 직접 실행하며 CoT를 생성하지 않습니다:

lerobot-rollout \
  --policy.path=lerobot/g05_so101 \
  --policy.runtime_system=system1 \
  --task="pick up the cup" \
  --fps=30

System 2는 패키징된 체크포인트 메타데이터에 predict_cot=true가 있을 때만 사용할 수 있습니다. 그 체인 오브 스코트는 정책의 예측으로 반환됩니다: predict_action_chunk는 PolicyOutput 배치로 반환하며, 이 배치에는 "action" 아래에 청크가, "prediction" 아래에는 각 환경의 CoT 서브태스크(language["subtask"], 환경당 하나의 문자열)와 policy.config.bbox_camera에 대한 [0, 1] xyxy 비율로 표현된 박스(boxes[camera], 환경당 하나의 답변)가 포함됩니다. select_action는 각 청크의 첫 번째 동작과 함께 이를 반환합니다. 모델은 카메라를 지정하지 않습니다: BBox 대상은 모두 학습 중에 해당 카메라에 그려집니다. System 1은 CoT를 생성하지 않고 동작만 반환합니다.

output = policy.predict_action_chunk(batch)
print(output["prediction"])
# {"language": {"subtask": ["grasp the cup"]},
#  "boxes": {"observation.images.top": [{"detections": [{"label": "cup", "bbox": [...]}]}]}}

--display_data=true를 사용하면 lerobot-rollout은 하위 작업을 표시하고 Rerun 또는 Foxglove에서 bbox 카메라 위에 박스를 그립니다.

stdin에서 세션 구동

--interactive=true는 하드웨어와 정책이 연결된 채로 온 상태를 유지하면서 채팅 스타일 명령어로 롤아웃을 진행합니다. 로봇은 /start를 입력할 때까지 움직이지 않으므로, 물리적 SO-101을 안전하게 구동하는 방법입니다. 먼저 카메라 인덱스와 암 포트를 확인한 후 시작하세요.

lerobot-rollout \
  --interactive=true \
  --policy.path=lerobot/g05_so101 \
  --policy.device=cuda \
  --robot.type=so101_follower \
  --robot.port=/dev/ttyACM0 \
  --robot.id=my_follower \
  --robot.cameras='{exterior: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30}, wrist_right: {type: opencv, index_or_path: 2, width: 640, height: 480, fps: 30}}' \
  --task="pick up the cube" \
  --fps=30
명령효과
/start정책 제어 루프를 시작(또는 재시작)합니다
/subtask <text>정책이 따르는 지시를 설정합니다
/vqa <text>G0.5에서 지원되지 않음(아래 참조)
/autosteer <goal>\|off고급 목표를 향해 정책이 자체적으로 하위 작업을 선택하도록 합니다
/reset움직임을 중지하고, 초기 위치로 복귀하며, 작업을 복원합니다
/stop세션을 종료하고 서버를 종료합니다
/help명령어 목록을 표시합니다

/autosteer는 predict_cot=true가 포함된 체크포인트와 라이브 관측에서 얻은 답변이 필요하므로, /start가 실행 중일 때까지 거부됩니다. 선택한 하위 작업을 Autosteer subtask:로 출력하며, --autosteer_interval_s는 두 번의 재계획 쿼리 사이에 경과하는 움직임의 초수를 설정합니다.

G0.5가 학습된 방식에 맞춰 작업이 제시되는 형태에 맞는 런타임을 선택하세요:

  • 고수준 작업, 스티어링 없음: System 2를 유지합니다. 각 청크는 작업에서 현재 하위 작업을 예측한 후, 해당 하위 작업에 대해 행동을 수행합니다.
  • /subtask 또는 /autosteer: --policy.runtime_system=system1를 사용하세요. subtask가 task가 되고 policy가 해당 task에 직접 작용합니다. /autosteer는 여전히 goal에서 각 subtask를 System 2 쿼리로 계획합니다. subtask-as-task에 System 2를 적용하면 subtask의 subtask를 계획하게 되며, 이는 모델이 학습하지 않은 프롬프트입니다.

사고 체인 선택

--policy.runtime_cot_fields selects which of G0.5’s trained chain-of-thought formats System 2 generates before each chunk. The action attends to the whole chain of thought, so whatever it contains conditions the action.

runtime_cot_fields학습된 명령생성된 사고 체인
["subtask"] (기본값)predict subtask하위 작업
["bbox", "subtask"]predict bbox, subtask and actionboxes, 그런 다음 하위 작업

예를 들어, ["bbox", "subtask"]은 다음을 생성합니다:

BBox: cube <loc0397><loc0717><loc0625><loc0895>|Subtask: pick up the blue cube
  • ["subtask"]은 청크당 생성하는 토큰 수가 가장 적어 더 빠른 선택지입니다.
  • ["bbox", "subtask"]은 먼저 관련 객체를 찾아내어 장면 내에서 서브태스크와 액션을 기반으로 합니다. 각 박스는 라벨 뒤에 y1, x1, y2, x2 순서의 네 개의 위치 토큰이 따라오며, <locNNNN> 토큰은 이미지 크기에 대한 좌표의 비율을 1024로 곱한 값입니다. 박스는 BBox 카메라(--policy.cot_bbox_camera, 기본적으로 첫 번째 비어 있지 않은 카메라 슬롯)를 가리킵니다.

lerobot/g05_base와 lerobot/g05_so101는 두 가지 형식으로 모두 학습되었습니다. LIBERO와 RoboTwin 체크포인트에는 predict_cot=false가 설정되어 있으며 System 2가 없습니다. 파인튜닝은 BBox 카메라에 기반한 vqa 어노테이션이 포함된 데이터셋을 사용해야만 유용한 박스를 생성할 수 있습니다(데이터 요구 사항 참조).

/vqa가 지원되지 않는 이유

G0.5의 텍스트 헤드는 범용 비전-언어 어시스턴트가 아닙니다. 위와 같은 chain-of-thought 형식만 출력하도록, 해당 고정 지시문 중 하나 이후에 학습되었으며, 프롬프트에는 자유 형식 질문을 위한 슬롯이 없습니다. /vqa 질문은 작업(task)의 위치만 차지할 수 있으므로, 모델은 답변 대신 해당 “작업”에 대한 하위 작업(및 박스)을 반환합니다. /autosteer가 작동하는 이유는 그 목표가 작업이기 때문이며, 이는 해당 슬롯이 기대하는 내용입니다.

인터랙티브 모드에서 --duration은 전체 세션이 아니라 각 /start 세그먼트의 범위를 제한합니다.

데이터 요구 사항

데이터셋은 선택한 체크포인트 계약과 일치하는 상태, 액션, 카메라, 작업 특성을 노출해야 합니다. 카메라 이름은 자유롭게 지정할 수 있습니다: --policy.camera_order는 체크포인트의 각 이미지 슬롯에 데이터를 공급하는 데이터셋의 카메라를 나열하며, null은 슬롯을 비워 둡니다(제로로 채움). SO-101의 경우 슬롯은 exterior, left wrist, right wrist이며, left wrist는 선택 사항입니다.

Training System 2 언어 타겟을 추가로 사용하려면 체크포인트의 주석이 달린 CoT 필드가 필요합니다. 일반적인 LeRobot 기록은 동작 감독(action supervision)을 제공하지만 CoT 라벨을 합성하지는 않습니다. annotation pipeline에 설명된 대로 lerobot-annotate를 사용하여 subtask 및 근거가 있는(grounded) vqa 언어 열을 생성하세요.

학습

G0.5는 LeRobot의 학습 인터페이스를 네이티브로 구현합니다: forward는 어시스턴트 토크인의 교차 엔트로피와 플로우 매칭 손실을 계산하고, 정책은 VLM/비전/액션 옵티마이저 그룹을 노출하며, 체크포인트는 일반적인 LeRobot 스크립트로 저장, 재개, 로드할 수 있습니다. 목표 함수는 패키징된 ar.ce_weight, 선택적 ar.ce_z_loss_scale, fm.fm_weight를 유지하며, 오토리그레시브 손실은 CoT 텍스트와 ActionCodec 타깃을 함께 커버합니다. 예를 들어, LeRobot 데이터셋에서 SO-101 체크포인트를 파인튜닝하려면:

학습 명령어 예시

export HF_USER=your_hf_username

lerobot-train \
  --dataset.repo_id=${HF_USER}/my_so101_dataset_annotated \
  --policy.path=lerobot/g05_so101 \
  --policy.device=cuda \
  --policy.use_language_recipe=true \
  --policy.cot_bbox_camera=observation.images.exterior \
  --policy.repo_id=${HF_USER}/g05_so101_finetuned \
  --policy.private=true \
  --output_dir=outputs/train/g05_so101 \
  --job_name=g05_so101 \
  --batch_size=16 \
  --steps=10000 \
  --save_freq=1000

내장 레시피는 업스트림 학습 믹스와 유사하게 세 가지 유형의 샘플을 혼합합니다:

  • 4/6 체인 오브 스로쓰: 작업, 해당 타임스탬프에서 활성화된 subtask 및 근거 기반 vqa 어노테이션에 대한 BBox 및/또는 Subtask 대상, 그리고 동작 순서입니다.
  • 1/6 subtask as task: 활성 subtask가 지시사항이 되어 바로 액션으로 전환됩니다. /subtask 또는 /autosteer가 subtask를 설정한 후 정책이 보는 내용입니다.
  • 1/6 plain: 작업을 바로 행동으로 전환하는 System 1 프롬프트.

타임스탬프에 주석이 없는 chain-of-thought 샘플은 일반 프롬프트를 학습시킵니다.

annotation pipeline에 설명된 대로 lerobot-annotate를 사용하여 필요한 subtask 및 grounded vqa 언어 컬럼을 생성합니다. 내장 레시피는 BBox 카메라에 주석된 박스를 읽습니다: --policy.cot_bbox_camera이며, 기본값은 첫 번째 비어 있지 않은 카메라 슬롯입니다. 박스 좌표는 lerobot-annotate가 저장하는 형식인 이미지 너비와 높이의 [0, 1] 비율이어야 하며, 픽셀 박스는 거부됩니다. 다른 레시피로 학습하려면 --policy.recipe_path=/path/to/recipe.yaml을 통해 명시적인 외부 YAML을 전달하십시오: 설정이 빌드될 때 policy.recipe에 한 번 읽혀지므로, 나중에 파일이 변경되더라도 저장된 체크포인트는 학습에 사용된 레시피를 유지합니다.

다른 로봇에서 기본 체크포인트를 미세 조정

lerobot/g05_base는 이전에 보지 못한 로봇에서 fine-tune할 수 있습니다. --policy.embodiment로 로봇 이름을 지정합니다. 예를 들어 데이터셋의 robot_type를 사용할 수 있으며, 이 이름은 프롬프트의 Embodiment: 텍스트가 됩니다. 이 플래그는 필수입니다. 지정하지 않으면 체크포인트는 자체 embodiment와 slot table을 유지합니다. 관절은 데이터셋의 관절 이름에 따라 base layout에 배치됩니다. left_ 접두사가 있는 관절은 왼쪽 팔에, 나머지는 오른쪽 팔에 배치됩니다. 이름에 gripper가 포함된 관절은 해당 팔의 gripper slot을 차지하고, 나머지 관절은 순서대로 9개의 control slot을 채웁니다. 따라서 gripper가 있는 5-joint 팔은 right-arm slot 10-14와 right gripper를 채우며, 7-DoF 팔은 10-16과 gripper를 채웁니다. --policy.state_slots와 --policy.action_slots를 설정하여 관절을 명시적으로 배치할 수 있습니다. 해석된 slot은 fine-tuned checkpoint와 함께 저장됩니다.

아래 예시는 front 카메라와 wrist 카메라로 기록된 단일 암 로봇으로 fine-tuning을 수행합니다. base checkpoint의 이미지 슬롯은 head view, 왼쪽 wrist, 오른쪽 wrist입니다. 단일 암이 오른쪽에 위치하므로, 해당 wrist 카메라는 오른쪽 wrist 슬롯을 차지하고 왼쪽 wrist 슬롯은 비어 있습니다. List-valued 플래그는 따옴표가 붙은 JSON을 사용합니다.

lerobot-train \
  --dataset.repo_id=${HF_USER}/my_robot_dataset_annotated \
  --policy.path=lerobot/g05_base \
  --policy.embodiment=my_robot \
  --policy.camera_order='["observation.images.front", null, "observation.images.wrist"]' \
  --policy.n_obs_steps=1 \
  --policy.use_language_recipe=true \
  --policy.device=cuda \
  --policy.repo_id=${HF_USER}/g05_my_robot_finetuned \
  --output_dir=outputs/train/g05_my_robot \
  --job_name=g05_my_robot \
  --batch_size=16 \
  --steps=10000

--policy.n_obs_steps=1은 업스트림 파인튜닝과 마찬가지로 카메라당 프레임 하나를 공급합니다. 기본 체크포인트의 6단계 히스토리는 샘플당 이미지 수를 6배로 증가시킵니다.

Normalization은 데이터셋 자체의 통계량을 사용합니다(기본 체크포인트의 경우 z-score; q01/q99의 경우 --policy.normalization_mapping='{"VISUAL": "IDENTITY", "STATE": "QUANTILES", "ACTION": "QUANTILES"}'를 전달합니다). 그리퍼는 절대값으로 유지되며(기본 체크포인트에서 relative_exclude_joints=["gripper"]), 팔 관절은 델타로 학습됩니다. BBox 대상은 observation.images.front에 주석된 grounded vqa 답변에서 가져오며, 이는 비어 있지 않은 첫 번째 카메라 슬롯입니다.

SO-101 레시피는 8e-5의 AdamW와 1,000개의 warmup steps를 사용합니다. 패키지로 제공되는 LIBERO 및 RoboTwin 구성은 각각 1,000개와 500개의 warmup steps를 사용하여 공개된 1e-5 레시피를 사용합니다. 모든 프로필은 G0.5의 parameter groups와 learning-rate multipliers를 유지합니다. 다른 최적화 레시피로 학습하려면 이를 오버라이드하세요:

--policy.optimizer_lr=2e-5 \
--policy.optimizer_backbone_lr_multiplier=0.5 \
--policy.optimizer_vision_lr_multiplier=0.1

LeRobot의 표준 체크포인트로 저장된 실행을 재개합니다:

lerobot-train \
  --config_path=outputs/train/g05_so101/checkpoints/last/pretrained_model/train_config.json \
  --resume=true

주요 구성 매개변수

매개변수설명
policy.embodiment프롬프트에 작성된 로봇 이름; 릴리스된 슬롯 테이블을 선택
policy.state_slots, policy.action_slots각 원시 상태/행동 값의 명시적 정책-레이아웃 슬롯
policy.camera_order체크포인트별 이미지 슬롯에 대한 Dataset 카메라; null은 비워 둡니다
policy.action_head체크포인트의 flow 또는 actioncodec 액션 경로를 사용합니다
policy.runtime_system직접적인 System 1 또는 통합된 System 2 추론 및 작업을 선택합니다
policy.runtime_cot_fieldsSystem 2 체인 오브 스로트: ["subtask"] 또는 ["bbox", "subtask"]
policy.dtypebfloat16(CUDA에서 혼합 정밀도 지원) 또는 float32
policy.chunk_size각 청크에서 예측되는 동작의 수
policy.n_action_steps재계획 전에 실행된 작업의 수
policy.use_language_recipeG0.5의 내장 언어 감독 레시피 활성화
policy.recipe_pathpolicy.recipe에 Recipe YAML을 한 번만 읽습니다(저장되지 않음)
policy.optimizer_backbone_lr_multiplier언어 백본에 대한 학습률 배율
policy.optimizer_vision_lr_multiplier비전 타워의 학습률 배율

액션 헤드, 차원, 호라이즌, 프로세서 모드, 정규화는 체크포인트에서 가져오며, 호환되지 않는 오버라이드는 로딩 중에 거부됩니다.

평가

LIBERO 시뮬레이터가 설치된 상태에서, LIBERO 체크포인트를 해당 카메라 이름과 상대 제어(relative control)와 함께 평가합니다:

lerobot-eval \
  --policy.path=lerobot/g05_libero \
  --policy.device=cuda \
  --env.type=libero \
  --env.task=libero_10 \
  --env.control_mode=relative \
  --env.observation_height=512 \
  --env.observation_width=512 \
  '--env.camera_name_mapping={"agentview_image": "image", "robot0_eye_in_hand_image": "wrist_image"}' \
  --eval.batch_size=1 \
  --eval.n_episodes=5 \
  --seed=0 \
  --output_dir=outputs/g05-libero-lerobot-eval

참고

라이선스

src/lerobot/policies/g05 아래에 있는 G0.5 통합 코드는 Galaxea의 구현에서 가져온 것이며, 체크포인트 가중치와 마찬가지로 G0.5 Community License 하에 라이선스가 부여되어 LeRobot의 Apache-2.0이 아닙니다. 체크포인트를 다운로드하거나 사용하기 전에 해당 라이선스를 검토하고 수락하십시오.

Fine-tune은 G0.5의 파생 저작물입니다. 재배포할 경우, 해당 fine-tune이 파생된 체크포인트의 LICENSE 및 NOTICE 파일을 포함해야 합니다. LeRobot은 이 파일들을 자동으로 복사하지 않지만, 생성된 모델 카드에는 라이선스가 명시되어 있습니다.

Update on GitHub