VnRobo
Về chúng tôiBảng giáBlogLiên hệ
🇺🇸ENĐăng nhậpDùng thử miễn phí
🇺🇸EN
VnRobo logo

Hạ tầng AI cho robot công nghiệp thế hệ mới.

Sản phẩm

  • Tính năng
  • Bảng giá
  • Kiến thức
  • Dịch vụ

Công ty

  • Về chúng tôi
  • Blog
  • Liên hệ

Pháp lý

  • Chính sách bảo mật
  • Điều khoản sử dụng

© 2026 VnRobo. Bảo lưu mọi quyền.

Được tạo với♥tại Việt Nam
VnRobo
Về chúng tôiBảng giáBlogLiên hệ
🇺🇸ENĐăng nhậpDùng thử miễn phí
🇺🇸EN
  1. Trang chủ
  2. Blog
  3. AffordanceVLA: VLA hiểu affordance
manipulationvlaaffordancerobot-manipulationresearch

AffordanceVLA: VLA hiểu affordance

Hướng dẫn AffordanceVLA từ paper mới, kiến trúc Which2Act/Where2Act/How2Act, cài đặt GitHub, training, inference và kết quả.

Nguyễn Anh Tuấn6 tháng 6, 202612 phút đọcCập nhật: 14 thg 6, 2026
AffordanceVLA: VLA hiểu affordance

Tóm tắt nhanh

AffordanceVLA là một paper robotics mới trên arXiv, mã 2606.06155, với project page chính thức tại skywalker-yqz.github.io/AffordanceVLA và code tại github.com/Skywalker-yqz/AffordanceVLA. Nếu bạn đã đọc về VLA models, bạn sẽ thấy AffordanceVLA không chỉ hỏi model "nhìn ảnh + đọc lệnh rồi xuất action". Nó ép model học thêm một lớp trung gian: robot nên tác động vào object nào, tại vùng nào, và với hình học 3D ra sao.

Paper gọi lớp trung gian đó là structured affordance forecasting. Trong robotics, affordance là "khả năng hành động" mà một object hoặc một vùng trên object gợi ra cho robot. Tay cầm của cốc có affordance để grasp. Nút toaster có affordance để press. Mép ngăn kéo có affordance để pull hoặc push. Điểm khác biệt của AffordanceVLA là nó không để VLA tự suy luận affordance một cách ngầm ẩn trong hidden state, mà tách thành ba module rõ ràng:

Module Câu hỏi Tín hiệu học
Which2Act Robot nên tập trung vào object nào? visual latent của crop target
Where2Act Robot nên chạm vào vùng 2D nào? affordance heatmap
How2Act Robot nên hiểu hình học 3D thế nào? shape diffusion + 10-DoF layout

Kết quả chính trên project page: AffordanceVLA đạt 95.8% average success trên LIBERO, 4.33 average length trên CALVIN ABC→D, và 88.3% trên các basic real-world tasks. Điểm đáng chú ý hơn là sample efficiency: project page cho biết model vượt "ceiling" của π0 chỉ với khoảng 40% fine-tuning data trong thí nghiệm data scaling.

Vấn đề: VLM hiểu semantic, robot cần không gian 3D

Các VLA như OpenVLA, π0, SpatialVLA hoặc các hướng LeRobot thường nhận input gồm camera image, language instruction, robot state rồi output action chunk. Cách này rất mạnh vì model tận dụng được pre-trained VLM. Nhưng paper AffordanceVLA chỉ ra một mismatch cơ bản:

VLM pretraining:
  image + text -> semantic alignment
  "đây là cốc", "đây là ngăn kéo", "bên trái cái bát"

Robot control:
  observation + state + instruction -> physical action
  dx, dy, dz, rotation, gripper, contact point, timing

Nói cách khác, VLM giỏi "nhìn và gọi tên", còn robot phải "chạm đúng chỗ và di chuyển đúng hướng". Nếu chỉ dùng action loss để fine-tune toàn bộ backbone, action prior có thể lấn át khả năng instruction following. Ví dụ, trong task toaster, π0 có thể vẫn hành xử như đang pick-and-place thay vì press button, vì action pattern phổ biến trong data kéo model về thao tác quen thuộc.

