How to use from the
Use from the
LeRobot library
# See https://github.com/huggingface/lerobot?tab=readme-ov-file#installation for more details
git clone https://github.com/huggingface/lerobot.git
cd lerobot
pip install -e .[smolvla]
# Launch finetuning on your dataset
python lerobot/scripts/train.py \
--policy.path=55CancriE/baseer-smolvla-serums \
--dataset.repo_id=lerobot/svla_so101_pickplace \
--batch_size=64 \
--steps=20000 \
--output_dir=outputs/train/my_smolvla \
--job_name=my_smolvla_training \
--policy.device=cuda \
--wandb.enable=true
# Run the policy using the record function
python -m lerobot.record \
  --robot.type=so101_follower \
  --robot.port=/dev/ttyACM0 \ # <- Use your port
  --robot.id=my_blue_follower_arm \ # <- Use your robot id
  --robot.cameras="{ front: {type: opencv, index_or_path: 8, width: 640, height: 480, fps: 30}}" \ # <- Use your cameras
  --dataset.single_task="Grasp a lego block and put it in the bin." \ # <- Use the same task description you used in your dataset recording
  --dataset.repo_id=HF_USER/dataset_name \  # <- This will be the dataset name on HF Hub
  --dataset.episode_time_s=50 \
  --dataset.num_episodes=10 \
  --policy.path=55CancriE/baseer-smolvla-serums

Baseer β€” SmolVLA grasp policy (serums)

Language-conditioned SmolVLA policy for the SO-100 arm, trained for the Baseer project β€” an Arabic voice-controlled assistive arm (Fanar hackathon, Theme 4: Physical AI / Imitation Learning).

The policy grasps a Hair Serum/Face Serum/ Jasmine Perfume or Shea Perfume Perfrom a vanity table and places it at a fixed delivery zone. At deploy time it's paired with Fanar-Oryx localization (the arm pre-positions above the Oryx-located object, then this policy does the final descent + grasp) and a closed-loop torque/width grasp check with retry-on-miss.

Details

  • Architecture: SmolVLA (SmolVLM2-500M backbone, ~450M params, ~100M trainable action expert), language-conditioned.
  • Robot: SO-100 follower (Feetech STS3215), single front camera (640Γ—480 @ 30 fps).
  • Training: 20,000 steps, batch size 32, final loss 0.012 (RTX 6000, ~6.5 h).
  • Tasks: "Pick up the hair serum and place it in the delivery zone" / "... the face serum ...".
  • Dataset: 55CancriE/baseer_serums (28 episodes).

Files

  • model.safetensors β€” policy weights (~1.1 GB)
  • config.json, train_config.json β€” policy + training config
  • policy_preprocessor*, policy_postprocessor* β€” input/output normalization

Usage (LeRobot)

from lerobot.policies.factory import get_policy_class, make_pre_post_processors
from lerobot.configs.policies import PreTrainedConfig

path = "55CancriE/baseer-smolvla-serums"
cfg = PreTrainedConfig.from_pretrained(path)
policy = get_policy_class(cfg.type).from_pretrained(path).eval()
# NOTE: processors are saved with device='cuda'; override for mps/cpu deploy:
pre, post = make_pre_post_processors(
    cfg, pretrained_path=path,
    preprocessor_overrides={"device_processor": {"device": "mps"}},
    postprocessor_overrides={"device_processor": {"device": "mps"}},
)

Or deploy the full localize β†’ grasp β†’ verify β†’ retry β†’ deliver pipeline with backend/agent/agent4_grasp.py in the project repo.

Project: github.com/fatma936-sudo/baseer Β· project page

Downloads last month
2
Safetensors
Model size
0.5B params
Tensor type
F32
Β·
BF16
Β·
Video Preview
loading

Dataset used to train 55CancriE/baseer-smolvla-serums