LeRobot documentation

SmolVLA

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

SmolVLA

SmolVLA é o modelo de fundação leve da Hugging Face para robótica. Projetado para facilitar o ajuste fino em conjuntos de dados LeRobot, ele ajuda a acelerar seu desenvolvimento!

SmolVLA architecture.
Figura 1. O SmolVLA recebe como entrada (i) múltiplas visões de câmeras, (ii) o estado sensorimotor atual do robô e (iii) uma instrução em linguagem natural, codificada em recursos contextuais usados para condicionar o especialista de ações ao gerar um trecho de ação.

Configure seu ambiente

  1. Instale o LeRobot seguindo nosso Guia de Instalação.

  2. Instale as dependências do SmolVLA executando:

    pip install -e ".[smolvla]"

Coletar um conjunto de dados

SmolVLA é um modelo base, portanto, é necessário fazer fine-tuning com seus próprios dados para obter desempenho ideal em sua configuração. Recomendamos gravar cerca de 50 episódios da sua tarefa como ponto de partida. Siga nosso guia para começar: Gravando um Dataset

No seu conjunto de dados, certifique-se de ter demonstrações suficientes para cada variação (por exemplo, a posição do cubo na mesa, se for uma tarefa de pegar e colocar o cubo) que você estiver introduzindo.

Recomendamos consultar o conjunto de dados vinculado abaixo, que serviu de referência e foi utilizado no artigo SmolVLA:

🔗 SVLA SO100 PickPlace

Neste conjunto de dados, registramos 50 episódios em 5 posições distintas do cubo. Para cada posição, coletamos 10 episódios de interações de pegar e colocar. Essa estrutura, que repete cada variação várias vezes, ajudou o modelo a generalizar melhor. Tentamos um conjunto de dados semelhante com 25 episódios, e isso não foi suficiente, resultando em um desempenho ruim. Portanto, a qualidade e a quantidade dos dados são definitivamente fundamentais. Depois que seu conjunto de dados estiver disponível no Hub, você está pronto para usar nosso script de finetuning para adaptar o SmolVLA ao seu aplicativo.

Ajuste fino do SmolVLA com seus dados

Use smolvla_base, nosso modelo pré-treinado de 450M, e ajuste-o finamente em seus dados. Treinar o modelo por 20k etapas levará aproximadamente ~4 horas em uma única GPU A100. Você deve ajustar o número de etapas com base no desempenho e no seu caso de uso.

Se você não tiver um dispositivo gpu, pode treinar usando nosso notebook em Google Colab

Passar seu conjunto de dados para o script de treinamento usando --dataset.repo_id. Se você quiser testar sua instalação, execute o comando a seguir, no qual usamos um dos conjuntos de dados que coletamos para o SmolVLA Paper. Substitua-o pelo seu próprio conjunto de dados para fazer o ajuste fino nos seus dados.

lerobot-train \
  --policy.path=lerobot/smolvla_base \
  --dataset.repo_id=lerobot/svla_so100_pickplace \
  --policy.repo_id=${HF_USER}/my_smolvla \
  --rename_map='{"observation.images.top": "observation.images.camera1", "observation.images.wrist": "observation.images.camera2"}' \
  --batch_size=64 \
  --steps=20000 \
  --output_dir=outputs/train/my_smolvla \
  --job_name=my_smolvla_training \
  --policy.device=cuda \
  --trackio.enable=true
  • --policy.repo_id é o repositório do Hub para o qual o modelo ajustado é enviado.
  • --rename_map mapeia os nomes das câmeras do conjunto de dados para os nomes camera1, camera2 e camera3 que o smolvla_base espera. Sem ele, o treinamento é interrompido com um erro de incompatibilidade de recursos. Mapeie seus próprios nomes de câmeras da mesma forma (veja Rename Map).
You can start with a small batch size and increase it incrementally, if the GPU allows it, as long as loading times remain short.

O fine-tuning é uma arte. Para uma visão completa das opções de fine-tuning, execute

lerobot-train --help

Comparison of SmolVLA across task variations.
Figura 2: Comparação do SmolVLA entre variações de tarefa. Da esquerda para a direita: (1) contagem de cubos pick-place, (2) contagem de cubos pick-place, (3) contagem de cubos pick-place sob perturbações e (4) generalização no pick-and-place do bloco de lego com SO101 do mundo real.

Avalie o modelo ajustado e execute-o em tempo real

Da mesma forma, ao gravar um episódio, é recomendado que você esteja conectado ao HuggingFace Hub. Você pode seguir as etapas correspondentes: Gravar um dataset. Depois de conectado, você pode executar inferência no seu ambiente da seguinte forma:

lerobot-rollout \
  --strategy.type=base \
  --robot.type=so101_follower \
  --robot.port=/dev/ttyACM0 \
  --robot.id=my_blue_follower_arm \
  --robot.cameras="{ top: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30}, wrist: {type: opencv, index_or_path: 1, width: 640, height: 480, fps: 30}}" \
  --rename_map='{"observation.images.top": "observation.images.camera1", "observation.images.wrist": "observation.images.camera2"}' \
  --task="Grasp a lego block and put it in the bin." \
  --policy.path=${HF_USER}/FINETUNE_MODEL_NAME

Substitua --robot.port, --robot.id, --robot.cameras e --policy.path pela sua própria porta, ID do robô, câmeras (os mesmos nomes de câmera e resolução do seu conjunto de dados) e modelo ajustado. Passe o mesmo --rename_map que você usou para o treinamento e a mesma descrição de --task da gravação do seu conjunto de dados.

Flags opcionais que você pode adicionar ao comando acima:

  • RTC (movimento mais suave quando a inferência é lenta, por exemplo, em hardware de baixa potência): --inference.type=rtc --inference.rtc.execution_horizon=10 --inference.rtc.max_guidance_weight=10.0
  • Ver o fluxo da câmera: --display_data=true
  • Parar automaticamente: --duration=60 (em segundos). Por padrão, a política é executada até você pressionar Ctrl+C.

Para gravar episódios de avaliação, com um teleoperador opcional para redefinir a cena entre eles, use --strategy.type=episodic em vez disso. Consulte Policy Deployment para todas as estratégias.

Update on GitHub