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.6.1).
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 là một mô hình vision-language-action Qwen3.5-2B có khả năng tạo ra suy luận và hành động mang tính thân thể (embodied) trong một luồng duy nhất. LeRobot phơi bày (expose) giai đoạn hành động dưới dạng System 1 và giai đoạn chain-of-thought bản chọn (optional) dưới dạng System 2. Chúng không phải là các mô hình riêng biệt: runtime thu được cả hai từ một lần gọi suy luận (inference call), và hành động vẫn được điều kiện hóa (conditioned) dựa trên suy luận.

Tổng quan về Mô hình

Transformers bao gồm backbone đa phương thức Qwen3.5 bản địa, vision tower và processor. Tuy nhiên, G0.5 không phải là checkpoint Qwen3_5ForConditionalGeneration tiêu chuẩn: nó bổ sung đường dẫn proprioception/action, action expert, flow-matching head, ActionCodec và giải mã CoT/action thống nhất. LeRobot triển khai các thành phần G0.5 đó một cách bản địa và nạp các checkpoint đã chuyển đổi mà không cần gói Python OpenGalaxea, Hydra hay OmegaConf.

Những gì Tích hợp LeRobot Bao Gồm

  • Cấu hình policy.type=g05 chuẩn và tải checkpoint từ Hub.
  • Tạo hành động ActionCodec liên tục và rời rạc bản địa.
  • Tùy chọn suy luận và tạo hành động System 2 trong cùng một lượt.
  • Bộ xử lý camera, trạng thái, hành động, chuẩn hóa và prompt có thể xuất chuỗi.
  • Fine-tuning thông qua lerobot-train và suy luận thông qua lerobot-rollout.
  • LIBERO, RoboTwin, SO-101 và các hợp đồng checkpoint R1 Lite/Pro đã được phát hành.

Mã tích hợp G0.5 (src/lerobot/policies/g05) và các checkpoint sử dụng G0.5 Community License, bao gồm các hạn chế phi thương mại; Apache-2.0 không áp dụng cho các tài liệu đó. Các checkpoint đã chuyển đổi đi kèm giấy phép đó dưới dạng LICENSE cùng với NOTICE của nó, và không được Galaxea bảo trợ.

Điểm kiểm tra

Hợp đồng đầu vào và đầu ra

CheckpointĐường dẫn hành động đã phát hànhGốc → bố cục chính sáchCameraDự đoánĐã thực thiChuẩn hóa
g05_baseAR ActionCodec hoặc flow được chọn một cách rõ ràngCác khớp R1 Lite/Pro → bố cục toàn thân 27Dđầu + cả hai cổ tay, lịch sử 6 bước3216z-score từng bước
g05_liberoLuồng liên tụcEEF phải 6 + kẹp 1 → bố cục nhóm 20Dbên ngoài, cổ tay phải3210từng bước q01/q99
g05_robotwin20Luồng liên tụchai cánh tay 6+gripper → bố cục nhóm 20Dcao, cổ tay trái, cổ tay phải328từng bước q01/q99
g05_so101Flow hoặc AR ActionCodec + CoT bản địacác khớp cánh tay phải 6 → bố cục nhóm 20Dbên ngoài, cổ tay trái + phải tùy chọn3216từng bước q01/q99

Mỗi checkpoint đã chuyển đổi lưu trữ cấu hình model và processor đã được giải quyết, metadata ActionCodec, thống kê, prompt template chính xác, và giấy phép.

Điểm kiểm tra đã chuyển đổi

Kho lưu trữHợp đồng
lerobot/g05_base27D base, bộ xử lý R1 Lite
lerobot/g05_libero20D LIBERO
lerobot/g05_robotwin2020D RoboTwin
lerobot/g05_so10120D SO-101 (hồ sơ so100)

Các checkpoint này được phát hành theo Giấy phép Cộng đồng G0.5 phi thương mại; xem Giấy phép.

lerobot/g05_base cung cấp trọng số mô hình 27D đó, cả hai đầu action, tokenizer ActionCodec, và hợp đồng thống kê/xử lý sáu bước R1 Lite đã phát hành.

Yêu cầu cài đặt

Cài đặt LeRobot với phụ thuộc G0.5 Transformers:

