策略训练#
适用型号:AlohaMini 2 / 2 Pro。只执行与你的机器人型号对应的示例。
本章以项目提供的 ACT 训练入口为起点。训练读取已保存的数据集,不需要机器人 Host 或主臂持续在线。
1. 训练前核对#
已完成 数据回看,任务、动作与相机数据完整。
训练机器安装了相同软件环境,能找到数据集。
数据来自匹配的机器人配置;一代为 16 维接口,二代与 Pro 为 18 维接口。
当前终端设置了正确的
HF_USER。使用 CUDA 示例时,GPU 与 PyTorch CUDA 环境可用。
python -c "import torch; print(torch.cuda.is_available())"
这只验证 CUDA 可访问,不保证特定 batch size 或策略一定能在显存中运行。
2. 启动 ACT 训练#
以下示例读取前一章的数据集,模型输出到独立目录,关闭 W&B 和模型上传:
AlohaMini 2
lerobot-train \
--dataset.repo_id=$HF_USER/am2_pick_place \
--policy.type=act \
--output_dir=outputs/train/act_am2_pick_place \
--job_name=act_am2_pick_place \
--policy.device=cuda \
--policy.push_to_hub=false \
--wandb.enable=false \
--dataset.video_backend=pyav
AlohaMini 2 Pro
lerobot-train \
--dataset.repo_id=$HF_USER/am2pro_pick_place \
--policy.type=act \
--output_dir=outputs/train/act_am2pro_pick_place \
--job_name=act_am2pro_pick_place \
--policy.device=cuda \
--policy.push_to_hub=false \
--wandb.enable=false \
--dataset.video_backend=pyav
如果录制时指定了本地数据目录,增加:
AlohaMini 2
--dataset.root=/absolute/path/to/am2_pick_place
AlohaMini 2 Pro
--dataset.root=/absolute/path/to/am2pro_pick_place
使用自定义路径时不要误把 repo_id 改成本地目录;这两个字段负责不同用途。
3. 参数说明#
参数 |
作用 |
调整时注意 |
|---|---|---|
|
标识训练数据集 |
必须与实际数据对应 |
|
指向本地数据目录 |
跨机器训练时确认数据已复制完整 |
|
使用 ACT 策略 |
更换策略会改变模型与依赖需求 |
|
在 CUDA 设备上训练 |
需要对应运行环境 |
|
检查点与训练产物目录 |
新实验使用新目录,避免混淆结果 |
|
实验名称 |
建议包含任务或配置差异 |
|
关闭模型上传 |
训练完成仍保留本地检查点 |
|
关闭 W&B 日志集成 |
不影响本地训练输出 |
|
使用 PyAV 视频解码 |
解码报错先检查数据视频与依赖 |
训练命令读取数据集特征,无需增加 robot.robot_model 参数。两款示例分别读取对应数据,使用独立模型目录;18 维接口相同不代表策略可以直接跨机型部署。
本示例沿用策略的训练预设,不额外给出未经本任务验证的学习率、步数或成功率。需要调整训练超参数时,以当前训练入口和策略配置为准,并记录改动。
4. 找到可评估的检查点#
项目示例采用以下路径结构:
AlohaMini 2
outputs/train/act_am2_pick_place/
└── checkpoints/
└── 020000/
└── pretrained_model/
AlohaMini 2 Pro
outputs/train/act_am2pro_pick_place/
└── checkpoints/
└── 020000/
└── pretrained_model/
020000 只是示例步数。请查看实际输出,选择已经保存完整的 pretrained_model 目录,再传给评估脚本。不要复制一个尚未生成的示例路径。
训练中断后若要恢复,查看当前 lerobot-train --help 与软件仓库恢复训练说明。训练恢复参数与数据集续录的 --resume 不是同一条工作流。 不要直接删除已有输出目录来绕过错误。
5. 上传与跨机器训练#
需要上传模型时,先完成 Hugging Face 登录,并在训练配置中使用:
--policy.push_to_hub=true
--policy.repo_id=你的用户名/模型名称
数据集和策略模型是不同的仓库。把录制数据复制到另一台训练机器时,保持视频、元数据和数值数据一起迁移;训练结束后再把完整的模型目录带回评估机器。
6. 如何判断下一轮改进方向#
观察结果 |
优先检查 |
|---|---|
训练启动即报特征维度错误 |
数据集机型、相机名称、state/action 特征 |
视频无法解码 |
数据是否保存完整、PyAV 与 FFmpeg 环境 |
显存不足 |
当前策略、batch size、图像配置与设备显存 |
训练能完成,但真机动作不对 |
校准、预处理、机型与评估场景 |
只在少数物体位置成功 |
示教是否覆盖任务实际变化 |
抓取成功但后续放置失败 |
数据中完整任务链条与末段演示质量 |
训练 loss 下降只能说明优化过程中的一个指标,任务效果要通过 真机评估 检查。记录失败阶段,再决定补数据或调整训练配置。
7. AM-ACT:移动任务与纯视觉训练#
Pro 快速入门 给出了一套“右臂操作、左臂静止、底盘参与运动”的 AM-ACT 示例。AM-ACT 在 ACT 基础上支持固定动作维度、部分动作维度的离散分类,以及纯视觉输入。是否使用这些选项,取决于实际采集的任务。
7.1 先核对数据特征#
确认来自本机的 18 维整机数据,检查
meta/info.json中的动作名称和顺序。确认哪些关节参与任务、哪些始终不动。不要因为示例固定了左臂,就对自己的双臂任务照搬。
核对相机键。下例使用
forward与wrist_right;如果你的交付配置使用head_top,应先检查数据集中实际的observation.images.*。确认移动动作的单位、取值和统计分布,再考虑离散分类参数。
7.2 创建独立的纯视觉数据集#
下面以 Pro 数据集为例。标准 2 同样可以使用转换工具,但源数据、目标目录和模型目录应保持独立。
python -m lerobot.scripts.create_alohamini_visual_only_dataset \
--source "$HOME/user/am2pro_pick_place" \
--target "$HOME/user/am2pro_pick_place_visual_only" \
--keep-camera forward \
--keep-camera wrist_right \
--drop-state \
--mode copy \
--dry-run
先检查预览列出的保留相机和删除特征。确认后移除最后一行 --dry-run,同时移除它上一行末尾的续行符,再执行转换。
--source必须指向实际存在的 LeRobot v3 数据集。--target必须是尚不存在的新目录。--drop-state移除observation.state,保留动作标签。AM-ACT 支持该输入方式,其他策略未必支持。--mode copy使用独立文件副本;工具默认的自动模式会优先建立硬链接。转换完成后再次检查目标数据集,确认图像、动作和 episode 数量符合预期。
7.3 从不固定动作维度的配置开始#
以下示例先保留全部动作的连续回归,避免尚未核对数据就固定左臂或强行划分类别。步数和 batch size 是可调整的示例,不代表特定成功率。
lerobot-train \
--dataset.repo_id=local/am2pro_pick_place_visual_only \
--dataset.root="$HOME/user/am2pro_pick_place_visual_only" \
--dataset.video_backend=pyav \
--policy.type=am_act \
--policy.device=cuda \
--policy.fixed_action_dims='[]' \
--policy.discrete_action_dims='[]' \
--policy.push_to_hub=false \
--save_checkpoint_to_hub=false \
--output_dir=outputs/train/am_act_am2pro_pick_place \
--job_name=am_act_am2pro_pick_place \
--steps=100000 \
--batch_size=2 \
--wandb.enable=false
7.4 理解交付教程中的分类参数#
参数 |
任务示例 |
使用条件 |
|---|---|---|
|
|
该任务中左臂始终静止;这些维度不参与训练,在归一化空间输出零 |
|
|
必须先核对数据特征顺序;此处用于二代底盘运动 |
|
|
使用数据集的物理单位,与采集动作取值匹配 |
|
|
每一组权重与该维度的类别顺序一一对应 |
|
|
分类损失的权重,需要结合实验调整 |
归一化空间的零不等于物理关节角度零。 不要把 fixed_action_dims 当作机械急停或硬件锁定机制。
如需采用上述离散设置,在训练命令中替换相应空列表,并补充类别与权重参数;先在少量数据上检查配置是否符合任务。
7.5 出现 zero std 怎么办#
Action dimension 15 has zero std and cannot be classified 表示被选为离散分类的动作维度在统计中没有变化。任务示例中可能是采集时没有左右平移,但也应检查数据转换和维度选择是否正确。
核对动作 15 对应的真实特征,而不是只按编号猜测。
检查原始数据与统计信息,确认该维度是否恒定。
任务需要这类运动时,补采包含相应动作的数据并重新生成统计。
任务本来不需要这类运动时,重新设计离散维度和固定维度配置,保持类别列表长度一致。
不要直接修改统计数值来让报错消失。训练完成后按 真机评估 使用实际生成的检查点,并保持机器人型号、相机名称与训练数据一致。
完整参数定义:AM-ACT 参数说明。