アクション・チャンキング・トランスフォーマー (ACT):ACT政策の訓練と導入に関する完全なガイド (2026)
ACTの完全なガイド:アクション・チャンキングを理解し,ロボットデータに関する ACTポリシーを訓練し,OpenArmまたはMobile ALOHAに展開する.時間的なアンサンブル,チャンクサイズチューニング,レロボットの統合をカバーする. 2026年更新.
[←ガイド]
タイムロウイティ理論とCVAEトレーニングから,LeRobotとACT+のトレーニングパイプラインを通じて,タイムアンサンブル推論によるOpenArmとMobile ALOHAでリアルハードウェア部署まで.
1 行動チャンキングとは何か?
アクション・チャンキングは,ポリシーは,次のアクションではなく,将来のアクションの連続を予測する模倣学習の技術である.ロボットはこの部分の一部を実行し,新しい重複した部分のためにポリシーのリクエストを繰り返します. 単段階行動クローン (BC) を襲う複合エラー問題に抵抗するより平滑で時間的に一貫した軌跡です
標準BCでは,制御ステップごとに1つのアクションを予測する.各予測エラーにより,ロボットがこれまで見たことがなかった状態に移動し,次の予測が悪化する.50Hz (4秒操作) で200ステップ経路を過ぎると,ステップごとに1%のエラーが結合され,デモ分布から漂流する可能性は ~87%である. 行動分断は, k_ステップの計画 (通常は 50 Hz で 50
パーツサイズ: 最も 重要 な 超パラメーター
ブロックサイズ k は軌道の滑らしさと環境反応性の間のトレードオフを決定します.大きなブロックは滑らかな動きを生成しますが,当時のブロックが実行を終えるまで予期しない出来事 (オブジェクトの移動,障害物が現れた) に反応することはできません.より小さなブロックはより速く反応しますが,滑らしさの優位性を失い,複合エラーを再導入します.
任務タイプによる推奨開始点:
- テーブルテーブルのピックアンドプレイス: k=50
100 (1 2秒) 環境は静態で,スムーズさは反応性よりも価値があります. - 組み立てと挿入: k=30
60.接触に富んだ相は,調整誤りのためにより頻繁な再計画が必要である. - 双手調整:** k=50
80. 両腕には調整された塊が必要で,短すぎる塊は調整を断ち切る. - 移動操作: k=20
40のベース, k=50 80の腕. - ダイナミックな作業 (捕獲,回避): k=10
20. 活性性は極めて重要です.
なぜ 行動 減量 が 効果 を 得る の は: 暫定 的 な 滑らかな 議論
単段階 BC ポリシーでは,各段階を独立した方法で処理します.モデルが条件分布 P
モデルが k ステップを同時に予測することで,内部に一貫した軌道の段落を生成する必要があります.訓練損失は,全体に共同で罰を与え,ネットワークが孤立したフレームバイフレーム予測よりもスムーズな動き原始性を学ぶことを強制します. これは,複数のトークンを同時に生成する際に,言語モデルがより一貫したテキストを生成する方法と,同時にトークンをサンプルする方法と類似している.
2.ACT建築
ACTは,トランスフォーマー背骨を持つ条件変異自動エンコーダー (CVAE) を使用する.アーキテクチャは3つの主要構成要素である.CVAEエンコーダー (トレーニング中にのみ使用),トランスフォーマーデコーダー (トレーニングと推論の両方で使用),およびビジョンバックbone.
CVAEエンコード (訓練のみ)
訓練中に,エンコードは完全なデモ
暗号は,全アクションシーケンスと現在の観測を監視するトランスフォーマーである. Gaussian をパラメータ化する平均とログ変数を出力し,そこから z を再振変数化トリックでサンプル化する. KL 差分用語 (ベータで重量化され,通常は 10
結論として,z は 0 (先の平均) に設定され,政策決定的なものとする.CVAE 構造は純粋に訓練補助である:それなしでは,モデルは示範スタイルを平均して,すべてのアプローチの平均であり,したがってそれらのいずれも (モード平均) の平均である動きを生成する. CVAEによって,モデルは各スタイルを別々に解読し,推論時にゼロ平均 z が最も"典型的な"実行を生成します.
トランスフォーマーデコーダー (訓練+インフェレンスの)
解読器は,三つの入力をとる: latente z (またはゼロ),視野脊椎 + proprioceptionからの観測トークン,およびk学習可能な位置探求 (部分のアクションごとに1つ).標準トランスフォーマー横断注意は,位置探求が観測トークンに関わるようにして,平行でkアクション予測を生成します.
ACTのオリジナルの実装からアーキテクチャの詳細:
- エンコードレイヤ: 4 (プロセス観察 + z をコンテキストトークン に 変換する)
- デコッダレイヤ: 7 (より深く,より多くの作業を行うため:完全なアクション部品を生成する)
- 隠れた次元: 512
- 注意力: 8
- 前向きの尺寸: 2,048
- 総パラメータ: ~40M (視力脊髄を除く)
- アクション出力: k 共同位置目標 (例えば,双手 ALOHA の k=100 ステップ x 14 結合)
視力 の 脊椎
カメラビューはそれぞれResNet-18によって独立して処理され,機能地図 (15x20x512から480x640入力) を生成し,カメラあたり300トークンに平ら化されます. 2
最低可行なカメラ設定は2つのビューである.一台の腕に搭載されたカメラ (近距離操作細部) と一台のオーバーヘッドカメラ (空間文脈) 三台のカメラ (1腕 + 2人の第三者) は,RCSV標準であり,2台のカメラセットアップと比較して精度作業で5
3 データの要求
ACTは,同期 (観察,行動) のペアとして保存された人間による遠隔操作デモから学ぶ.データ品質は量よりも重要だ. 清潔なデモ50件は騒音なデモ500件を上回る.
作業の複雑性による最小データセットサイズ
| Task Type | デモンストレーション Needed | Approx. Collection Time | Notes |
|---|---|---|---|
| Simple pick-and-place (fixed location) | 20–30 | 30 minutes | Lowest bar for proof-of-concept |
| Pick-and-place with pose variation | 50–80 | 1–2 hours | Must cover workspace uniformly |
| Multi-step manipulation | 100–150 | 3–4 hours | Each phase needs coverage |
| Bimanual coordination | 150–250 | 5–8 hours | Coordination patterns require more examples |
| Contact-rich assembly (insertion, screwing) | 200–400 | 8–16 hours | Force-sensitive phases need dense coverage |
データ品質チェックリスト
- ** 休憩なし:** デモは継続的に流れるべきです.
- 一貫した速度: 急速と遅いデモを混ぜることで,速度変動に関するCVAEの潜伏能力が無駄になります.
- ** 清潔なスタート/終了:** 各エピソードも類似した中立姿勢から始まり,はっきりと終了します.
- 成功のみ: 失敗したデモをすべて削除する.ACTはすべてのトレーニングデータを専門家によるデモとして扱う.
- カメラの一貫性: 硬いマウントを使用します.セッション間のカメラのシフトの5mmでさえ,把握の精度を低下させます.
データのフォーマット: HDF5と RLDS
ACTトレーニングデータには標準形式はHDF5で,各エピソードが画像 (n__camera x H x W x 3, uint8),関数位置 (qpos, float64),関数速度 (qvel, float64),アクション (float64) のデータセットを含むグループとして保存されます.LeRobotは,Hugging Face Hubから効率的なストリーミングのために,エピソードレベルでタイムスタンプを保存します.
プラットフォーム間互換性のために,GoogleのOpen X-Embodimentで使用されているRLDS (Reinforcement Learning Datasets) 形式は,標準化されたスケーマを持つTFRecordファイルとしてエピソードを保存します.LeRobotは HDF5,RLDS,およびネイティブ パークレットフォーマット間の変換ユーティリティを提供します.詳細な変換指示については,当社の [データフォーマットガイド](
# HDF5 episode structure for ACT training
import h5py
import numpy as np
with h5py.File("episode_0042.hdf5", "r") as f:
# Camera images: (T, H, W, 3) uint8
cam_high = f["/observations/images/cam_high"][:] # overhead camera
cam_wrist = f["/observations/images/cam_wrist"][:] # wrist camera
# Joint state: (T, n_joints) float64
qpos = f["/observations/qpos"][:] # joint positions (radians)
qvel = f["/observations/qvel"][:] # joint velocities (rad/s)
# Actions: (T, action_dim) float64
actions = f["/action"][:] # target joint positions
print(f"Episode length: {len(qpos)} steps")
print(f"Control frequency: {f.attrs['control_freq']} Hz")
print(f"Camera resolution: {cam_high.shape[1]}x{cam_high.shape[2]}")
# Typical output:
# Episode length: 400 steps
# Control frequency: 50 Hz
# Camera resolution: 480x640
4. レロボットでACT訓練
[LeRobot] (
設置
# Clone and install LeRobot
git clone https://github.com/huggingface/lerobot.git
cd lerobot
pip install -e ".[act]"
# Verify GPU is available
python -c "import torch; print(f'CUDA: {torch.cuda.is_available()}, Device: {torch.cuda.get_device_name(0)}')"
訓練司令部
# Full ACT training command
python lerobot/scripts/train.py \
--policy.name=act \
--dataset.repo_id=svrc/openarm_pick_place \
--policy.chunk_size=50 \
--policy.n_obs_steps=1 \
--policy.dim_model=512 \
--policy.n_heads=8 \
--policy.n_encoder_layers=4 \
--policy.n_decoder_layers=7 \
--policy.latent_dim=32 \
--policy.kl_weight=10.0 \
--training.learning_rate=1e-5 \
--training.batch_size=8 \
--training.num_epochs=5000 \
--training.eval_freq=500 \
--training.save_freq=1000 \
--device=cuda \
--output_dir=outputs/act_openarm_pick_place/
超パラメータ参照
| Hyperparameter | Default | Search Range | Effect of Increasing | When to Increase |
|---|---|---|---|---|
| chunk_size (k) | 100 | 20–200 | Smoother trajectories, less reactive | Smooth tasks (wiping, pouring) |
| latent_dim (z) | 32 | 16–64 | More expressive style capture | High demonstration variance |
| kl_weight (beta) | 10 | 1–100 | Stronger regularization | Small datasets (<50 demos) |
| learning_rate | 1e-5 | 5e-6–5e-5 | Faster convergence, instability risk | Large datasets (>200 demos) |
| temporal_ensemble_temp | 10 | 5–50 | Slower blending, more inertia | Smoother tasks |
| n_cameras | 2 | 1–4 | Richer spatial info, more compute | 3D reasoning tasks |
| backbone | ResNet-18 | ResNet-18/34/50 | Better visual features | Cluttered or varying-light scenes |
| num_epochs | 3000 | 1000–8000 | Better fit, overfitting risk | More demos or complex tasks |
GPUの要件
- 最小: 16 GB VRAM (RTX 4060 Ti, RTX 3090). バッチサイズ4
8.トレーニング時間:200話4 8時間. - 推奨: 24 GB VRAM (RTX 4090). バッチサイズ 16.トレーニング時間: 2
4時間,200話. - ** 急速な再演:** 40
80 GB (A100,H100). バッチサイズ 32 64.トレーニング時間: 30 90分.高速ハイパーパラメータースイープを可能にします.
5. ACT+ (オリジナルリポジトリ) の ACT+の訓練
トニー・シャオのリポジトリ ([tonyzhaozh/act](
# Training with the original ACT repo
git clone https://github.com/tonyzhaozh/act.git
cd act
pip install -r requirements.txt
# Train on custom data
python train.py \
--task_name openarm_pick_place \
--ckpt_dir checkpoints/openarm_pp \
--policy_class ACT \
--kl_weight 10 \
--chunk_size 50 \
--hidden_dim 512 \
--batch_size 8 \
--dim_feedforward 2048 \
--num_epochs 5000 \
--lr 1e-5 \
--seed 0 \
--num_steps 400 \
--camera_names cam_high cam_wrist
**LeRobot vs.オリジナル・レポ:**LeRobotはより良く維持され (アクティブ・コミュニティ,定期更新,マルチポリシーサポート) データを自動的にロード・評価する.オリジナル・レポはより直接的なコントロールを与え,研究実験のために変更が簡単である.生産部署ではLeRobotを推奨する.研究フォークでは,オリジナル・レポはハッキングが容易である.
6.実用ハードウェアで展開する
ACTポリシーを導入するには,リアルタイム制御制約を満たす必要があります. 推論ループはカメラ画像処理とアクションブロックの計算中にロボットの制御周波数 (通常は50 Hz = 20ms/サイクル) で実行する必要があります.
推移ループの建築
import torch
import numpy as np
from collections import deque
class ACTInferenceLoop:
def __init__(self, policy, chunk_size=50, temporal_temp=10.0, query_freq=5):
self.policy = policy
self.chunk_size = chunk_size
self.temporal_temp = temporal_temp
self.query_freq = query_freq # re-query every N steps
self.action_queue = deque(maxlen=chunk_size)
self.step_count = 0
def get_action(self, images, qpos):
"""Returns a single action with temporal ensembling."""
if self.step_count % self.query_freq == 0:
# Get new action chunk from policy
with torch.no_grad():
obs = {
"images": torch.tensor(images).unsqueeze(0).cuda(),
"qpos": torch.tensor(qpos).unsqueeze(0).cuda(),
}
chunk = self.policy(obs) # (1, chunk_size, action_dim)
chunk = chunk.squeeze(0).cpu().numpy()
self.action_queue.append({
"actions": chunk,
"generated_at": self.step_count
})
# Temporal ensembling: blend overlapping chunks
action = np.zeros_like(self.action_queue[0]["actions"][0])
total_weight = 0.0
for entry in self.action_queue:
offset = self.step_count - entry["generated_at"]
if offset < self.chunk_size:
weight = np.exp(-offset / self.temporal_temp)
action += weight * entry["actions"][offset]
total_weight += weight
action /= total_weight
self.step_count += 1
return action
遅延予算50Hz
50 Hz制御では,各サイクルには20msの予算があります.典型的な分解:
- カメラキャプチャ +プリプロセッシング: 2
5ms (USB3カメラ,サイズを480x640) - ACT推論: 2
12ms (GPUに依存する;下記の基準表を参照) - アクションインターポレーション +コマンド送信: 1
2ms - 安全チェック: 1ms
- ** 限界:** 0
14ms
プラットフォームによる推論基準
| Hardware | ACT Inference (ms) | Max Control Rate (Hz) | Suitable For |
|---|---|---|---|
| NVIDIA A100 (80GB) | 1.8 | 555 | Cloud/datacenter inference |
| NVIDIA RTX 4090 | 2.5 | 400 | Desktop workstation |
| NVIDIA RTX 4070 | 4.2 | 238 | Budget desktop |
| Jetson AGX Orin 64GB | 12 | 83 | Onboard robot compute |
| Jetson Orin NX 16GB | 22 | 45 | Mid-range edge |
| Jetson Orin Nano 8GB | 40 | 25 | Minimum viable edge |
| Apple M3 Pro 18GB | 8 | 125 | Development/prototyping |
タイムロマン・アンサンブルの実施詳細
タイムランブルは指数分解重量を使用します. _t_ステップ前に生成された部分からの予測では,重量は
** 重要な部署技巧:** 生産では常に時間的な組み立てを使用します.それなしでは,ロボットは各段階に可視な緊張を表します. ロボットは突然新しい計画に移行します.組み立てでは,移行は滑らかで目に見えない.計算上の上方費は軽視される (重量平均数数マイクロ秒).
7.OpenArm 1 + ACT: 特定設定手順
OpenArm 1 (単臂4,500ドル,双手リーダーフォロワーステーション9,000ドル) は模倣学習データ収集とACT部署のために設計されています. 以下は完全な設定経路です:
ハードウェアの設定
- カメラを設置: 腕カメラ (Intel RealSense D405) をOpenArm腕支架に固定する. オーバーヘッドカメラ (RealSense D435) を,ワークスペースセンターより60cm上の提供されたゲントリーに設置する. 選択的:空間覆盖を向上させるために,第3カメラを45度に設置する.
- 接続セルボ: OpenArm は Feetech STS3215 servos (ALOHA と同じ) を使用している. U2D2 シリアルインターフェースで接続する.すべての 6 つの関節が応答するを確認する:
T8 . - 関節制限を校正する:
T9 を実行して関節ゼロ位置と柔らかい限界を記録します.これは T10 と記します. - テストテレ操作: リーダー腕が接続されている場合,T11
を実行します.フォロワーが50Hzでリーダーの動きをリアルタイムで反映する必要があります.
ACTに関するデータ収集
# Record demonstrations on OpenArm
python lerobot/scripts/control_robot.py record \
--robot-path lerobot/configs/robot/openarm.yaml \
--fps 50 \
--repo-id svrc/openarm_pick_place \
--num-episodes 50 \
--warmup-time-s 3 \
--episode-time-s 15 \
--reset-time-s 10 \
--push-to-hub 1
OpenArm で ACT を展開する
# Deploy trained policy
python lerobot/scripts/control_robot.py replay \
--robot-path lerobot/configs/robot/openarm.yaml \
--policy-path outputs/act_openarm_pick_place/checkpoints/best/ \
--fps 50 \
--num-episodes 20
8 常見な失敗と修正
RCSVでは20以上の操作作業について ACTポリシーを訓練し導入しました. ここでは,最も頻繁に見られる失敗パターンとその対処法を示します.
| Symptom | Root Cause | Fix |
|---|---|---|
| Policy outputs zero or constant actions | KL weight (beta) too high. Model ignores observations and outputs the mean action. | Reduce beta by 5–10x. Monitor KL divergence: it should stabilize at 0.5–5.0 nats, not near zero. |
| Jerky execution at chunk boundaries | Temporal ensemble temperature too low, or ensemble not implemented | Increase temperature from 10 to 20–30. Verify overlapping chunk execution in your control loop. |
| Good training loss, poor real-world performance | Camera mismatch between training and deployment | Check image resize pipeline, camera FOV, crop regions. Use identical camera mount positions. |
| Works for 2 seconds then drifts | Chunk size too large for task dynamics | Reduce chunk size by 50%. The policy is committing to outdated plans. |
| Inconsistent between evaluation runs | Too few demonstrations (<30) | Collect more data. With small datasets, performance is highly sensitive to train/val split. |
| KL divergence collapses to zero | Beta too low. エンコーダ encodes everything in z; decoder ignores observations. | Increase beta until KL stabilizes at 0.5–5.0 nats. |
| Mode averaging: robot moves to "average" of multiple strategies | Multi-modal demonstrations with single-mode CVAE | Standardize demonstration strategy, remove minority approaches, or switch to Diffusion Policy. |
| Sim-to-real gap: policy works in sim but fails on real robot | Contact dynamics, friction, and visual domain mismatch | Fine-tune on 50–100 real demonstrations. Apply domain randomization during sim training. |
9 基準:ACT対拡散政策対行動クローン
以下は,ALOHAとOpenArmプラットフォームを使用して標準化された操作作業に関するRCSVで公表された結果と独自の評価から得られた基準です.
| Dimension | ACT | Diffusion Policy | Behavioral Cloning (MLP) |
|---|---|---|---|
| Success rate (50 demos, pick-place) | 82–90% | 75–85% | 40–60% |
| Success rate (200 demos, pick-place) | 90–95% | 92–97% | 65–80% |
| Success rate (bimanual insertion) | 80–88% | 72–82% | 15–30% |
| Inference latency (RTX 4090) | 2.5ms | 15ms (DDIM) | 0.5ms |
| Inference latency (Jetson Orin Nano) | 40ms (25 Hz) | 180ms (5.5 Hz) | 5ms (200 Hz) |
| Training time (200 episodes, A100) | ~4 hours | ~8 hours | ~1 hour |
| Model size | ~40M params | ~80M params | ~5M params |
| Multi-modal handling | Limited (CVAE) | Excellent (diffusion) | None (mode averaging) |
| 軌跡 smoothness | Excellent | Very good | Poor (jerky) |
| Data efficiency (<50 demos) | Good | Moderate | Poor |
| Edge deployment feasibility | Excellent | Challenging | Trivial |
10 時の ACT 対 その他の方法
ACT を使用する
- 50~200人のデモがあり 部署への迅速な道が必要です
- 作業には比較的決定的な戦略があります (それを行うための明確な方法があります).
- 推論速度が重要だ 推論速度が重要だ
- 操作は双手で行われます (ACTは ALOHAのために設計されました).
- できるだけ簡単なトレーニングパイプラインを 求めます 超パラメータの調整は最小です
- コンピュータが制限されたプラットフォームで 50Hzでリアルタイム制御が必要です
拡散ポリシーを使用する
- 同じ作業のための複数の有効な戦略を示しています (異なる操作者,曖昧な把握).
- 組み立てや挿入作業では ミリメートル以下の精度が必要です
- 膨大なデータ (200+デモ) と計算予算があります
- クラウドインフレクションやデスクトップGPUなどで 遅延を許すことができます
VLA (OpenVLA, pi0) を使用する
- 言語条件付きの多作業実行 ("赤いカップを選んで",青いブロックを積み重ねて") が必要です
- 視覚言語の表現を 一般化するために利用したいのです
- 移動手段で操作している
- 複数のGPU訓練インフラ (4
8 A100s) にアクセスできます.
シンプルBCで滞在する
- できるだけ早く訓練を繰り返す必要があります
- 複合エラーが問題ではない場合,あなたのタスクは非常に短く (<20ステップ)
- 極限制限のハードウェア (マイクロコントローラークラス) に展開しています.
ACT-対応ロボットデータをRCSVで収集する
RCSVはACTトレーニングのためにエンドツーエンドデータ収集を提供する. カリバー化されたリーダーフォロワーハードウェア,訓練されたオペレーター,品質管理,およびLeRobot HDF5フォーマットでの配信.2,500ドル (一つのタスクで50回のデモ) のパイロットから開始するか,完全な8,000ドルのデータキャンペーンまで拡大します.







