Instructions to use Ngseo/stage3-ur5-currentview with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- LeRobot
How to use Ngseo/stage3-ur5-currentview with LeRobot:
- Notebooks
- Google Colab
- Kaggle
File size: 4,594 Bytes
0802db9 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 | ---
license: apache-2.0
base_model: Qwen/Qwen2.5-VL-3B-Instruct
datasets:
- Ngseo/ur5_teleop_multitask
tags:
- robotics
- vision-language-action
- vla
- qwen2_5_vl
- lerobot
- spurious-correlation
---
# Stage 3 — UR5 teleop VLA (Qwen2.5-VL-3B), current-view variant
Training run **complete**: 60,000 steps. This is the ablation partner of
[`Ngseo/stage3-ur5-actheavy`](https://huggingface.co/Ngseo/stage3-ur5-actheavy):
same objective, same data, same hyper-parameters — the frozen V-JEPA2 targets
are computed on the **current** frame instead of on **future** frames.
```
act-heavy : V-JEPA sees frames t+4 … t+32 (1.07 s ahead)
current-view : V-JEPA sees frame t, repeated 8x ← this model
```
Both branches move together: the task branch that `z_a` is aligned to *and* the
domain branch that `z_b` is decorrelated from. Nothing in this model's loss
looks ahead in time.
**The question it answers:** does the V-JEPA target have to predict the future,
or is shaping the representation against the current frame enough?
## The setup this was trained for
Each of the 7 tasks in [`Ngseo/ur5_teleop_multitask`](https://huggingface.co/datasets/Ngseo/ur5_teleop_multitask)
is only ever shown from **one** of the 4 cameras, so viewpoint alone almost
determines the task. Object colour is deliberately crossed between the two task
families so that "colour ⇒ camera" is not a valid shortcut on its own:
| camera | tasks |
|---|---|
| `camera_0` | Point at the **red** cup · Pick up the **blue** die → basket |
| `camera_1` | Pull a tissue out of the box · Close the laptop · Stand the shoe upright |
| `camera_2` | Point at the **blue** cup · Pick up the **red** die → basket |
## Architecture
```
Qwen2.5-VL-3B + LoRA ─ forward_full_hidden ─┬─ Head A → z_a ─┐
└─ Head B → z_b ─┴─ concat(8192) → ResNetActionHead → 30×7
L = 1.0·L1(action) + 0.02·InfoNCE(z_a, z_task_CURRENT) + 0.002·SIGReg([z_domain_CURRENT ; z_b])
```
Frozen target encoder: [`Ngseo/stage1`](https://huggingface.co/Ngseo/stage1)
disentangled V-JEPA2 ViT-L. Both heads are `AttentiveLatentHead`
(proj 4096, 8 queries, depth 2, 167.8M each).
| | |
|---|---|
| LoRA | r=32, α=64 — LLM `q_proj`/`v_proj` (7.4M) **and** vision tower `qkv` (5.2M) |
| Trainable | 386M of 3.77B |
| Inputs | 1 RGB frame @224 + task string + 7-D joint state |
| Output | 30-step action chunk (absolute joint positions, 1.0 s @ 30 fps) |
| Optimiser | AdamW, lr 1e-4, 1000-step warmup + cosine to 0, batch 32, bf16 |
| Augmentation | ColorJitter/SharpnessJitter ×2 + DomainRandomization p=0.7 |
## Final metrics vs. the future-frame variant
| | current-view (this) | act-heavy (future) |
|---|---|---|
| action L1 @ 10k | 0.0826 | 0.0836 |
| @ 30k | 0.0438 | 0.0442 |
| @ 50k | 0.0326 | 0.0305 |
| **@ 60k (final)** | **0.0319** | **0.0300** |
| InfoNCE (chance 3.466) | 1.86 | 1.79 |
| cos(z_a, z_target) | 0.233 | 0.292 |
| cos(z_b, z_domain) | −0.002 | −0.000 |
On in-distribution action accuracy the two are within ~6% of each other, i.e.
looking ahead buys almost nothing here. That is expected: the InfoNCE term
carries weight 0.02, so it barely competes with the action loss.
Reference points on the same normalised scale, none of which use vision or
language: dataset mean **0.834**, copying the input state across all 30 steps
**0.155**. The per-step copy error grows from 0.019 at k=0 to 0.291 at k=29.
> **Not evaluated on a robot.** Everything above is a training-set loss. The
> question this study is actually about — what happens when a task is requested
> from a camera it was never trained on — is not answered by these numbers, and
> is exactly where the two variants might diverge.
>
> **Caveat specific to this variant:** the current-view clip is built from the
> *same augmented context frame* the VLM is shown, so its InfoNCE aligns two
> encodings of identical pixels. The future-frame variant aligns against a
> different, independently-augmented clip. The two therefore differ in more
> than just "future vs current", and the comparison should be read with that in
> mind.
>
> The 7-D joint state is also an input, and a probe on that state alone recovers
> which of the 7 tasks is running with 94% accuracy (chance 14%).
## Contents
`epoch_6.pt` holds `model_state_dict` (full VLM incl. LoRA), `latent_head_state_dict`
(Head A), `free_latent_head_state_dict` (Head B), `stage2_action_head_state_dict`,
optimiser state, and the run config. `config.yaml` is the exact training config.
|