uv sync --extra g05 --extra test

Cài đặt flash-linear-attention để huấn luyện và suy luận trên GPU. Hầu hết các lớp decoder của Qwen3.5 là Gated DeltaNet linear attention, và nếu không có nó, Transformers sẽ chuyển sang một kernel PyTorch chậm hơn nhiều, ghi log “The fast path is not available”. Đây là Triton thuần túy, nên cài đặt không cần build:

uv pip install flash-linear-attention

Việc huấn luyện nhanh hơn khoảng 1,5 lần khi sử dụng nó và tiêu thụ ít bộ nhớ hơn, với các giá trị loss giống hệt nhau. Bước đầu tiên mất thêm khoảng 20 giây trong khi Triton biên dịch các kernel của nó.

SO-100 và SO-101 dùng chung token cấu hình so100 đã phát hành và hợp đồng cánh tay phải sáu khớp. Camera cổ tay trái bị thiếu sẽ được đệm bằng số không.

Cách sử dụng

Tải checkpoint khớp với target embodiment bằng tùy chọn chuẩn --policy.path. Cấu hình được đóng gói sẽ chọn đúng action head, thứ tự camera, kích thước, chuẩn hóa và execution horizon.

Hệ thống tương tác Runtime của System 1 và System 2

G0.5 phát ra suy luận và hành động từ một luồng suy luận duy nhất: chuỗi suy nghĩ được tạo ra trong cùng một lượt với khối dữ liệu, và hành động được điều kiện dựa trên nó.

policy.runtime_system trong checkpoint chọn đường dẫn. System 1 thực thi trực tiếp ActionCodec hoặc flow chunk được chọn và không tạo ra CoT:

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

System 2 chỉ khả dụng khi metadata của checkpoint đóng gói có predict_cot=true. Chuỗi suy luận (chain of thought) của nó được trả về như dự đoán của policy: predict_action_chunk trả về một batch PolicyOutput chứa chunk dưới "action" và, dưới "prediction", mỗi subtask CoT của từng env (language["subtask"], một chuỗi cho mỗi env) và các hộp (boxes) dưới dạng phân số xyxy trong khoảng [0, 1] trên policy.config.bbox_camera (boxes[camera], một câu trả lời cho mỗi env), và select_action trả về nó cùng với hành động đầu tiên của mỗi chunk. Mô hình không đặt tên cho camera: các mục tiêu BBox của nó đều được vẽ trên camera đó trong quá trình huấn luyện. System 1 không tạo CoT và chỉ trả về các hành động thuần.

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

Với --display_data=true, lerobot-rollout hiển thị subtask và vẽ các hộp bao quanh camera bbox trong Rerun hoặc Foxglove.

Điều khiển phiên từ stdin

--interactive=true điều khiển quá trình rollout bằng các lệnh dạng chat trong khi phần cứng và policy vẫn được kết nối và sẵn sàng. Robot sẽ không di chuyển cho đến khi bạn nhập /start, điều này giúp đây là cách an toàn để khởi động một SO-101 vật lý: hãy xác nhận các chỉ số camera và cổng cánh tay trước, sau đó mới bắt đầu.

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
LệnhHiệu ứng
/startbắt đầu (hoặc khởi động lại) vòng lặp kiểm soát chính sách
/subtask <text>đặt chỉ thị mà chính sách tuân theo
/vqa <text>không được hỗ trợ trên G0.5 (xem bên dưới)
/autosteer <goal>\|offđể chính sách tự chọn các tác vụ con hướng tới mục tiêu cấp cao
/resetdừng chuyển động, trở về vị trí ban đầu, khôi phục tác vụ
/stopkết thúc phiên và tắt
/helphiển thị danh sách lệnh

/autosteer cần một checkpoint có predict_cot=true và các câu trả lời từ quan sát trực tiếp, do đó lệnh này sẽ bị từ chối cho đến khi /start đang chạy. Nó in ra subtask được chọn dưới dạng Autosteer subtask:, và --autosteer_interval_s xác định số giây chuyển động trôi qua giữa hai truy vấn lập kế hoạch lại.

