aiai-perceptionvladata-pipelinelerobotpsi0

Ψ₀ Hands-On (3): Data Recipe & Pipeline

Tìm hiểu data recipe của Ψ₀ — tại sao 860h data thắng 10,000h, cách xử lý EgoDex, Humanoid Everyday, và LeRobot format.

Nguyễn Anh Tuấn4 tháng 4, 202612 phút đọc
Ψ₀ Hands-On (3): Data Recipe & Pipeline

Ψ₀ Hands-On (3): Data Recipe & Pipeline

Trong hai bài trước của series, chúng ta đã tìm hiểu kiến trúc tổng quan và ba hệ thống System-0/1/2 của Ψ₀. Bài này sẽ đi sâu vào phần quan trọng nhất mà nhiều người bỏ qua: data. Tại sao Ψ₀ chỉ cần ~860 giờ dữ liệu mà vẫn đánh bại các model dùng hơn 10,000 giờ? Câu trả lời nằm ở data recipe — cách chọn, xử lý, và sử dụng dữ liệu theo đúng thứ tự.

Tổng quan 3 loại dữ liệu

Ψ₀ sử dụng ba nguồn dữ liệu hoàn toàn khác nhau, mỗi nguồn phục vụ một mục đích riêng trong pipeline huấn luyện:

Dữ liệu Thời lượng Không gian Giai đoạn Mục đích
EgoDex 829 giờ Task-space (48-DoF) Stage 1: Pre-train Học manipulation primitives từ video người
Humanoid Everyday (HE) 31 giờ Joint-space (36-DoF) Stage 1 + 2 Học điều khiển cơ thể humanoid
Task-specific demos ~80 demo/task Joint-space (36-DoF) Stage 3: Fine-tune Thích ứng với task cụ thể

Tổng cộng chỉ khoảng 860 giờ cho Stage 1, cộng thêm 80 demo cho mỗi task ở Stage 3. So sánh với π₀ của Physical Intelligence cần hơn 10,000 giờ, đây là một bước nhảy vọt về data efficiency.

Phép ẩn dụ: Học nấu phở

Hãy tưởng tượng bạn muốn học nấu phở Bắc đúng chuẩn:

Bước 1 — Xem YouTube (EgoDex): Bạn xem 829 giờ video nấu ăn từ góc nhìn người thứ nhất. Bạn không cần biết chính xác người ta bật bếp ở mức nào, cắt hành góc bao nhiêu độ — bạn chỉ cần hiểu pattern chung: tay trái giữ thịt, tay phải cắt, đưa thịt vào nồi, khuấy đều... Đây là task-space knowledge — biết cái gì cần làm, không cần biết chính xác cách cơ thể di chuyển.

Bước 2 — Thực hành trong bếp (Humanoid Everyday): Sau khi xem đủ video, bạn vào bếp thật. 31 giờ thực hành giúp bạn chuyển kiến thức từ mắt sang tay — biết cách cơ thể mình phối hợp để thực hiện các động tác đó. Đây là joint-space knowledge — biết chính xác cách di chuyển từng khớp.

Bước 3 — Master recipe phở (Task-specific): Cuối cùng, bạn chỉ cần ~80 lần nấu phở cụ thể để tinh chỉnh kỹ năng cho đúng công thức. Không cần 10,000 lần — vì bạn đã có nền tảng vững chắc.

Quy trình xử lý dữ liệu trong pipeline AI

EgoDex: 829 giờ video egocentric

EgoDex là bộ dữ liệu lớn nhất và quan trọng nhất của Ψ₀. Nó được tạo từ video egocentric (góc nhìn người thứ nhất) của con người thực hiện các thao tác tay trong đời thường.

Tại sao egocentric?

Đây là insight then chốt: camera trên đầu robot humanoid nhìn xuống bàn tay giống hệt camera gắn trên đầu người nhìn xuống tay người. Khi bạn dùng video từ góc nhìn thứ ba (third-person), model phải học thêm bước chuyển đổi góc nhìn — rất khó và tốn data. Video egocentric loại bỏ hoàn toàn vấn đề này.

Cấu trúc dữ liệu EgoDex

EgoDex lưu ở dạng 48-DoF task-space:

  • Vị trí 3D tay trái (x, y, z): 3 giá trị
  • Vị trí 3D tay phải (x, y, z): 3 giá trị
  • Trạng thái ngón tay: 42 giá trị (21 DoF mỗi tay — 3 DoF cho mỗi trong 7 nhóm ngón)

