项目文件结构
评估相关:
experiments/robot/aloha/:ALOHA 训练和评估文件,包含run_aloha_eval.py(客户端脚本)、aloha_utils.py及从原始 ALOHA 仓库复制的环境文件(如constants.py,real_env.py)。experiments/robot/:通用评估工具,含 OpenVLA 特定工具openvla_utils.py。vla-scripts/deploy.py:VLA 服务器部署脚本(服务器端)。
注意:与 LIBERO 不同,此处采用服务器 - 客户端接口。若控制机器人的机器缺乏足够 GPU 运行微调后的策略,此架构尤为适用。
训练相关:
experiments/robot/aloha/:数据预处理脚本preprocess_split_aloha_data.py。vla-scripts/finetune.py:VLA 微调脚本。
环境设置
为训练策略及在 VLA 服务器上部署,需配置 conda 环境。建议参考官方 SETUP 文档进行初始化。
数据预处理与微调
假设已收集 ALOHA 专家演示数据。首先使用 preprocess_split_aloha_data.py 预处理原始数据集,将图像从 480x640 缩小至 256x256,并按比例划分训练集与验证集。例如针对'将 X 放入锅中'任务(含多个目标对象),需分别执行预处理命令。
随后,将预处理后的数据转换为 OpenVLA 兼容的 RLDS 格式。转换过程与原仓库一致,完成后需在 configs.py、transforms.py 和 mixtures.py 中注册新数据集(如 aloha1_put_X_into_pot_300_demos)。
微调前,请在 prismatic/vla/constants.py 中确认 ALOHA 动作块大小(NUM_ACTIONS_CHUNK)。默认设为 25(对应 25 Hz 控制频率),若使用 50 Hz 则建议调整为 50。一般 1 秒长的动作块是合理选择。注意不要修改 ACTION_PROPRIO_NORMALIZATION_TYPE,因 ALOHA 动作空间为绝对关节角度,避免使用会裁剪异常值的归一化方案。
开始微调!以下示例展示了使用 OFT+ 方法(含 FiLM 增强语言接地)在'将 X 放入锅中'任务上微调 OpenVLA 的命令。请将第一行中的 X 替换为实际 GPU 数量:
torchrun --standalone --nnodes 1 --nproc-per-node X vla-scripts/finetune.py \
--vla_path openvla/openvla-7b \
--data_root_dir /PATH/TO/RLDS/DATASETS/DIR/ \
--dataset_name aloha1_put_X_into_pot_300_demos \
--run_root_dir /YOUR/CHECKPOINTS/AND/LOG/DIR/ \
--use_l1_regression True \
--use_diffusion False \
--use_film True \
--num_images_in_input 3 \
--use_proprio True \
--batch_size 4 \
--learning_rate 5e-4 \
--num_steps_before_decay 50000 \
--max_steps 100005 \
--use_val_set True \
--val_freq 10000 \
--save_freq 10000 \
--save_latest_checkpoint_only False \
--image_aug True \
--lora_rank 32 \
--wandb_entity "YOUR_WANDB_ENTITY" \
--wandb_project "YOUR_WANDB_PROJECT" \
--run_id_note parallel_dec--25_acts_chunk--continuous_acts--L1_regression--3rd_person_img--left_right_wrist_imgs--proprio_state--film
若使用 8 张 GPU 评估 100K 步 checkpoint,上述命令可复现论文结果。模型将基于 3 个输入图像(1 个第三人称 + 2 个手腕相机)进行微调。经验表明,在 50K 步后衰减学习率有助于加快收敛,此时 L1 损失通常大幅下降。

