概念

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

网络结构

工作流程

1. 数据收集阶段

人类遥控机器人完成任务(比如插线、抓取)

系统记录:

  • 每一刻的相机图像(多视角)
  • 每一刻的机器人状态(关节角度)
  • 每一刻对应的未来 K 步动作(动作块)

最终数据集格式:

(图像, 状态) → 未来 K 步连续动作


2. 模型训练阶段

训练目标

让模型学会:看到当前画面 → 输出未来一整段流畅动作

训练步骤
  1. 输入当前观测

  • 图像 + 机器人状态 → 提取特征

  • CVAE 学习动作 “风格”

  • 输入未来 K 步专家动作 → 输出一个隐变量 z
  • z 代表这段动作的意图 / 风格

  • Transformer 预测动作块

  1. 观测特征 + z → 直接输出未来 K 步动作

  2. 计算损失

    • 预测动作 vs 专家动作:MSE 损失
    • 隐变量 z 正则:KL 散度损失
    • 总损失 = 重构损失 + KL 损失
  3. 反向传播更新模型


3. 推理阶段

推理时不需要专家动作,全自动预测:

  1. 相机拍图 + 读机器人状态
  2. 从正态分布随机采样 z(代表动作意图)
  3. Transformer 直接输出未来 K 步动作序列
  4. 只取最新一段动作执行

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

Logo

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

更多推荐