Pular para o conteúdo principal

Estágio 3 · Capítulo 17 · Teoria e Prática

17. Inferência em Robô Real, Avaliação e Iteração de Dados

Capítulo 17 do Curso para Iniciantes em IA Física da Seeed — fluxo de dados de inferência, pré-processamento e desnormalização, início da inferência, execução de blocos de ações, segurança, avaliação da taxa de sucesso, teste de generalização, análise de falhas e coleta de dados orientada por falhas .

17.1 Fluxo de Dados de Inferência​

Fluxo

17.1 Fluxo de Dados de Inferência: Entenda em Um Diagrama

Fluxo de dados de inferência

17.2 Pré-processamento e Desnormalização​

Pré-processamento

17.2 Pré-processamento e Desnormalização

Durante o treinamento o modelo consome dados normalizados; durante a inferência você deve seguir as mesmas regras tanto para entrada quanto para saída:

DireçãoProcessamentoEstatísticas usadas
Para dentro do modeloRedimensionamento de imagem + média/desvio padrão do ImageNet; estado menos a média, dividido pelo desvio padrão (z-score)meta/stats.json do conjunto de dados de treinamento
Para fora do modeloAção multiplicada pelo desvio padrão, mais a média; restaurar para ângulos reais das juntasMesmo que acima
Pré-processamento e desnormalização

17.3 Iniciando a Inferência em Robô Real​

Inferência

17.3 Iniciando a Inferência em Robô Real

Use lerobot-record para carregar a política; os parâmetros do robô e da câmera são idênticos aos da coleta:

Versão RS:

lerobot-record \
--robot.type=seeed_b601_rs_follower \
--robot.port=can0 \
--robot.can_adapter=socketcan \
--robot.cameras='{ front: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30, fourcc: "MJPG"}, side: {type: opencv, index_or_path: 2, width: 640, height: 480, fps: 30, fourcc: "MJPG"} }' \
--robot.id=follower1 \
--display_data=false \
--dataset.repo_id=seeed/eval_test18 \
--dataset.single_task="Grab the crayfish into the box" \
--dataset.num_episodes=10 \
--dataset.episode_time_s=60 \
--dataset.reset_time_s=10 \
--policy.path=outputs/train/act_rebot_test/checkpoints/last/pretrained_model \
--policy.push_to_hub=false

Versão DM:

lerobot-record \
--robot.type=seeed_b601_dm_follower \
--robot.port=/dev/ttyACM0 \
--robot.can_adapter=damiao \
--robot.cameras='{ front: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30, fourcc: "MJPG"}, side: {type: opencv, index_or_path: 2, width: 640, height: 480, fps: 30, fourcc: "MJPG"} }' \
--robot.id=follower1 \
--display_data=false \
--dataset.repo_id=seeed/eval_test18 \
--dataset.single_task="Grab the crayfish into the box" \
--dataset.num_episodes=10 \
--dataset.episode_time_s=60 \
--dataset.reset_time_s=10 \
--policy.path=outputs/train/act_rebot_test/checkpoints/last/pretrained_model \
--policy.push_to_hub=false
  • --dataset.num_episodes=10: executa 10 episódios.
  • --dataset.episode_time_s=60: máximo de 60 segundos por episódio. Defina com base na duração da tarefa — por exemplo, pegar um lagostim e colocá-lo em uma caixa leva cerca de 20-30 segundos, então defina 30-40 para deixar uma margem. Se você quiser testar o modelo sem esperar, defina um valor bem alto (por exemplo, 300), já que há um intervalo entre episódios.
  • --dataset.reset_time_s=10: 10 segundos entre episódios para você reposicionar os objetos (durante a avaliação, mantenha o estado inicial o mais consistente possível).

17.4 Execução de Blocos de Ações​

Execução

17.4 Execução de Blocos de Ações

  • Uma inferência gera um bloco de ações de 100 passos; apenas os primeiros n passos são executados em malha aberta (n_action_steps), depois se faz nova observação — previsões mais distantes são menos confiáveis.
  • Quando o agrupamento temporal está ativado (temporal_ensemble_coeff), a ação em cada passo de tempo é uma média ponderada de múltiplas previsões, com trepidação praticamente nula.
  • Se o robô real parecer "engasgado", provavelmente é o intervalo de computação entre blocos — o bloco antigo terminou e o novo ainda não foi calculado. Aumentar n_action_steps pode ajudar, ao custo de menor resistência a perturbações.