Chọn runtime phù hợp với cách bài toán được đưa ra, như G0.5 đã được huấn luyện:

  • Nhiệm vụ cấp cao, không có sự điều hướng: giữ nguyên Hệ thống 2. Mỗi khối dự đoán nhiệm vụ con hiện tại từ nhiệm vụ, sau đó thực hiện hành động trên nó.
  • /subtask hoặc /autosteer: sử dụng --policy.runtime_system=system1. Subtask trở thành task và policy tác động trực tiếp lên nó; /autosteer vẫn lập kế hoạch cho từng subtask từ goal bằng một truy vấn System 2. System 2 trên một subtask-as-task sẽ lập kế hoạch cho một subtask của subtask, một prompt mà nó không được huấn luyện.

Chọn chuỗi suy luận

--policy.runtime_cot_fields chọn định dạng chain-of-thought đã được huấn luyện của G0.5 mà System 2 sẽ tạo ra trước mỗi chunk. Hành động chú ý đến toàn bộ chuỗi suy nghĩ, do đó bất kỳ nội dung nào trong đó đều điều kiện hóa hành động.

runtime_cot_fieldsLệnh đã được huấn luyệnChuỗi suy luận được tạo ra
["subtask"] (mặc định)predict subtasknhiệm vụ con
["bbox", "subtask"]predict bbox, subtask and actioncác hộp, sau đó là

Ví dụ, ["bbox", "subtask"] tạo ra:

BBox: cube <loc0397><loc0717><loc0625><loc0895>|Subtask: pick up the blue cube
  • ["subtask"] tạo ra ít token nhất cho mỗi chunk, do đó là lựa chọn nhanh hơn.
  • ["bbox", "subtask"] xác định các đối tượng liên quan trước tiên, từ đó neo subtask và hành động vào trong cảnh. Mỗi box là một nhãn theo sau bởi bốn token vị trí theo thứ tự y1, x1, y2, x2; một token <locNNNN> là tọa độ tính bằng phân số của ảnh nhân với 1024. Các box tham chiếu đến camera BBox (--policy.cot_bbox_camera, mặc định là khe camera không rỗng đầu tiên).

lerobot/g05_base và lerobot/g05_so101 được huấn luyện trên cả hai định dạng; các checkpoint LIBERO và RoboTwin có predict_cot=false và không có System 2. Một lần fine-tune chỉ tạo ra các hộp hữu ích nếu tập dữ liệu của nó có chú thích vqa được ground trên camera BBox (xem Yêu cầu về dữ liệu).

Tại sao /vqa không được hỗ trợ

Đầu ra văn bản của G0.5 không phải là một trợ lý thị giác-ngôn ngữ tổng quát. Nó được huấn luyện để chỉ phát ra các định dạng suy luận (chain-of-thought) nêu trên, sau một trong các chỉ thị cố định của chúng, và prompt của nó không có chỗ cho một câu hỏi tự do. Một câu hỏi /vqa chỉ có thể thay thế cho phần tác vụ, do đó mô hình sẽ trả lời bằng một tác vụ con (và các hộp) cho “tác vụ” đó thay vì một câu trả lời. /autosteer hoạt động vì mục tiêu của nó là một tác vụ, đúng như những gì phần đó kỳ vọng.

Trong chế độ tương tác, --duration giới hạn mỗi phân đoạn /start thay vì toàn bộ phiên.

Yêu cầu về dữ liệu

Bộ dữ liệu phải cung cấp các đặc trưng trạng thái, hành động, camera và tác vụ khớp với hợp đồng của checkpoint đã chọn. Tên camera là tự do: --policy.camera_order liệt kê camera trong bộ dữ liệu cung cấp cho từng ô ảnh của checkpoint, và null để ô trống (điền bằng số 0). Đối với SO-101, các ô là exterior, left wrist và right wrist; left wrist là tùy chọn.

Huấn luyện các mục tiêu ngôn ngữ của System 2 ngoài ra còn yêu cầu các trường CoT được chú thích của checkpoint. Một bản ghi LeRobot thông thường cung cấp giám sát hành động nhưng không tổng hợp nhãn CoT. Hãy tạo các cột ngôn ngữ subtask và vqa có cơ sở bằng lerobot-annotate như đã mô tả trong đường ống chú thích.

Huấn luyện

