模仿学习2.6:ACT
概念
ACT(Action Chunking with Transformers)是一种结合了Transformer架构与动作分块思想的模仿学习算法。它不再预测当前瞬间的一个动作,而是让模型一次性预测未来一段时间内的一串连续动作,并通过时间集成平滑执行,解决传统行为克隆的误差累积与单步预测不稳定问题。
网络结构

工作流程

1. 数据收集阶段
人类遥控机器人完成任务(比如插线、抓取)
系统记录:
- 每一刻的相机图像(多视角)
- 每一刻的机器人状态(关节角度)
- 每一刻对应的未来 K 步动作(动作块)
最终数据集格式:
(图像, 状态) → 未来 K 步连续动作
2. 模型训练阶段
训练目标
让模型学会:看到当前画面 → 输出未来一整段流畅动作
训练步骤
-
输入当前观测
-
图像 + 机器人状态 → 提取特征
-
CVAE 学习动作 “风格”
- 输入未来 K 步专家动作 → 输出一个隐变量 z
-
z 代表这段动作的意图 / 风格
-
Transformer 预测动作块
-
观测特征 + z → 直接输出未来 K 步动作
-
计算损失
- 预测动作 vs 专家动作:MSE 损失
- 隐变量 z 正则:KL 散度损失
- 总损失 = 重构损失 + KL 损失
-
反向传播更新模型
3. 推理阶段
推理时不需要专家动作,全自动预测:
- 相机拍图 + 读机器人状态
- 从正态分布随机采样 z(代表动作意图)
- Transformer 直接输出未来 K 步动作序列
- 只取最新一段动作执行
4. 机器人闭环执行
时间集成
每一步都会新生成一段 K 步动作,不同预测块之间重叠、加权、融合,让动作变得超级平滑、不抖动、误差不累积
数据收集:
人遥控 → 存(图像,状态 → 未来K步动作)
训练:
图像+状态 → 特征 → CVAE → z → Transformer → 预测K步动作
优化:MSE + KL
推理:
图像+状态 → 特征 → 随机z → Transformer → K步动作
时间集成 → 平滑动作
执行一步 → 循环
官方代码仓库:https://github.com/Interbotix/act.git
act 仓库主要包含以下核心文件 :
-
imitate_episodes.py:主训练和评估脚本,负责加载数据、配置参数和启动训练 -
policy.py:定义了ACT的策略类,即算法的核心逻辑 -
detr:存放模型定义(基于DETR架构修改而来)的目录 -
constants.py和utils.py:定义超参数和辅助函数 -
sim_env.py:用于训练和评估的仿真环境,采用关节空间控制的Mujoco + DM_Control环境
代码实现
安装ACT
#克隆仓库:
git clone https://github.com/tonyzhaozh/act.git
cd act
#创建并激活 Conda 环境:
conda create -n act_env python=3.8.10 -y
conda activate act_env
#安装核心依赖
pip install torch torchvision
pip install pyquaternion pyyaml rospkg pexpect
pip install mujoco==2.3.7 dm_control==1.0.14
pip install opencv-python matplotlib einops packaging h5py ipython
#安装 ACT 组件
cd act/detr
pip install -e .
训练模型1
1.生成数据
先用 record_sim_episodes.py 生成数据
cd .. # 回到act根目录
python3 record_sim_episodes.py \
--task_name sim_transfer_cube_scripted \
--dataset_dir ./data/sim_transfer_cube_scripted \
--num_episodes 50
2.打开constants.py

将第四行<put your data dir here>要改为./data
3.训练模型
python imitate_episodes.py \
--task_name sim_transfer_cube_scripted \
--ckpt_dir ./checkpoints \
--policy_class ACT \
--kl_weight 10 \
--chunk_size 100 \
--hidden_dim 512 \
--dim_feedforward 3200 \
--batch_size 8 \
--seed 42 \
--num_epochs 2000 \
--lr 1e-5 \
--temporal_agg
评估训练成果1
python imitate_episodes.py \
--task_name sim_transfer_cube_scripted \
--ckpt_dir ./checkpoints \
--policy_class ACT \
--kl_weight 10 \
--chunk_size 100 \
--hidden_dim 512 \
--dim_feedforward 3200 \
--batch_size 8 \
--seed 42 \
--num_epochs 1 \
--lr 1e-5 \
--temporal_agg \
--eval \ #评估模型
--onscreen_render #实时渲染
可视化分析结果1




训练模型2
1.生成数据
python record_sim_episodes.py \
--task_name sim_insertion_scripted \
--dataset_dir ./data/sim_insertion_scripted \
--num_episodes 50
2.模型训练
python imitate_episodes.py \
--task_name sim_insertion_scripted \
--ckpt_dir ./checkpoints_insertion \
--policy_class ACT \
--kl_weight 10 \
--chunk_size 100 \
--hidden_dim 512 \
--dim_feedforward 3200 \
--batch_size 8 \
--seed 42 \
--num_epochs 2000 \
--lr 1e-5 \
--temporal_agg
评估训练成果2
python imitate_episodes.py \
--task_name sim_insertion_scripted \
--ckpt_dir ./checkpoints_insertion \
--policy_class ACT \
--kl_weight 10 \
--chunk_size 100 \
--hidden_dim 512 \
--dim_feedforward 3200 \
--batch_size 8 \
--seed 42 \
--num_epochs 2000 \
--lr 1e-5 \
--temporal_agg \
--eval \
--onscreen_render
可视化分析结果2

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)