
ACTAction Chunking with Transformers ALOHA论文与开源代码一体化解读一、这篇工作要解决什么问题论文关注的是真实世界中的精细双臂操作fine-grained bimanual manipulation例如打开半透明调料杯、把电池插入槽位、穿线/绑扎等。这类任务难点集中在毫米级精度 双手协同动作链很长任何一步的小误差都会把系统推离可恢复状态。强接触与非线性撬开、捏合、撕开等接触过程很难用解析模型精确建模。闭环视觉反馈需要依赖多视角 RGB 输入来不断纠错而不是一次性规划。因此作者提出一个组合式答案低成本可复现的双臂遥操作硬件ALOHA把“高质量示范数据采集”变成现实。面向长时序模仿学习的算法ACT用“动作分块预测 Transformer CVAE”降低模仿学习的误差累积问题。二、论文核心思路抓住 ACT 的两个关键词1Action Chunking把“单步预测”改成“预测一段动作”经典 BCBehavior Cloning通常做的是给定观测 (o_t)预测 (a_t)。在精细操作里一旦预测 (a_t) 有小偏差就会导致状态漂移、越走越偏compounding error。ACT 的关键做法是在同一时刻直接预测一个长度为 (K) 的动作序列输出([a_t, a_{t1}, …, a_{tK-1}])直觉把有效控制地平线“缩短”减少“每一步都可能犯错”的次数。2CVAE Transformer用“风格变量 z”建模示范的多模态同一个观测下人类示范可能有不同“风格”速度、路径偏好、接触策略。ACT 用 Conditional VAEEncoder训练时用把 (qpos) 动作序列编码成潜变量 (z)Decoder推理时用丢弃 encoder把 (z) 设为先验均值代码里是 0由 decoder 生成动作 chunk实践含义在数据不多的情况下用生成式建模吸收示范多样性提升泛化稳定性。三、论文给出的开源仓库论文项目主页给出了两套核心代码库ALOHA遥操作/采集与 ACTSim算法仿真$TRAE_REFALOHA Codebasehttps://github.com/tonyzhaozh/alohaACTSim Codebasehttps://github.com/tonyzhaozh/act本文的代码解读主要围绕act仓库展开并在需要时指向aloha里的数据采集/真机运行入口。四、代码仓库整体结构先看 3 个入口文件1ACTSimtonyzhaozh/actREADME.md已经把关键入口列得很清楚建议按这个顺序读imitate_episodes.py训练与评估主脚本最核心policy.pyACTPolicy 的训练/推理接口封装loss 在这里detr/ACT 的模型定义基于 DETR 改record_sim_episodes.py/scripted_policy.py仿真环境生成数据utils.py数据集HDF5读取、归一化、随机切片采样等sim_env.py/ee_sim_env.pyMuJoCo dm_control 环境封装2ALOHAtonyzhaozh/aloha这个仓库偏“系统工程”aloha_scripts/遥操作、录制、回放等脚本launch/ROS launch4 相机 4 机械臂config/机器人端口/配置它的作用很明确解决“高质量示范数据怎么采”。五、论文到代码的对应关系最重要的一节下面按论文描述的组件把“论文概念 → 代码位置”列出来你后续做复现/二次开发基本就靠这张映射表论文组件代码入口你该看什么ACT 训练与评估流程imitate_episodes.py参数如何组织、怎么切 train/val、怎么保存 ckpt、eval loop 如何 rollout动作分块chunkimitate_episodes.pypolicy.pychunk_size→num_queries推理时输出 chunk 后如何取当前步动作Temporal ensembling时序集成imitate_episodes.py--temporal_agg分支把多次预测的 chunk 在同一时刻做指数加权融合CVAE含 KL训练目标policy.pyloss l1 kl_weight * kl训练时只取actions[:, :num_queries]Transformer CVAE 结构detr/models/detr_vae.pyencoder[CLS] qpos action_seq→zdecoder图像特征 proprio latent → action chunk数据集格式与采样策略utils.pyHDF5 路径、随机切片start_ts、padding 与is_pad、归一化统计六、关键实现细节把论文话术落到代码行级1“chunk_size”在代码里对应什么在imitate_episodes.py里policy_config[num_queries] args[chunk_size]这直接进入DETRVAE(num_queries...)推理时ACTPolicy 会输出形状大致为(batch, num_queries, action_dim)的动作序列你可以把它理解为DETR 的 object queries 被改造成 action queries。2CVAE 的“z”是怎么做出来的在detr/models/detr_vae.py的DETRVAE.forward()训练阶段actions is not Noneencoder_action_proj(actions)把动作序列投到hidden_dimencoder_joint_proj(qpos)把关节状态投到hidden_dim拼成encoder_input [CLS, qpos, action_seq]Transformer encoder 输出取CLStoken过latent_proj得到mu/logvarreparametrize()采样z再投回hidden_dim作为 decoder 的latent_input推理阶段latent_sample zeros(...)也就是把 (z) 固定到先验均值这和论文里的描述是严丝合缝的训练时用 encoder 学到“风格”推理时用固定 prior。3训练 loss 是什么哪里实现在policy.py的ACTPolicy.__call__()l1 L1(actions, a_hat)并用~is_padmask 掉 paddingkl kl_divergence(mu, logvar)总损失loss l1 kl_weight * kl这也是你后续做 ablation/替换 loss例如换成 Huber、加速度正则、contact-aware loss的关键切入点。4Temporal ensembling 到底怎么做在imitate_episodes.py的 eval loop先把每次预测到的all_actions写到all_time_actions[t, t:tnum_queries]然后取“所有对当前时刻 t 有预测的 chunk”做指数衰减加权平均exp_weights exp(-k * arange(N))再归一化最终raw_action sum(actions_for_curr_step * exp_weights)这个实现非常直观越新的 chunk 权重越大起到“平滑 抗抖动”的作用。七、怎么跑通或怎么复现以仿真为最低成本路径我这里不直接在你的机器上跑训练依赖 MuJoCo/torch/conda 环境但把“最短可复现路径”整理清楚确保你接下来可以按步骤跑通。1生成仿真数据脚本策略在act仓库里按 READMEpython3 record_sim_episodes.py\--task_namesim_transfer_cube_scripted\--dataset_dirdata save dir\--num_episodes50生成的数据是episode_*.hdf5结构在utils.py能看到/observations/qpos/observations/qvel/observations/images/cam_name/actionroot.attrs[sim]2训练 ACTpython3 imitate_episodes.py\--task_namesim_transfer_cube_scripted\--ckpt_dirckpt dir\--policy_classACT\--kl_weight10\--chunk_size100\--hidden_dim512\--batch_size8\--dim_feedforward3200\--num_epochs2000\--lr1e-5\--seed03评估 视频在相同命令基础上加--eval。若要启用 temporal ensembling加--temporal_agg对应的实现就在imitate_episodes.py。八、优点、局限与我的理解偏工程视角优点为什么 ACT 适合精细操作把“长时序误差累积”变成“短时序 chunk 回归”这是最关键的工程优势。模型结构高度可复用DETR 改造 CVAE代码层面很好改换 backbone、加传感器、加语言条件等。数据管线非常朴素HDF5 随机切片 padding mask利于真实数据快速迭代。局限你复现时最容易踩的坑对高质量示范很敏感这也是为什么论文必须配 ALOHA。chunk_size/kl_weight/训练轮数很关键README 里也强调“loss plateau 之后继续训动作会更顺滑”。视觉分辨率与多相机拼接当前实现把多相机特征在宽度维 concattorch.cat(all_cam_features, axis3)对显存/速度有影响后续扩展更多相机要注意。九、适合继续深入的阅读入口按优先级imitate_episodes.py先把训练/评估主流程读通policy.py搞清楚训练时输入输出与 lossdetr/models/detr_vae.py把 CVAE 的 encoder/decoder 对上论文图utils.py看数据怎么被随机切片、padding、归一化aloha/aloha_scripts当你要上真机采数据时再深入