G0.5 triển khai bề mặt huấn luyện của LeRobot một cách bản địa: forward tính toán entropy chéo của token trợ lý và tổn thất khớp dòng (flow-matching loss), chính sách (policy) phơi bày các nhóm optimizer cho VLM/thị giác/hành động, và checkpoint có thể được lưu, tiếp tục và nạp bởi các script LeRobot thông thường. Mục tiêu (objective) giữ nguyên ar.ce_weight được đóng gói, ar.ce_z_loss_scale tùy chọn, và fm.fm_weight; tổn thất tự hồi quy (autoregressive loss) bao phủ đồng thời mục tiêu văn bản CoT và ActionCodec. Ví dụ, tinh chỉnh (fine-tune) checkpoint SO-101 trên một tập dữ liệu LeRobot:

Ví dụ lệnh huấn luyện

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

Công thức tích hợp trộn lẫn ba loại mẫu, giống như hỗn hợp huấn luyện phía nguồn:

  • Chuỗi suy luận 4/6: nhiệm vụ, sau đó là mục tiêu BBox và/hoặc Subtask cho chú thích subtask và vqa có căn cứ đang hoạt động tại mốc thời gian đó, rồi đến các hành động.
  • 1/6 subtask as task: subtask đang hoạt động là chỉ thị, chuyển thẳng sang hành động. Đây là những gì policy nhìn thấy khi /subtask hoặc /autosteer đặt một subtask.
  • 1/6 thuần túy: nhiệm vụ trực tiếp đến hành động, prompt Hệ thống 1.

Một mẫu suy luận theo chuỗi không có chú thích tại mốc thời gian của nó sẽ huấn luyện prompt thông thường.

Tạo các cột ngôn ngữ subtask và vqa có cơ sở cần thiết bằng lerobot-annotate như đã mô tả trong quy trình chú thích. Công thức tích hợp đọc các hộp được chú thích trên camera BBox: --policy.cot_bbox_camera, mặc định là vị trí camera không rỗng đầu tiên. Tọa độ hộp phải là phân số [0, 1] của chiều rộng và chiều cao ảnh, đây là cách lerobot-annotate lưu trữ; các hộp theo pixel sẽ bị từ chối. Truyền một YAML bên ngoài rõ ràng qua --policy.recipe_path=/path/to/recipe.yaml để huấn luyện một công thức khác: nó được đọc một lần vào policy.recipe khi cấu hình được xây dựng, vì vậy checkpoint được lưu giữ nguyên công thức mà nó đã được huấn luyện, ngay cả khi tệp thay đổi sau đó.

Chỉnh huấn luyện điểm kiểm tra cơ sở trên một robot khác

lerobot/g05_base có thể được tinh chỉnh trên một robot mà nó chưa từng gặp. Đặt tên cho robot bằng --policy.embodiment, ví dụ như robot_type của bộ dữ liệu; tên này chính là văn bản Embodiment: của prompt. Cờ này là bắt buộc: nếu không có nó, checkpoint sẽ giữ nguyên embodiment và bảng slot của riêng nó. Các khớp được đặt vào bố cục cơ bản từ tên khớp của bộ dữ liệu: các khớp có tiền tố left_ sẽ nằm ở cánh tay trái, các khớp còn lại nằm ở cánh tay phải, khớp nào có tên chứa gripper sẽ chiếm slot gripper của cánh tay đó, và phần còn lại sẽ lấp đầy chín slot điều khiển của nó theo thứ tự. Một cánh tay 5 khớp có gripper do đó sẽ lấp đầy các slot 10-14 của cánh tay phải và gripper bên phải, còn một cánh tay 7-DoF sẽ lấp đầy 10-16 và gripper. Đặt --policy.state_slots và --policy.action_slots để đặt các khớp một cách tường minh. Các slot đã được giải quyết sẽ được lưu cùng với checkpoint đã tinh chỉnh.