AffordanceVLA giải quyết bằng cách chèn một cầu nối nằm giữa vision-language understanding và action generation. Cầu nối này không phải video prediction dày đặc, vì dự đoán cả tương lai video vừa nặng vừa dư thừa. Nó cũng không phải external detector đơn giản, vì một affordance module đóng băng dễ tạo lỗi dây chuyền. Thay vào đó, affordance được train chung với policy trong một kiến trúc MoT.

Kiến trúc: Mixture-of-Transformer với UAA attention

Theo README GitHub, AffordanceVLA dùng Mixture-of-Transformer (MoT) gồm ba expert:

RGB observation O_t
Language instruction l
Proprioceptive state s_t
        |
        v
+----------------------+
| Understanding Expert |
| PaliGemma: SigLIP +  |
| Gemma                |
+----------------------+
        |
        v
+--------------------------+
| Affordance Generation    |
| Gemma + learnable query  |
| Which / Where / How      |
+--------------------------+
        |
        v
+----------------------+
| Action Expert        |
| Gemma + flow matching|
| action chunk a_t:t+k |
+----------------------+

Ba expert được nối bằng Understanding-Affordance-Action progressive attention. Attention trong cùng một expert là bidirectional để token trong expert đó fusion ngữ cảnh tốt. Nhưng attention giữa các expert là causal theo một chiều: Affordance Generation chỉ nhìn Understanding; Action nhìn cả Understanding và Affordance. Cách này giúp action information không rò ngược vào affordance prediction stage.

Điểm này quan trọng với người mới: AffordanceVLA không chỉ "thêm một head heatmap". Nó thiết kế luồng thông tin để affordance vẫn là tín hiệu trung gian sạch, gần semantic và spatial grounding, thay vì bị action decoder biến thành shortcut.

Ba affordance head hoạt động ra sao?

Which2Act: chọn object cần thao tác

Which2Act trả lời: "Trong ảnh, object nào thật sự liên quan đến instruction?" Thay vì học bằng class label rời rạc, repo mô tả Which2Act dùng target crop và reconstruct continuous visual latent từ frozen Flux VAE. Loss mặc định là MSE, có tùy chọn Smooth-L1 trong src/models/which2act_decoder.py.

Beginner có thể hiểu như sau: nếu instruction là "pick up the red cup", model không chỉ output token "red cup"; nó phải khôi phục một representation hình ảnh của vùng target. Điều này buộc model bỏ qua background, distractor object, và object không liên quan.

Observation: red cup, blue cup, banana, drawer
Instruction: "pick up the red cup"

Which2Act target:
  crop(red cup) -> frozen Flux VAE -> latent z_q
  model predicts z_hat
  loss = MSE(z_hat, z_q)

Where2Act: định vị vùng tương tác 2D

Where2Act trả lời: "Nên chạm vào pixel/vùng nào?" Nó unfold query tokens thành affordance map 2D qua lightweight Transformer decoder. Supervision là pixel-level Binary Cross Entropy với mask hoặc heatmap affordance.

Ví dụ, với lệnh "close the drawer", vùng affordance có thể nằm ở mặt trước hoặc tay nắm ngăn kéo. Với "toast the bread", vùng quan trọng có thể là button/lever trên toaster. Đây là lý do paper nhấn mạnh instruction sensitivity: cùng một scene nhưng lệnh khác nhau sẽ cần heatmap khác nhau.

How2Act: hiểu hình học 3D

How2Act trả lời: "Vùng đó nằm trong hình học 3D nào và layout object ra sao?" Theo project page, head này gồm hai nhánh:

Nhánh Mục tiêu
3D shape generation diffusion-based 3D shape latent
spatial layout regression 10-DoF layout gồm rotation, scale, translation

Trong tabletop task đơn giản, How2Act có thể không tạo khác biệt quá lớn so với Which/Where. Nhưng trong thao tác 6-DoF, object nghiêng, cần tiếp cận theo hướng cụ thể, hoặc task real-world có nhiều nhiễu, 3D prior giúp action expert không chỉ "đi tới điểm nóng 2D" mà còn hiểu không gian thao tác.

Training curriculum ba stage

AffordanceVLA không train một phát end-to-end từ đầu. Paper và README mô tả ba stage:

Stage Dữ liệu Train Freeze
I: Affordance grounding PRISM, AGD20K, RefSpatial, VQA Affordance Generation, queries, decoders Vision encoder, Understanding, Action
II: Robotic co-training InternData-A1 synthetic robot All experts + decoders, vision encoder LR thấp Không freeze chính
III: Target post-training LIBERO / CALVIN Fine-tune theo target benchmark Không freeze chính

Stage I dạy model grounding affordance tổng quát, chưa cần action label. Stage II ghép affordance với robot action trên dữ liệu robot lớn. Stage III thích nghi với môi trường đích như LIBERO hoặc CALVIN.

Loss của affordance gồm bốn phần: Which, Where, How-shape, How-layout. README ghi internal ratio cố định là 5 : 5 : 5 : 2. Ở Stage II, tổng affordance loss so với action loss là 0.50 : 1; ở Stage III giảm còn 0.15 : 1. Cách giảm này hợp lý: khi fine-tune task đích, action execution cần được ưu tiên hơn, nhưng affordance vẫn giữ vai trò anchor.

Automated affordance annotation pipeline

Một câu hỏi lớn: robot datasets thường không có dense affordance labels, vậy labels từ đâu ra? Repo có pipeline trong src/datasets/preprocessing/:

Robot trajectory
  |
  | Step 1: keyframe detection
  | rules: Start, Pre-Action, Gripper, Stop, Apex, End
  v
Keyframes
  |
  | Step 2a: text LLM decomposes instruction
  v
Per-keyframe sub-instructions
  |
  | Step 2b: VLM emits detection category + where-to query
  v
RexOmni-style query
  |
  | Step 3: RexOmni + SAM
  v
bbox + affordance point + mask-bounded Gaussian heatmap
  |
  | Optional: SAM-3D
  v
shape latent + layout tokens

Theo project page, pipeline này tổng hợp hơn 100K dense affordance annotations. Tuy nhiên, beginner cần chú ý một điểm rất thực tế: prompt templates và LLM/VLM clients không được bundle sẵn. README nói rõ bạn phải tự điền SYSTEM_PROMPT, USER_PROMPT_TEMPLATE, và cung cấp client module hoặc endpoint/token qua environment variables.

Cài đặt từ GitHub

Repo không có một requirements.txt duy nhất vì pipeline gồm nhiều stack nặng: VLA model, LIBERO/CALVIN simulator, RexOmni, SAM-3D. README cung cấp từng environment trong env/. Main training environment:

conda create -n affordancevla python=3.11 -y
conda activate affordancevla
pip install -r env/requirements_AffordanceVLA.txt

Trước khi pip install -r, README cảnh báo có hai entry cần xử lý thủ công: SAM3D editable install dạng -e /mnt/... và local wheel flash-attn dạng file:///mnt/.... Bạn nên xóa hai dòng đó khỏi requirements tương ứng rồi cài thủ công theo máy của mình.

Pretrained weights cần chuẩn bị:

Weight Config key
π0 base model.pretrained_path
PaliGemma tokenizer model.language_tokenizer_path
Flux VAE cho Which2Act model.which2act_flux_vae_path
VQ-VAE legacy model.which2act_vae_ckpt

Compute cũng là điểm cần nói thẳng: README nói code được validate với PyTorch CUDA trên NVIDIA H200, khuyến nghị ít nhất 8x H200 để reproduce batch size trong configs. Nếu bạn chỉ có một GPU consumer, cách thực tế là chạy smoke test/debug, đọc architecture, hoặc fine-tune subset nhỏ chứ không nên kỳ vọng reproduce full paper.

Training: chạy ba stage

Các config nằm trong configs/:

configs/
├── stage1.yaml
├── stage2.yaml
├── stage3 CALVIN.yaml
├── stage3 Libero.yaml
└── debug_flux_vae.yaml

Lệnh train theo README:

# Stage I: affordance grounding pre-training
torchrun --nproc_per_node=8 -m src.train \
  --config configs/stage1.yaml \
  --mode train \
  model.pretrained_path=$PRETRAINED_ROOT/pi0_base \
  model.language_tokenizer_path=$PRETRAINED_ROOT/paligemma-3b-pt-224 \
  model.which2act_flux_vae_path=$PRETRAINED_ROOT/flux-vae

