SmolVLA SO-101 β€” V1 Misc (does not work)

The project's first fine-tuning attempt, on early miscellaneous recordings. This model does not work and is published for completeness only.

Part of Project-IRA β€” Interactive Robotic Arm. Code: https://github.com/Project-IRA/interactive-robotic-arm

Base model lerobot/smolvla_base
Robot SO-101 follower (6-DOF)
Training data Project-IRA/TPSoSe2026_Dataset_Collection_LeRobot_SO101
Recommended checkpoint n/a
Inputs camera1 (wrist) + camera2 (desk) images β€” renamed keys, see Usage β€” 6-dim joint state, English instruction
Outputs 6-dim continuous action chunks

Quality

Does not work β€” useless at essentially everything.

Trained on the early miscellaneous data collection, before the team settled on the four tasks, consistent recording protocols, and systematic prompt variation. The data was neither large enough nor consistent enough to fine-tune on.

Use Pi05 V7 Full V2 instead.

Training

Single L40S GPU, lerobot/smolvla_base, frozen vision encoder (SmolVLA default), trained on the early miscellaneous recordings β€” mostly pick-and-place variants including desk cleanup, sorting chess pieces, and moving a ball across a desk.

This run was done in two stages, which is why the repo holds two model folders rather than a checkpoint series:

Stage Folder Data
1 merged_720p the 720p recordings
2 merged_800x600 resumed from stage 1, continued on the datasets with the 800x600 desk_view resolution

merged_800x600 is the later of the two, written after stage 2 finished. Neither produces usable behaviour.

Retained as a baseline and as the starting point of the project's history. Its failure is what motivated the structured recording protocol used for every later dataset: fixed tasks, 10 episodes per prompt, deliberate prompt variation, and documented object placement schemes.

Usage

This model expects renamed camera keys. Training used --rename_map to remap the dataset's camera features:

Dataset feature What the policy expects Physical camera
observation.images.wrist_left observation.images.camera1 wrist
observation.images.desk_view observation.images.camera2 desk

If you feed this policy wrist_left / desk_view it will fail or silently misbehave. Name your cameras camera1 (wrist) and camera2 (desk) at inference time, or apply the same --rename_map when re-training. The Pi0.5 models do not do this β€” they use the native wrist_left / desk_view names.

This model does not produce usable behaviour. Do not deploy it.

This repo has a different layout from every other model here β€” no checkpoints/ directory, just two model folders:

outputs_V1/models/merged_720p/
outputs_V1/models/merged_800x600/

Repo total ~1.81 GB.

import torch
from lerobot.policies.smolvla.modeling_smolvla import SmolVLAPolicy

policy = SmolVLAPolicy.from_pretrained("Project-IRA/TPSoSe2026_SmolVLA_LeRobot_SO101_Finetuning_V1_Misc_Dataset")
policy = policy.to("cuda").eval()

On-robot rollout:

lerobot-record \
  --robot.type=so101_follower \
  --robot.port=/dev/ttyACM0 \
  --robot.id=$ROBOT_ID \
  --robot.cameras='{
      camera1: {type: opencv, index_or_path: /dev/v4l/by-path/$WRIST_PATH, width: 640, height: 480, fps: 30},
      camera2: {type: opencv, index_or_path: /dev/v4l/by-path/$DESK_PATH,  width: 640, height: 480, fps: 30}
  }' \
  --policy.path=Project-IRA/TPSoSe2026_SmolVLA_LeRobot_SO101_Finetuning_V1_Misc_Dataset \
  --dataset.repo_id=$HF_USER/eval_run \
  --dataset.single_task="Sort the lego by color" \
  --episodes=10

Use one of the exact training prompts (see the dataset card) as the task string. Both cameras run at 640x480 at inference time even though desk_view was recorded at 800x600.

Robot setup

