Ψ₀ 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.
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:
- 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
- Vocabulary sharing: Action tokens có thể chia sẻ embedding space với text tokens, giúp model học cross-modal patterns
- 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.
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.
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:
-
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.
-
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 đủ.
-
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%.
-
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
- AI cho Robot (7): LeRobot Hands-On — Thu thập dữ liệu và huấn luyện — Hướng dẫn thực hành LeRobot framework, nền tảng data format của Ψ₀
- VLA Models: Khi ngôn ngữ điều khiển robot — Tổng quan Vision-Language-Action models, kiến trúc nền tảng cho System-2
- Diffusion Policy: Sinh hành động cho robot — Hiểu Flow Matching và generative models cho robot actions