reinforcement-learning-gmm-sac-ppo-calvin

Estudo de Reprodutibilidade: SAC-GMM em CALVIN

Reprodução e análise empírica do trabalho “Robot Skill Adaptation via Soft Actor-Critic Gaussian Mixture Models” (Nematollahi et al., ICRA 2022) aplicado ao benchmark CALVIN.

Status: experimentos em andamento. Trabalho em preparação para submissão.


📊 Resultados atuais (01/06/2026)

Skill avaliada: open_drawer em CALVIN scene D. Avaliação com 20 episódios × 3 seeds (42–44) = 60 episódios por método, com as mesmas posições iniciais para uma comparação justa.

Resumen — GMM only

Seed Aciertos Fallos Accuracy
1 (42) 3 / 20 17 15%
2 (43) 5 / 20 15 25%
3 (44) 6 / 20 14 30%
Total 14 / 60 46 / 60

Resumen — GMM+PPO

Seed Aciertos Fallos Accuracy
1 (42) 4 / 20 16 20%
2 (43) 8 / 20 12 40%
3 (44) 9 / 20 11 45%
Total 21 / 60 39 / 60

Resumen — GMM+SAC

Seed Aciertos Fallos Accuracy
1 (42) 13 / 20 7 65%
2 (43) 15 / 20 5 75%
3 (44) 15 / 20 5 75%
Total 43 / 60 17 / 60

🏆 Tabla final — comparación de los tres métodos

Método Aciertos Media accuracy ±std Length
GMM only 14 / 60 23.3% ±6.2% 62.1
GMM+PPO 21 / 60 35.0% ±10.8% 63.5
GMM+SAC 43 / 60 71.7% ±4.7% 55.7

Lectura para la expo:


🖥️ Jobs no cluster RECOD.AI

Job ID Método Recursos Status Resultado
68501 Extract demos open_drawer a5000, 30 min ✅ COMPLETED 152 train + 30 val demos
68510 SAC-GMM training (lightning) l40s, 8h ✅ TIME LIMIT (12h wall-clock) Convergiu a ep 1060, 100% eval_return=10
69066 SAC SB3 smoke test (1500 steps) a5000, 15min ✅ COMPLETED Pipeline OK
69068 SAC puro (SB3) training a5000, 8h 🟢 RUNNING ahora mean_reward=10 desde ~250K steps

Histórico de jobs falhos (tentativas de SAC puro nativo antes de mudar para SB3): 68488, 68489, 68491, 68493, 68507, 68508, 68509, 68928, 68929, 68956, 68957, 68959 — todos falharam por incompletude do código upstream (ver changelog).


🎬 Visualizações

GMM only (20% success rate)

Dynamical system treinado em 152 trajetórias de open_drawer. Chega ao cajón mas frequentemente falha em agarrar/puxar limpamente.

SAC-GMM (80% success rate)

Mesmo GMM, refinado por SAC após ~1000 episódios de treinamento no cluster. Movimentos decididos e corrigidos pelo Δθ do SAC a cada 32 passos.


📈 Curvas de aprendizado (SAC-GMM)

Eval accuracy chega a 100% pelo episódio ~1060 (primeira hora de treinamento no cluster). Os episódios seguintes mantêm o plateau sem melhora.

Train vs eval return

Eval accuracy over training


🔬 Método em um parágrafo

SAC-GMM é um método híbrido para aprendizado de skills: um Gaussian Mixture Model (K=3) é ajustado offline em poucas demonstrações humanas para fornecer um dynamical system que controla o robô em alta frequência. Um agente Soft Actor-Critic então refina esse GMM em runtime predizendo correções de parâmetros (Δπ, Δμ, ΔΣ) a cada N=32 passos, usando recompensas esparsas de completação de tarefa e observações visuais via autoencoder. O GMM fornece um skill prior robusto; o SAC adapta-o ao ambiente real ruidoso.


🛠️ Contribuições deste estudo

  1. Patches de reprodutibilidade ao código upstream (nematoli/sac_gmm):
    • Resolução de config_path do Hydra para sistemas com espaços no path (macOS).
    • Fallback do logger em bayesian_gmm quando não usando wandb.
    • Colormap matplotlib.tab10 para suportar K > 7 Gaussianas.
    • Patch em calvin_env.play_table_env para installs editáveis (__file__ None).
  2. Módulo Lightning ausente implementado: sac_gmm.models.sac_model.SAC (referenciado em sac_train.py mas inexistente no upstream).

  3. Baseline SAC puro via Stable-Baselines3 ao invés de tentar consertar o SACAgent nativo (que tinha 7+ chamadas a métodos inexistentes: set_skill, prepare_action, record_frame, etc.).

  4. Pipeline de avaliação e gravação (scripts/agent_eval_record.py): integração com STATE_LOGGING_VIDEO_MP4 do PyBullet + métricas CSV/JSON por run.

🔁 Replicação

Setup completo: ver setup.md.

Passo Script
Extrair demos de uma skill scripts/extract_calvin_demos.py skill=calvin_open_drawer
Ajustar GMM (K=3) scripts/gmm_train.py skill=calvin_open_drawer logger=tb_logger
Treinar SAC-GMM sbatch run_sac_gmm.sbatch (~8h L40S/A5000)
Treinar SAC puro sbatch run_sac_sb3.sbatch (~8h)
Avaliar + gravar vídeo scripts/agent_eval_record.py agent=... show_gui=true

🧪 Métodos em desenvolvimento

📅 Changelog

Ver changelog.md para a bitácora completa do projeto.


Trabalho em preparação. Código baseado em nematoli/sac_gmm com patches de reprodutibilidade para o benchmark CALVIN.