Ví dụ dưới đây tinh chỉnh trên một robot một cánh tay được ghi lại bằng camera front và camera wrist. Các ô ảnh của checkpoint gốc là góc nhìn đầu, cổ tay trái và cổ tay phải; một cánh tay nằm bên phải, do đó camera cổ tay của nó chiếm ô cổ tay phải và ô cổ tay trái để trống. Các cờ có giá trị dạng danh sách nhận JSON có dấu nháy.

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 cung cấp một khung hình cho mỗi camera, giống như các quá trình fine-tune upstream; lịch sử sáu bước của checkpoint gốc làm tăng số lượng ảnh trên mỗi mẫu lên sáu lần.

Normalization sử dụng thống kê của chính dataset (z-score cho checkpoint cơ sở; truyền --policy.normalization_mapping='{"VISUAL": "IDENTITY", "STATE": "QUANTILES", "ACTION": "QUANTILES"}' cho q01/q99). Gripper giữ nguyên giá trị tuyệt đối (relative_exclude_joints=["gripper"] trong checkpoint cơ sở), trong khi các khớp cánh tay được huấn luyện dưới dạng delta. Mục tiêu BBox được lấy từ các câu trả lời vqa có căn cứ, được chú thích trên observation.images.front, vị trí camera đầu tiên không rỗng.

Công thức SO-101 sử dụng AdamW ở 8e-5 với 1.000 bước warmup. Các cấu hình LIBERO và RoboTwin được đóng gói sử dụng công thức 1e-5 đã phát hành của chúng, với lần lượt 1.000 và 500 bước warmup. Tất cả các hồ sơ đều giữ nguyên các nhóm tham số và hệ số nhân tốc độ học của G0.5. Ghi đè chúng để huấn luyện với công thức tối ưu hóa khác:

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

Tiếp tục một lần chạy đã lưu với checkpoint LeRobot tiêu chuẩn:

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

Các tham số cấu hình chính

Tham sốMô tả
policy.embodimentTên robot được viết trong prompt; chọn một bảng slot đã phát hành
policy.state_slots, policy.action_slotsVị trí slot của chính sách-explicit cho mỗi giá trị trạng thái/hành động thô
policy.camera_orderẢnh slot cho camera của Dataset tại mỗi checkpoint; null để trống
policy.action_headSử dụng đường dẫn hành động flow hoặc actioncodec của checkpoint
policy.runtime_systemChọn suy luận và hành động trực tiếp theo System 1 hoặc tích hợp theo System 2
policy.runtime_cot_fieldsChuỗi suy luận Hệ thống 2: ["subtask"] hoặc ["bbox", "subtask"]
policy.dtypebfloat16 (hỗ trợ độ chính xác hỗn hợp trên CUDA) hoặc float32
policy.chunk_sizeSố lượng hành động được dự đoán trong mỗi khối
policy.n_action_stepsSố lượng hành động được thực hiện trước khi lập kế hoạch lại
policy.use_language_recipeBật công thức giám sát ngôn ngữ tích hợp của G0.5
policy.recipe_pathĐọc Recipe YAML một lần vào policy.recipe (không lưu)
policy.optimizer_backbone_lr_multiplierHệ số nhân tốc độ học cho bộ khung ngôn ngữ
policy.optimizer_vision_lr_multiplierHệ số nhân tốc độ học cho tháp thị giác

Đầu hành động, số chiều, chân trời, các chế độ bộ xử lý và chuẩn hóa được lấy từ checkpoint; các ghi đè không tương thích sẽ bị từ chối trong quá trình tải.

Đánh giá

Với trình mô phỏng LIBERO đã được cài đặt, hãy đánh giá checkpoint LIBERO với tên camera và điều khiển tương đối của nó:

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

Tham khảo

Giấy phép

Mã tích hợp G0.5 dưới src/lerobot/policies/g05 được điều chỉnh từ bản triển khai của Galaxea và, giống như trọng số checkpoint, được cấp phép theo G0.5 Community License, không phải Apache-2.0 của LeRobot. Hãy xem xét và chấp nhận giấy phép đó trước khi tải xuống hoặc sử dụng một checkpoint.

Fine-tune là một tác phẩm phái sinh của G0.5. Khi bạn phân phối lại, hãy bao gồm các tệp LICENSE và NOTICE của checkpoint mà nó được phái sinh từ đó: LeRobot không sao chép chúng cho bạn, nhưng thẻ mô tả model được tạo ra sẽ nêu rõ giấy phép.

Update on GitHub