Robot SO-101 follower arm (6-DOF), robot_type: so_follower
Teleoperation SO-101 leader arm
Control frequency 30 fps
State / action space 6-dim: shoulder_pan.pos, shoulder_lift.pos, elbow_flex.pos, wrist_flex.pos, wrist_roll.pos, gripper.pos
Camera observation.images.desk_view 800x600, h264 (recording)
Camera observation.images.wrist_left 640x480, h264 (recording)

Inference note: both cameras are run at 640x480 during inference, not at their recording resolutions, to reduce the payload sent to the inference server.

Environment notes

All training ran on a SLURM cluster with L40S GPUs. Two environment details were required and are easy to miss when reproducing:

  • ffmpeg libraries for torchcodec. A minimal conda env supplies the shared libraries that torchcodec discovers at runtime: export LD_LIBRARY_PATH=$CONDA_PREFIX/envs/ffmpeg_libs_v8/lib:<venv>/lib/python3.12/site-packages/nvidia/npp/lib:$LD_LIBRARY_PATH
  • --tolerance_s=0.01 on every run, to accommodate timestamp jitter in the recorded episodes.

Multi-GPU runs additionally set PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True. Datasets and the virtualenv were copied to node-local /scratch before training rather than read from shared storage.

No Weights & Biases logging was enabled for any run (--wandb.enable=false), so there are no public training curves β€” the job.*.err SLURM logs are the record.

Tasks and prompts

The model is conditioned on English natural-language instructions. Prompt phrasing was varied roughly every 10 episodes during recording, giving 93 distinct prompts in the merged dataset. Use one of the training prompts verbatim for best results β€” the full lists are on the dataset card.

Limitations

  • Behaviour cloning. The policy imitates teleoperated demonstrations and has no notion of recovery beyond what was demonstrated. It is susceptible to covariate shift and can fail to recover from states outside the demonstration distribution.
  • Recovery data is incidental, not systematic. Recovery behaviour appears in the data only where the operator happened to make and correct a mistake during recording; no recovery episodes were scripted deliberately.
  • Single environment. All data comes from one lab desk with one lighting setup, one camera geometry, and one set of physical objects. Expect degradation elsewhere.
  • Prompt sensitivity. Language conditioning was trained on a fixed set of phrasings (listed in the dataset card). Prompts far from those phrasings may behave unpredictably.
  • No formal evaluation. Quality assessments below are qualitative, from operators observing rollouts on the physical arm. There are no success-rate numbers.
  • Not safety-rated. Supervise all physical execution and keep the workspace clear.

Upstream licensing & attribution

This model is a derivative work of Apache-2.0 licensed components:

Component Upstream License
LeRobot framework https://github.com/huggingface/lerobot Apache-2.0
lerobot/smolvla_base https://huggingface.co/lerobot/smolvla_base Apache-2.0

Apache-2.0 permits relicensing derivative works. We retain the upstream copyright notices, license text, and NOTICE files for the incorporated material, as Apache-2.0 Section 4 requires. The upstream components remain under Apache-2.0 β€” only this project's own contributions (the fine-tuned weights and training configuration) are offered under CC BY-SA 4.0.

CC BY-SA 4.0 was chosen because it is share-alike: derivatives must be released under the same licence, so this work cannot be taken closed-source. The project's source code lives in a separate repository under its own licence β€” see https://github.com/Project-IRA/interactive-robotic-arm.

Citation

@misc{project_ira_2026,
  title        = {Project-IRA: Interactive Robotic Arm},
  author       = {Baten, Cleo and Keppler, Bela and Sapper, Jonas},
  year         = {2026},
  howpublished = {\url{https://huggingface.co/Project-IRA}},
  note         = {Code: \url{https://github.com/Project-IRA/interactive-robotic-arm}}
}
Downloads last month

-

Downloads are not tracked for this model. How to track
Video Preview
loading

Model tree for Project-IRA/TPSoSe2026_SmolVLA_LeRobot_SO101_Finetuning_V1_Misc_Dataset

Finetuned
(6818)
this model

Dataset used to train Project-IRA/TPSoSe2026_SmolVLA_LeRobot_SO101_Finetuning_V1_Misc_Dataset