Lưu ý: đây là task-space, không phải joint-space. EgoDex không biết góc khớp (joint angles) của robot — nó chỉ biết vị trí và hướng của bàn tay trong không gian 3D. Điều này có nghĩa EgoDex có thể transfer sang bất kỳ robot nào có bàn tay, không chỉ Unitree G1.

Pipeline xử lý EgoDex

Quy trình chuyển từ video thô sang dữ liệu huấn luyện:

Video egocentric → H-RDT (Hand Reconstruction) → 3D hand positions
    → Transform to camera frame → Upsample 3x → Normalize → FAST tokenize

Bước 1: Hand Reconstruction với H-RDT

H-RDT (Hand Reconstruction from Dense Tracking) phân tích từng frame video để trích xuất vị trí 3D của các khớp tay. Nó cho ra 48 giá trị mỗi frame.

Bước 2: Transform to camera frame

Vì video egocentric có camera chuyển động, tất cả tọa độ 3D được chuyển về camera frame — hệ tọa độ với gốc tại camera. Điều này đảm bảo dữ liệu nhất quán bất kể người đeo camera đang đứng hay ngồi.

Bước 3: Upsample 3x

Video gốc thường ở 10-30 FPS. Pipeline upsample lên 3x để có temporal resolution cao hơn, giúp model học các chuyển động mịn hơn.

Bước 4: Normalize

Mỗi chiều (dimension) được normalize dựa trên statistics tính từ toàn bộ dataset. File stats.json lưu mean và std cho từng dimension.

Bước 5: FAST tokenize

Đây là bước quan trọng nhất — chuyển 48 giá trị liên tục thành ~20 discrete tokens.

FAST Tokenizer: Nén action thông minh

FAST (Fast Action Sequence Tokenizer) là một trong những đóng góp kỹ thuật quan trọng của Ψ₀. Thay vì để model dự đoán trực tiếp 48 giá trị liên tục (rất khó cho autoregressive model), FAST nén chúng thành chuỗi token rời rạc.

Cách FAST hoạt động

Input: 48 giá trị liên tục (vd: [0.23, -0.15, 0.87, ...])
    ↓ Discrete Cosine Transform (DCT)
    ↓ Giữ lại 20 hệ số quan trọng nhất
    ↓ Quantize vào codebook 2048 bins
Output: ~20 discrete tokens (vd: [1204, 87, 1956, ...])

Codebook size: 2048 bins — mỗi giá trị liên tục được chia thành 2048 mức rời rạc. Đủ chính xác cho điều khiển robot (sai số <0.5mm ở workspace thông thường).

Reconstruction loss (L1): 0.005 — khi decode ngược lại từ tokens sang giá trị liên tục, sai số trung bình chỉ 0.005. Điều này có nghĩa quá trình nén gần như lossless.

Tại sao không dùng continuous action trực tiếp?

Ba lý do chính:

  1. Autoregressive generation: Qwen3-VL (System-2) là language model, sinh token rời rạc tự nhiên hơn số liên tục
  2. Vocabulary sharing: Action tokens có thể chia sẻ embedding space với text tokens, giúp model học cross-modal patterns
  3. Compression: 48 giá trị → ~20 tokens = nén 2.4x, giảm sequence length đáng kể

LeRobot Data Format

Tất cả dữ liệu trong Ψ₀ đều được lưu theo LeRobot format — chuẩn dữ liệu của HuggingFace cho robot learning. Nếu bạn đã quen với LeRobot framework, bạn sẽ thấy format này rất quen thuộc.

Cấu trúc thư mục

dataset/
├── meta/
│   ├── info.json          # Metadata: fps, features, robot type
│   ├── stats.json         # Mean, std, min, max cho mỗi modality
│   ├── episodes.jsonl     # Danh sách episodes với timestamps
│   └── tasks.jsonl        # Mô tả task cho mỗi episode
├── data/
│   ├── chunk-000/
│   │   ├── episode_000000.parquet  # Actions + states
│   │   ├── episode_000001.parquet
│   │   └── ...
│   └── chunk-001/
│       └── ...
└── videos/
    ├── chunk-000/
    │   ├── observation.images.cam_high/
    │   │   ├── episode_000000.mp4
    │   │   └── ...
    │   └── observation.images.cam_wrist/
    │       └── ...
    └── chunk-001/
        └── ...

Observation format

Mỗi frame observation bao gồm:

  • Images: 320x240 pixels, thường có 2 camera (head cam + wrist cam)
  • State: 28-DoF proprioception — vị trí và vận tốc các khớp cánh tay + bàn tay
  • Timestamp: Thời gian chính xác của frame