# Stage II: robotic co-training
torchrun --nproc_per_node=8 -m src.train \
  --config configs/stage2.yaml \
  --mode train \
  model.pretrained_path=$PRETRAINED_ROOT/pi0_base \
  model.load_ckpt=outputs/stage1/checkpoint-XXXXX \
  model.language_tokenizer_path=$PRETRAINED_ROOT/paligemma-3b-pt-224 \
  model.which2act_flux_vae_path=$PRETRAINED_ROOT/flux-vae

# Stage III: target post-training
torchrun --nproc_per_node=8 -m src.train \
  --config "configs/stage3 Libero.yaml" \
  --mode train \
  model.load_ckpt=outputs/stage2/checkpoint-XXXXX

Dataset loaders là phần bạn phải chuẩn bị. README nói các concrete Dataset classes cho PRISM, AGD20K, RefSpatial, VQA, InternData-A1, LIBERO, CALVIN không được bundle, vì format on-disk tùy bản download. Repo cung cấp schema AffordanceSample, LayoutToken, tensor helpers, và constructors trong src/datasets/base_dataset.py; loader của bạn cần yield đúng contract đó.

Một checklist tối thiểu:

[ ] Download datasets theo license từng nguồn
[ ] Viết Dataset loader trả về AffordanceSample
[ ] Chuẩn bị pretrained weights và sửa config path
[ ] Chạy debug_flux_vae.yaml để kiểm tra Flux VAE path
[ ] Chạy Stage I với subset nhỏ
[ ] Kiểm tra heatmap/which latent/layout token trước khi Stage II
[ ] Train Stage II rồi fine-tune Stage III

Inference và evaluation

Repo README tập trung vào training/evaluation setup hơn là một file demo inference một dòng. Về mặt logic, inference của AffordanceVLA chạy theo chuỗi:

# Pseudocode để hiểu luồng inference, không phải API chính thức
obs = get_rgb_observation()
state = get_robot_state()
instruction = "close the drawer"

h = understanding_expert(obs, instruction, state)
affordance_tokens = affordance_generation_expert(h)
action_chunk = action_expert(h, affordance_tokens)

for action in action_chunk:
    robot.step(action)

Nếu bạn port checkpoint sang LIBERO, README nhắc ba lỗi dễ gặp:

Lỗi Hậu quả
Không vertical flip ảnh HDF5 agent-view perception lệch vì OpenGL convention
Sai sign gripper grasp mở/đóng ngược
Không unnormalize delta action theo pos_limit/ori_limit rotation bị yếu hoặc sai scale

Với real robot, bạn cần map action chunk sang controller của robot, thường là OSC hoặc end-effector delta control. Đừng bỏ qua safety: giới hạn workspace, velocity, collision zone, và emergency stop. Affordance heatmap giúp debug tốt, nhưng không thay cho safety layer.

Kết quả và ablation

Trên LIBERO, project page báo cáo:

Method Spatial Object Goal Long Avg
OpenVLA 84.7 88.4 79.2 53.7 76.5
π0 98.0 96.8 94.4 88.4 94.4
F1-VLA 98.2 97.8 95.4 91.3 95.7
AffordanceVLA full 98.6 98.4 96.2 89.8 95.8

Trên CALVIN ABC→D, AffordanceVLA full đạt average length 4.33 và hoàn thành đủ 5 task liên tiếp trong 75.9% rollout. Bản không có Stage II chỉ đạt 3.81, cho thấy co-training robot-affordance là phần quan trọng cho OOD generalization.

Ablation cũng rất đáng đọc. No-Afd, tức dùng kiến trúc π0 trên cùng Stage II data nhưng không có affordance objective, chỉ đạt LIBERO average 92.4% và CALVIN 3.93. Frozen-Afd, tức đóng băng affordance expert sau Stage I, tụt mạnh xuống 67.1% và 2.83. Block-wise Tokens, tức giữ losses/data nhưng cấm cross-attention giữa ba affordance head, đạt 90.3% và 3.89. Kết luận hợp lý là gain không chỉ đến từ nhiều data hơn hoặc nhiều loss hơn, mà đến từ representation có cấu trúc và được co-optimize với policy.

