SmolVLA policy for the cucumber grab → place → peel pipeline, fine-tuned from
lerobot/smolvla_base on 653 teleop episodes.
Trained 2026-07-24 via Vibe Data Studio.
1e-4 (SmolVLA preset; cosine decay to 2.5e-6 over 30k, 1k warmup)
lerobot
30da8e68 (fleet pin)
Final train loss
0.041
Tasks
Language-conditioned — pass one of these instructions at inference:
Instruction
Episodes
place the cucumber on the middle of the cutting board, aligned vertically in the image, with the back end of the cucumber under the blue gripper
264
grab the cucumber close to one of the cucumber's end
201
peel the skin of the cucumber with several strokes, starting close to the blue gripper and moving vertically along the cucumber toward the robot origin
Cameras (three, 640×480 @ 20 fps): base → camera1, top → camera2, wrist → camera3
(rename applied at training; feed the same mapping at inference)
Recorded on: mixed-rig corpus — jetson1 + vibepi (see the per-source
breakdown under Data provenance)
Variants in this repo
Two matched trainings of the same data, seed, and step count — a controlled A/B of the
pod-side video preprocess (512px H.264 re-encode before training):
Paired offline eval (61 shared 50-step windows, original-resolution observations): the two
models agree with each other (2.01 MAE, normalized units) more closely than either matches
the demonstrations (2.37 / 2.51) — same policy within training noise; the re-encode is
training-neutral by all offline measures.
Data provenance
Episodes per task per recording rig (computed by walking the nested collection
manifests down to leaf recorded datasets and mapping each kept episode to its source):
Task
jetson1
vibepi
Total
grab
142¹
59
201
place
200
64
264
peel
117
71
188
Total
459
194
653
¹ includes 37 episodes from eval_jetson1-062426-grab-doris — an eval-session dataset
recorded on jetson1, folded into the DAgger training corpus.
Materialized collection cucumber-grab-place-peel-doris072326@v1 (frozen 2026-07-24,
concat of three trimmed DAgger datasets, revisions pinned; leaf recordings and their
rigs resolved by walking the nested meta/vibedata/collection.json manifests):
--num_workers is appended host-side (clamped to the pod's allocation). The
preprocess-512-3090 variant additionally ran the Studio pod video preprocess
(dataset transcoded on-pod to width-512 H.264, --dataset.root pointed at the
local copy) — nothing differs in the training flags.
Card backported by Vibe Data Studio · run 33 (baseline) + pod-doris0724-27bc4f (preprocess) · 2026-07-25