Action format

  • Joint-space (HE + Task data): 36-DoF — bao gồm cả upper body và hand joints
  • Task-space (EgoDex): 48-DoF — vị trí 3D tay + trạng thái ngón tay

stats.json

File này cực kỳ quan trọng cho việc normalize/denormalize:

{
  "observation.state": {
    "mean": [0.12, -0.05, ...],
    "std": [0.34, 0.28, ...],
    "min": [-1.57, -1.57, ...],
    "max": [1.57, 1.57, ...]
  },
  "action": {
    "mean": [...],
    "std": [...],
    "min": [...],
    "max": [...]
  }
}

Khi training, mọi giá trị được normalize: x_norm = (x - mean) / std. Khi inference, denormalize ngược lại: x = x_norm * std + mean. Nếu stats sai → robot sẽ chuyển động lệch hoàn toàn.

Pipeline xử lý dữ liệu robot với nhiều nguồn khác nhau

Humanoid Everyday (HE): 31 giờ robot data

Trong khi EgoDex cung cấp kiến thức manipulation từ video người, Humanoid Everyday cung cấp dữ liệu thực từ robot Unitree G1 thực hiện các task hàng ngày.

Đặc điểm HE

  • 31 giờ teleoperation data
  • Joint-space: 36-DoF (không phải task-space như EgoDex)
  • Tasks: Các hoạt động hàng ngày — gấp quần áo, dọn bàn, rót nước, mở tủ...
  • Robot: Unitree G1 + Dex3-1 hands (43-DoF tổng, 36-DoF upper body)

Vai trò trong training

HE xuất hiện ở cả Stage 1 và Stage 2:

  • Stage 1 (Pre-train): HE data được mix với EgoDex. Model học cả task-space (từ EgoDex) và joint-space (từ HE) đồng thời. Tỷ lệ mixing được điều chỉnh để cân bằng hai nguồn dữ liệu.
  • Stage 2 (Post-train): Chỉ dùng HE data. Flow Matching action expert học cách generate joint-space actions chính xác.

Task-specific Demos: 80 là đủ

Điều ấn tượng nhất về Ψ₀ là chỉ cần 80 demonstrations cho mỗi task mới. So sánh:

Model Demos cần thiết Thời gian thu thập
ACT 50-200 1-2 giờ
Diffusion Policy 100-500 2-5 giờ
π₀ 500-1000+ 5-10 giờ
Ψ₀ ~80 ~40 phút

40 phút teleoperation để teach một task mới cho humanoid robot — đây là mức thực tế cho deployment trong nhà máy hoặc gia đình.

Commands xử lý dữ liệu

Download dữ liệu simulation

# Download simulation data từ HuggingFace
python scripts/data/download_datasets.py \
  --repo_id physical-superintelligence/psi0-sim-data \
  --local_dir data/sim

# Download real-world data
python scripts/data/download_datasets.py \
  --repo_id physical-superintelligence/psi0-real-data \
  --local_dir data/real

Chuyển đổi raw data sang LeRobot format

# Convert raw teleoperation data sang LeRobot format
python scripts/data/raw_to_lerobot.py \
  --input_dir data/raw/my_task \
  --output_dir data/lerobot/my_task \
  --fps 30 \
  --video_codec h264

# Tính statistics cho dataset
python scripts/data/calc_modality_stats.py \
  --dataset_dir data/lerobot/my_task \
  --output_path data/lerobot/my_task/meta/stats.json

# Patch metadata nếu cần sửa
python scripts/data/patch_lerobot_meta.py \
  --dataset_dir data/lerobot/my_task \
  --num_episodes 80 \
  --fps 30

Upload lên HuggingFace

# Cần HF_TOKEN
export HF_TOKEN=hf_xxxxx

# Push dataset
python scripts/data/push_to_hub.py \
  --dataset_dir data/lerobot/my_task \
  --repo_id your-username/psi0-custom-task

Tại sao Data Recipe này hiệu quả?

1. Staged usage — Đúng dữ liệu, đúng thời điểm

Không phải tất cả dữ liệu đều được dùng cùng lúc. Mỗi stage có nguồn dữ liệu riêng với mục đích riêng:

  • Stage 1: Học vocabulary — EgoDex dạy model "từ vựng" của manipulation (nắm, đặt, xoay, ấn...)
  • Stage 2: Học grammar — HE data dạy model cách ghép "từ vựng" thành "câu" hoàn chỉnh trên robot thật
  • Stage 3: Học viết văn — 80 demos dạy model viết đúng "bài văn" cho task cụ thể