17.5 Segurança: Limites, Limites de Velocidade, Botão de Emergência​

Segurança

17.5 Segurança: Limites, Limites de Velocidade, Botão de Emergência

  • Sempre use ESC para parar; não use Ctrl+C. Antes de parar, deixe o braço terminar o bloco de ações atual ou retorne-o manualmente para uma pose segura para evitar parar no ar em uma posição carregada.
  • Esteja sempre pronto para cortar a alimentação; se o braço se comportar de forma anormal, é necessário desligamento de emergência.

17.6 Avaliação: Taxa de Sucesso e Tempo de Conclusão​

Avaliação

17.6 Avaliação: Taxa de Sucesso e Tempo de Conclusão

Fixe as condições iniciais, execute 20 testes consecutivos e registre cada um.

  • Taxa de sucesso = sucessos ÷ 20. Para um primeiro modelo treinado, >50% é um começo normal, >80% é excelente.
  • Tempo de conclusão: verifique a estabilidade — as execuções bem-sucedidas têm duração semelhante? Velocidade inconsistente significa que a política está "hesitante".
  • Nas execuções com falha — não registre apenas um ✗ — anote o tipo de falha.

17.7 Teste de Generalização​

Generalização

17.7 Teste de Generalização

Após testar em condições padrão, varie as condições uma a uma e veja quanto a taxa de sucesso cai (ACT com 50 episódios não terá grande generalização; recomendamos adicionar dados).

TesteMétodoExpectativa
Generalização de posiçãoColoque o bloco fora dos cinco pontos marcados a lápis, mas dentro da cobertura de treinamentoDeve quase não cair; se cair, a diversidade de posições é insuficiente
Perturbação leveColoque objetos não relacionados sobre a mesaUm modelo treinado em cena visualmente limpa não deve ser afetado
Grande mudança de distribuiçãoObjetos totalmente novos, superfície espelhada reflexivaA falha é esperada; não há necessidade de corrigir

O objetivo do teste de generalização não é provar quão forte é o modelo, mas sim mapear o limite de sua capacidade — use livremente dentro desse limite; complemente os dados e expanda-o gradualmente para além dele.

17.8 Análise de Tipos de Falha​

Falhas

17.8 Análise de Tipos de Falha

Tipo de falhaCausa mais provávelContramedida
Não alcança: se move para a posição erradaCobertura de dados insuficiente nessa posição (fora da distribuição)Complementar demonstrações nessa área
Pegada instável: toca mas não segura/derrubaMomento de fechamento da garra aprendido de forma imprecisa; poucas demonstrações do momento da pegadaAdicionar demonstrações de alta qualidade do momento da pegada
Movimento aleatório o tempo todo; ações absurdasO treinamento não convergiu, ou a cena/iluminação mudou significativamenteVerificar se a cena e a iluminação da coleta de dados correspondem às da inferência
dica

Primeiro descarte problemas de configuração, depois suspeite de problemas de dados — movimento aleatório é uma “doença de configuração”; não-alcançar é uma “doença de dados”.

17.9 Iteração de Dados: Coleta de Dados Orientada por Falhas​

Iteração

17.9 Iteração de Dados: Coleta de Dados Orientada por Falhas

A etapa final do ciclo — transformar falhas em dados:

  1. Classificar: identificar o tipo de falha e a cena correspondente.
  2. Complementar: registrar 10-20 novas demonstrações para a cena de falha — não alcança? registre nessa posição; pegada instável? registre o momento da pegada. Expanda conscientemente o limite de pegada gradualmente — por exemplo, coloque blocos em pontos de 5-10 cm além da cruz original para expandir o conjunto de dados.
  3. Re-treinar: re-treinar com o novo conjunto de dados.
Iteração de dados

Com isso, o ciclo fechado desde o início do capítulo fica totalmente completo: teleoperação, coleta, inspeção, treinamento, inferência, avaliação, iteração — esse pipeline é reutilizado como está para qualquer nova tarefa. Esse é o resultado central do Estágio 3.

Loading Comments...