Khi nào nên học AffordanceVLA?

Nếu bạn mới bắt đầu, hãy đọc bài này cùng các nền tảng về Diffusion Policy, SpatialVLA và LeRobot. AffordanceVLA chưa phải repo "clone là train full ngay" cho laptop. Nhưng nó là case study rất tốt về cách robotics research năm 2026 đang đi từ VLA end-to-end sang VLA có intermediate representation.

Điểm cần nhớ:

VLA thường học:
  vision + language + state -> action

AffordanceVLA học thêm:
  vision + language -> which object
  vision + language -> where to interact
  vision + language -> how 3D geometry constrains action
  all of the above + state -> action chunk

Đó là lý do affordance có thể giúp robot thao tác chính xác hơn: nó biến một bài toán quá rộng thành các bài toán nhỏ hơn, có thể supervise, visualize và debug.

Khuyến nghị công cụ

Stack train/deploy cho VLA

Train trên cloud/workstation, deploy bản tối ưu xuống Jetson hoặc robot computer.

Cloud GPU for VLA / policy training Dùng cho imitation learning, diffusion policy, RL và fine-tuning model robotics. Xem cloud GPU → NVIDIA Jetson Orin NX / Orin Nano Máy deploy edge cho perception, logging và inference đã tối ưu. Xem Jetson → Hugging Face / robotics dataset hosting Lưu dataset, checkpoint và model card để workflow LeRobot/VLA dễ chia sẻ hơn. Xem platform →

Bài viết liên quan

  • VLA Models: RT-2 → Octo → OpenVLA → π0
  • SpatialVLA: spatial reasoning cho robot
  • LeRobot hands-on: train robot policy

Nguồn tham khảo

  • AffordanceVLA paper trên arXiv
  • AffordanceVLA project page
  • AffordanceVLA GitHub repository
NT

Nguyễn Anh Tuấn

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

Khám phá VnRobo

Fleet MonitoringROS 2 IntegrationAMR Solutions

Bài viết liên quan

Tutorial
LaST-R1: Fine-tune VLA với Latent CoT và RL đạt 99.8%
vlareinforcement-learningchain-of-thought
manipulation

LaST-R1: Fine-tune VLA với Latent CoT và RL đạt 99.8%

Hướng dẫn chi tiết LaST-R1 — framework kết hợp Latent Chain-of-Thought reasoning với LAPO (RL) để fine-tune VLA đạt 99.8% success rate trên LIBERO chỉ với 1 demo/task.

8/7/202615 phút đọc
NT
Tutorial
TORL-VLA: Fine-tune VLA với Cảm Biến Xúc Giác và Online RL
vlatactileonline-rl
manipulation

TORL-VLA: Fine-tune VLA với Cảm Biến Xúc Giác và Online RL

Hướng dẫn TORL-VLA — framework kết hợp cảm biến xúc giác (tactile) và Online RL để fine-tune VLA cho thao tác tiếp xúc chính xác cao: latch, trứng, cốc cà phê.

6/7/202613 phút đọc
NT
Deep Dive
Dataset 650K: Thu Thập Dữ Liệu Đa Nhiệm Vụ Quy Mô Lớn cho VIMA
vimadatasetimitation-learningPhần 4
manipulation

Dataset 650K: Thu Thập Dữ Liệu Đa Nhiệm Vụ Quy Mô Lớn cho VIMA

Phân tích bộ dataset 650K trajectories của VIMA: procedural generation trong PyBullet, format pkl, cách tải từ HuggingFace, và tại sao 1% dữ liệu đã đủ để vượt baseline.

17/6/202614 phút đọc
NT
VnRobo logo

Hạ tầng AI cho robot công nghiệp thế hệ mới.

Sản phẩm

  • Tính năng
  • Bảng giá
  • Kiến thức
  • Dịch vụ

Công ty

  • Về chúng tôi
  • Blog
  • Liên hệ

Pháp lý

  • Chính sách bảo mật
  • Điều khoản sử dụng

© 2026 VnRobo. Bảo lưu mọi quyền.

Được tạo với♥tại Việt Nam