2. Egocentric match — Góc nhìn nhất quán

Camera trên đầu Unitree G1 cho ra hình ảnh rất giống camera egocentric trên đầu người. Không cần domain adaptation, không cần viewpoint transformation. Dữ liệu từ người tự nhiên transfer sang robot.

3. Quality > Quantity

829 giờ EgoDex được chọn lọc kỹ — chỉ giữ lại video có chất lượng tốt, góc nhìn rõ ràng, bàn tay visible. 31 giờ HE cũng là teleoperation chất lượng cao từ operator có kinh nghiệm. So với việc crawl hàng nghìn giờ video YouTube chất lượng lẫn lộn, cách tiếp cận này hiệu quả hơn nhiều.

Dữ liệu chất lượng cao là chìa khóa cho AI hiệu quả

Ablation: Không có EgoDex thì sao?

Nhóm nghiên cứu đã chạy ablation study để kiểm chứng giá trị của từng thành phần:

Kết quả ablation

Cấu hình Success Rate So với full model
Full (EgoDex + HE + 80 demos) 78.5% baseline
Không có EgoDex 31.2% -47.3%
10% EgoDex (83 giờ) 52.8% -25.7%
50% EgoDex (415 giờ) 68.1% -10.4%
Không có HE Stage 1 61.3% -17.2%
40 demos (thay vì 80) 69.7% -8.8%

Phát hiện quan trọng:

  1. Bỏ EgoDex = thảm họa: Success rate giảm gần 50%. Model mất khả năng generalize — nó chỉ biết làm đúng 80 demo đã thấy, không thể adapt khi vật thể ở vị trí khác hoặc hình dạng khác.

  2. 10% EgoDex vẫn kém đáng kể: Ngay cả 83 giờ video egocentric cũng không đủ. Model cần thấy đa dạng manipulation patterns — và 83 giờ chưa cover đủ.

  3. HE data ở Stage 1 quan trọng: Mixing HE vào Stage 1 (thay vì chỉ dùng ở Stage 2) giúp model học embodiment awareness sớm, cải thiện 17%.

  4. 80 demos là sweet spot: 40 demos kém 9%, nhưng tăng lên 120 demos chỉ cải thiện thêm 2-3%. 80 là điểm cân bằng tốt nhất giữa effort và performance.

Tóm tắt và bài học rút ra

Data recipe của Ψ₀ cho chúng ta bài học quan trọng: không phải nhiều data hơn sẽ tốt hơn. Cách bạn tổ chức, xử lý, và sử dụng dữ liệu quan trọng hơn tổng lượng dữ liệu. Với kiến trúc phân tầng (System-0/1/2) kết hợp data recipe 3 giai đoạn, Ψ₀ đã chứng minh rằng 860 giờ dữ liệu đúng cách có thể thắng 10,000 giờ dữ liệu thô.

Trong bài tiếp theo, chúng ta sẽ hands-on cài đặt môi trường và chạy training pipeline của Ψ₀ từ đầu đến cuối.


Bài viết liên quan

NT

Nguyễn Anh Tuấn

Robotics & AI Engineer. Building VnRobo — sharing knowledge about robot learning, VLA models, and automation.

Bài viết liên quan

NEWTutorial
Hướng dẫn GigaBrain-0: VLA + World Model + RL
vlaworld-modelreinforcement-learninggigabrainroboticsmanipulation

Hướng dẫn GigaBrain-0: VLA + World Model + RL

Hướng dẫn chi tiết huấn luyện VLA bằng World Model và Reinforcement Learning với framework RAMP từ GigaBrain — open-source, 3.5B params.

12/4/202611 phút đọc
NEWTutorial
StarVLA: Xây dựng VLA Model mô-đun
vlastarvlarobot-manipulationaideep-learningqwen-vlflow-matchingiclr-2026

StarVLA: Xây dựng VLA Model mô-đun

Hướng dẫn chi tiết xây dựng Vision-Language-Action model với StarVLA — framework mô-đun kiểu Lego từ ICLR 2026, hỗ trợ 4 kiến trúc action head.

12/4/202611 phút đọc
NEWTutorial
Hướng dẫn fine-tune NVIDIA GR00T N1
vlahumanoidnvidiaisaac-labfine-tuningdeep-learninggrootsim2real

Hướng dẫn fine-tune NVIDIA GR00T N1

Hướng dẫn chi tiết fine-tune VLA model GR00T N1 cho humanoid robot với Isaac Lab và dữ liệu AGIBOT World — từ cài đặt đến inference.

12/4/202612 phút đọc