LeRobot documentation
SmolVLA
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!
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
Instale o LeRobot seguindo nosso Guia de Instalação.
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:
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
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_mapmapeia os nomes das câmeras do conjunto de dados para os nomescamera1,camera2ecamera3que osmolvla_baseespera. 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
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_NAMESubstitua --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.