动作碎片变化器 (ACT):机器人模仿学习的完整指南 (2026)
Master ACT (Action Chunking Transformers):架构,对实际机器人数据的培训,零件尺寸调整和在OpenArm和移动ALOHA上部署.包括PyTorch代码,超参数指南和数据集格式规格.
深入了解ACT
行动缩是什么,为什么重要
标准行为克隆预测从当前观察中下一次行动.这在理论上运行,但在实践中分解:随着时间的推移,小预测错误积累,导致机器人漂移到训练中从未见过的状态.
** 动作分量** 通过一次预测未来行动的 _ 序列来解决这个问题. 典型的时间步骤是50
感觉很简单:当你伸手去一杯时,你不会独立决定每毫秒.你计划一个单一的流
ACT(Action Chunking with Transformers),由Tony Zhao等人在2023年在斯坦福大学推出,将此行动
暂时抽象:减少有效的视野
对于一个50Hz控制的典型操纵任务,需要250
这就是为什么ACT使用如此少的示范工作:学习问题更简单.而不是从观察到单一7DOF行动 (对于典型的机器人臂) 学习绘图,模型从观察到100×7行动轨迹学习绘图.轨迹结构提供强大的自我监督.
建筑深度潜水
ACT使用了有条件变量自动编码器 (CVAE) 与变压器编码器-解码器背骨.了解这种架构对于有效的训练和调试是必不可少的.
欧盟的经济发展框架
编码器在训练过程中观察了当前状态和基础真相行动序列,将它们压缩成一个分布在 _z_上.解码器从这个分布中取样加上当前观察,并重建了行动序列.
在推断过程中,编码器被丢弃.解码器从前 (标准正常分布) 和当前观察中接收样本,然后生成行动部分.损失中的KL分离术语确保后部保持接近前,因此在测试时间从前部进行样本产生合理的行动序列.
编码架构
通过 ACT 编码器处理多模态输入:
- 摄像头图像:通过视觉脊柱 (默认ResNet-18,VIT可选).多个摄像头视图 (手腕+上头) 独立处理并连接.
- **关节位置 (qpos) **:目前的机器人关节角,通常每臂加上抓住器状态6
7DOF. - ** 行动序列 (仅进行训练) **: 未来的 _k_行动的基本真实部分,用于CVAE编码器计算后部分布.
输入符号化并输入到变压器编码器中.输出是一个隐藏的表示,该表示是投影到后部分布的平均和变异.
解码器架构
解码器是一个标准的变压器解码器,具有可学习的行动查询**.有 _k_查询 (每一个时间步骤在部分中),每个都被初始化为学习嵌入.解码器交叉处理编码的观察令牌和样本的隐藏 z,然后通过线性投影头输出 _k_行动向量.
每个预测的操作都是包含联合位置目标 (6
损失功能
# ACT loss computation (simplified)
L_reconstruction = L1_loss(predicted_actions, target_actions) # [batch, chunk_size, action_dim]
L_kl = KL_divergence(posterior_mean, posterior_logvar, prior) # regularize latent space
L_total = L_reconstruction + beta * L_kl # beta typically 10-20
基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基基隆基隆基隆基隆基基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆基隆
数学直觉: 选择块大小
部分大小_k_是ACT中最重要的单个超参数.它决定了模型在每个步骤中预测的未来行动数量.
控制频率关系
在50 Hz控制 (大多数机器人臂的标准),直接到预测视野的零件尺寸图:
| Chunk Size | Prediction Horizon | Best For |
|---|---|---|
| 25 | 0.5 seconds | Very fast reactive tasks, contact transitions |
| 50 | 1.0 second | Quick pick-and-place, single-arm tasks under 3 seconds |
| 100 | 2.0 seconds | Default — most tabletop manipulation tasks |
| 150 | 3.0 seconds | Slow precision tasks (insertion, assembly) |
| 200 | 4.0 seconds | Long-horizon smooth motions (pouring, wiping) |
理想的部分尺寸应该覆盖大约一个完整的子动作. 选择和位置任务:到达到抓取运动需要1.5秒,所以chunk_size=75
暂时组装
在部署过程中,ACT在每一步 (或每几步) 产生一个新的部分.在每一步控制时,执行的行动是重量平均重量重量重量重量预测:
# Temporal ensembling (exponential weighting)
# w controls the blending — lower w gives more weight to recent predictions
w = 0.01 # default temporal ensembling weight
for t in range(episode_length):
new_chunk = policy.predict(observation_t) # shape: [chunk_size, action_dim]
for i in range(chunk_size):
all_predictions[t + i].append(new_chunk[i])
# Weighted average with exponential decay
weights = [np.exp(-w * j) for j in range(len(all_predictions[t]))]
action_t = np.average(all_predictions[t], weights=weights, axis=0)
时间组合重量 (通常是0.01) 控制了较老预测的衰退速度.较小的 w 给较老预测的重量 (更轻,但反应更慢).较大的 w 支持最近的预测 (更反应性,但可能是紧张).
对于ACT的数据收集要求
最少的剧集数
| Task Category | Episodes Needed | Expected Success Rate | Collection Time |
|---|---|---|---|
| Simple pick-and-place | 50–100 | 85%+ | 2–4 hours |
| Bimanual coordination | 100–200 | 80%+ | 4–8 hours |
| 精度 insertion (peg-in-hole) | 200–400 | 70%+ | 1–2 days |
| Complex multi-step tasks | 500+ | 60%+ | 2–5 days |
| Dexterous manipulation | 500–1,000 | 50%+ | 1–2 weeks |
数据质量检查清单
- 一致的示范:使用一个运算器 (或具有非常相似的风格的运算器).ACT假设单模的行动分布
混合风格混 模型. - 固定物体放置区:物体应该从大约相同的区域开始 (在5厘米的变化范围内).除非明确训练它们,否则ACT不会很好地将空间变化概括为大.
- 清洁的开始/结束状态:每个集都应该从相同的位置开始,并且应该清洁地结束 (对象的抓住器关闭,或者对象放在目标).
- 一致的时间:尝试在示范中以相似的速度执行任务. 时间变化大,导致行动分布的模糊性.
- 摄像头稳定性:摄像头必须紧密安装. 任何相机在剧集之间转移会显著降低性能.
HDF5数据格式
RCSV将所有收集的数据提供在HDF5格式中,这是ACT训练标准.每个集都作为一个单一的HDF5文件存储,具有以下结构:
# HDF5 episode structure for ACT training
episode_0.hdf5
├── observations/
│ ├── qpos # [T, 7] — joint positions (6 DOF + gripper)
│ ├── qvel # [T, 7] — joint velocities
│ ├── images/
│ │ ├── cam_high # [T, 480, 640, 3] — overhead camera
│ │ └── cam_wrist # [T, 480, 640, 3] — wrist camera
│ └── effort # [T, 7] — joint torques (optional)
├── action # [T, 7] — target joint positions
└── attrs/
├── sim # False (real robot data)
├── compress # True
└── num_timesteps # T
对于ACT准备的数据收集服务,请参阅[RCSV数据服务]
摄像头设置建议
ACT性能主要取决于摄像头配置.原始的ALOHA设置使用了三个摄像头:
- 面部摄像头 (要求): 工作空间高于0.8
1.2米,直向下. 提供了场景和物体位置的全球视图. 解析度:最低640×480. - 手腕摄像头 (强烈建议)::安装在机器人手腕或前臂上.在抓住和插入时提供近距离视图.对于高精度任务至关重要,在空头摄像头无法解决细节时.
- **侧相机 (可选) **:提供了空头和手腕视图可能错过的深度信息. 对于涉及垂直堆
或高度敏感的放置任务来说最有用.
使用固定曝光和白色平衡的USB3.0摄像头 (Logitech C920或Intel RealSense D405).自动曝光会导致节目之间的图像亮度不一致,从而降低了训练.
经历训练
本节将通过使用LeRobot框架和直接 PyTorch实现的ACT政策培训.
训练与LeRobot (推)
拥抱脸的 [LeRobot]
# Step 1: Install LeRobot
pip install lerobot
# Step 2: Convert HDF5 data to LeRobot format
python -m lerobot.scripts.convert_dataset \
--raw-dir ./my_episodes/ \
--repo-id my-org/pick-place-task \
--raw-format hdf5_aloha
# Step 3: Train ACT policy
python -m lerobot.scripts.train \
policy=act \
dataset_repo_id=my-org/pick-place-task \
training.num_epochs=2000 \
training.batch_size=8 \
policy.chunk_size=100 \
policy.n_action_steps=100 \
policy.dim_model=512
# Step 4: Evaluate
python -m lerobot.scripts.eval \
--pretrained-policy-name-or-path outputs/train/act_pick-place-task/checkpoints/last/pretrained_model \
--env-name real_world \
--n-episodes 20
训练通常在2
直接 PyTorch 训练配置
对于需要更多控制训练循环的团队或想将ACT集成到自定义管道中:
# ACT training configuration — direct PyTorch implementation
import torch
from act.policy import ACTPolicy
from act.train import train_bc
config = {
# Architecture
'chunk_size': 100, # action chunk length (timesteps)
'hidden_dim': 512, # transformer hidden dimension
'dim_feedforward': 3200, # feedforward network dimension
'num_encoder_layers': 4, # transformer encoder layers
'num_decoder_layers': 7, # transformer decoder layers
'nheads': 8, # attention heads
'latent_dim': 32, # CVAE latent dimension
# Training
'lr': 1e-5, # learning rate (Adam)
'weight_decay': 1e-4, # L2 regularization
'num_epochs': 2000, # total training epochs
'batch_size': 8, # batch size (8 fits on 24 GB VRAM)
'kl_weight': 10, # beta for KL divergence term
'seed': 42,
# Data
'camera_names': ['cam_high', 'cam_wrist'],
'image_size': [480, 640], # H, W
'action_dim': 7, # 6 DOF + gripper
'state_dim': 7, # joint positions
# Augmentation
'color_jitter': True, # random brightness/contrast
'random_crop': True, # spatial augmentation
}
# Initialize and train
policy = ACTPolicy(config)
optimizer = torch.optim.AdamW(policy.parameters(), lr=config['lr'], weight_decay=config['weight_decay'])
train_bc(policy, optimizer, dataloader, config)
训练技巧
高 (1e-4) 导致训练不稳定,过低 (1e-6) 过于缓慢收缩. - 批量量:使用8用于24GBVRAM (RTX 4090).减少到4用于12GBVRAM (RTX 3060).A100上更大的批量 (16
32) 提高了稳定性. 期:至少2000个时代的时间. ACT通常在长期高原后在1000~1500个时代左右出现了突然的改善. - 检查点:每500个时代都省钱. 评估所有保存的检查点.
- 行动正常化:使用数据集统计数据将行动正常化到[-1, 1].不正常化行动以每个关联原因的不同规模的训练失败.
超参数调节指南
ACT的超参数比扩散政策少,但三个参数需要对每项新任务进行仔细调整.
零件大小
根据这个决定过程:
- 测量任务中单次子动作的平均持续时间 (例如,达到对象:1.5秒).
- 乘以控制频率:1.5s × 50 Hz = 75个时间步骤.
- 圆满到最接近25个:
- 如果任务有非常不同的阶段 (到达,抓住,撤回),则该部分应覆盖至少一个完整的阶段.
标志着你的小块尺寸是错误的:
- 机器人在转变时犹
,运动不顺利,在运动中被困. - 太大:机器人过度预测任务结束,做出过早运动,浪费了对未来不必要的预测的训练能力.
基质量 (kl_重量 / β)
控制CVAE规律化.默认是10.
- β = 0:没有CVAE规范化.模型退化为标准行为克隆 (没有隐藏变量).使用此为基线,但预计性能更差.
- β = 10 (默认):对于大多数任务来说,平衡性很好. 隐藏空间可以捕捉到示范变化性,而不会崩
. - β = 20
50 :更强的规律化,产生更一致的 (变量较少) 轨迹. - 模型忽略了数据,产生了平均行为.
查询数 (查询数)
在原始的ACT中,num_queries等于chunk_size (每时间步骤一个查询).一些实现允许分离这些,使用较少的查询和上层样本.除非你有具体的原因改变这一点,保持num_queries =chunk_size.
视觉脊柱
根据 ResNet-18 标准,它可以在大多数任务中进行操作.
- **ViT (DINOv2) **:更适用于需要精细的视觉理解 (阅读标签,精确的调整) 任务.
- ResNet-50:对于大多数操作任务,比ResNet-18有了微小的改善,但使用存储器的使用量翻了一番.
- 高效网:适用于有限计算的移动部署.
硬件推
通过RCSV提供最好的选项:
| Robot Platform | Price | Configuration | Best ACT Use Case | Lease from RCSV |
|---|---|---|---|---|
| OpenArm 1 | $4,500 | 6-DOF, leader-follower, open-source | Single-arm ACT research, entry-level imitation learning | from $800/mo |
| DK1 Bimanual | $12,000 | Dual 6-DOF arms, ALOHA-compatible | Bimanual ACT (original ALOHA workflow), folding, assembly | from $1,500/mo |
| Unitree G1 | $16,000 | 23-DOF humanoid, dual arms + locomotion | Whole-body ACT, mobile manipulation, loco-manipulation | from $2,500/mo |
| Unitree Go2 | $2,800 | 四足机器人, arm attachment option | Locomotion + arm manipulation, outdoor tasks | from $800/mo |
计算要求
| GPU | VRAM | Max 批大小 | Training Time (200 eps) | Inference 延迟 |
|---|---|---|---|---|
| RTX 3060 | 12 GB | 4 | 8–16 hours | ~20 ms |
| RTX 4090 | 24 GB | 8 | 2–8 hours | ~12 ms |
| A100 | 40/80 GB | 16–32 | 1–3 hours | ~8 ms |
| H100 | 80 GB | 32–64 | <1 hour | ~5 ms |
ACT是最具计算效率的模仿学习算法之一. 一个消费者RTX 3060足以进行培训和实时部署,使其可供小型实验室和个人研究人员使用.
常见的故障模式和解决方案
虽然ACT培训相对简单,但部署失败是常见的.
机器人在任务中偏离轨道
原因:示范不足或示范质量不一致.
修正:收集50个更多的示范,集中在漂移发生的确切区域.确保所有示范都遵循相同的策略.检查摄像头位置没有转移.
2. 动或振荡运动
原因:时间性重量太高,或小块.
** 修正**:减少时间组合重量 (试用0.005而不是0.01). 增加25
3. 机器人在抓/释放过渡时结
部分演示程序早些时候抓住,有些晚些时候抓住,从而产生了双模分布,ACT平均将其分为"半开放".
修正:重新收集示范,并保持一致的抓住时间.
训练失败平原,但表现不佳
原因:KL重量太高 (β > 50),导致后部崩
5. 在训练物体上工作,但在新物体上失败
原因: ACT默认不将其通用到新对象. 它是一个单任务算法.
** 修正**:采用各种物体 (不同颜色,尺寸,形状) 进行示范.使用图像增强 (颜色
双手协调失败
武器可以独立预测, 失去协调时间.
修正:确保两臂的动作都在同一动作向量中 (14-DOF: 7 个臂).不要每臂训练单独的策略. 增加分量以覆盖完整的协调运动.
行动与传播政策:何时使用哪种
| Dimension | ACT | Diffusion Policy |
|---|---|---|
| Data efficiency | 50–200 demos | 100–500 demos |
| Multi-modal actions | Limited (CVAE helps but not fully multimodal) | Excellent (denoising naturally captures multiple modes) |
| Inference speed | 50+ Hz (single forward pass) | 10–30 Hz (iterative denoising) |
| 轨迹 smoothness | Good (temporal ensembling) | Excellent (inherent to diffusion process) |
| Training time | 2–8 hours (RTX 4090) | 4–16 hours (RTX 4090) |
| Hyperparameter sensitivity | Low (mainly chunk_size and kl_weight) | Medium (noise schedule, denoising steps, network architecture) |
| Language conditioning | Not supported natively | Not supported natively (extensions exist) |
| Framework support | LeRobot, robomimic | LeRobot, robomimic, diffusion_policy repo |
| Best for | Fast prototyping, single-strategy tasks, limited data budgets | Multi-strategy tasks, contact-rich manipulation, diverse operator data |
**
实际机器人部署
一旦训练,部署ACT政策需要加载模型并运行它在控制循环中.以下是最小部署脚本:
# ACT deployment on real robot (pseudocode)
import torch
import numpy as np
from act.policy import ACTPolicy
# Load trained policy
policy = ACTPolicy.load("checkpoints/act_epoch_2000.pt")
policy.eval()
policy.cuda()
# Initialize robot and cameras
robot = RobotInterface(port="/dev/ttyUSB0", hz=50)
cameras = CameraInterface(names=["cam_high", "cam_wrist"])
# Action buffer for temporal ensembling
all_actions = {}
temporal_weight = 0.01
for t in range(max_steps):
# Get observation
images = cameras.get_images() # dict of [H, W, 3] arrays
qpos = robot.get_joint_positions() # [7]
# Predict action chunk
with torch.no_grad():
obs = preprocess(images, qpos) # normalize, resize, to_tensor
action_chunk = policy(obs) # [chunk_size, action_dim]
action_chunk = action_chunk.cpu().numpy()
# Temporal ensembling
for i in range(len(action_chunk)):
if (t + i) not in all_actions:
all_actions[t + i] = []
all_actions[t + i].append(action_chunk[i])
if t in all_actions:
preds = np.array(all_actions[t])
weights = np.exp(-temporal_weight * np.arange(len(preds)))[::-1]
action = np.average(preds, weights=weights, axis=0)
else:
action = action_chunk[0]
# Execute action
robot.set_joint_positions(action[:6])
robot.set_gripper(action[6])
robot.step()
robot.go_home()
高级专题
通过VLA预训练进行 ACT
最近的研究 (2025
性操纵的行为
应用ACT到精通手 (如17DOF的 Orca Hand 需要调整:
- 增加动作_dim以匹配手 DOF (例如,为6DOF手臂+17DOF手,23).
- 提高小块大小到150
200 巧妙的操纵运动更慢,更复杂. 头相机无法解决指部配置. - 收集500多个示范
更高维度的行动空间需要更多数据.
多任务的行为
标准ACT是单任务操作.在实践中,多任务操作的方法是两种:
- 任务条件 ACT:将一个任务嵌入 (单热或学习) 添加到编码器输入中.训练多项任务的混合数据. 适用于3
5相关任务. - 语言条件 ACT:用一个冷
的 CLIP 或 SigLIP 模型编码的语言指示取代嵌入式任务.更灵活,但需要每个任务的更多数据.
常见的问题
变体处理 (ACT) 是什么?
ACT是一个由托尼·
现在,我们需要多少次演示?
对于简单的选择和放置,50
我应该使用什么尺寸?
开始100时50Hz (2秒).对于快速任务,总共低于3秒,减少到50次.对于缓慢精度任务,增加到150
能否处理多个有效的策略?
ACT的CVAE隐形变量提供了一些多模式性,但它基本上是为单模态行动分布而设计的.如果你的任务具有真正不同的有效策略 (例如从左到右抓),ACT将平均它们,产生失败的中轨迹.用于多模态任务,使用[
根据"法定定性"的规定,
HDF5是标准格式.每个集包含联合位置 (qpos),联合速度 (qvel),摄像头图像和目标操作.RCSV的 [数据收集服务]
从2500美元收集ACT准备训练数据
斯威尔士国家安全委员会为ACT训练提供端到端数据收集:校准式多摄像头设置,训练有素的电话操作员,质量控制和HDF5或LeRobotParquet格式的交付.试点项目为100集开始于2,500美元;全场运动从8,000美元开始500集以上.







