Skip to content

FlowVLA: backbone-neutral chassis and a ResNet+text backbone - #661

Closed
RyanPCo wants to merge 4 commits into
ryanco/qwenvlafrom
ryanco/flowvla-resnet-text
Closed

RyanPCo wants to merge 4 commits into
ryanco/qwenvlafrom
ryanco/flowvla-resnet-text

Conversation

@RyanPCo

@RyanPCo RyanPCo commented Sep 17, 2026 •

Copy link
Copy Markdown
Contributor

Turns QwenVLA into a chassis that accepts any backbone, then adds the second one.

  • 0d1a5c3f3 rename QwenVLA to FlowVLA. The chassis never mentioned Qwen outside its constructor — prompt assembly, batch plumbing, norm stats and the eval contract are all backbone-agnostic. Drops FlowVLAModel's QwenVLBackbone type hint in favour of the documented duck-typed contract and relabels the LR-group dict backbone instead of vlm. No behaviour change.
  • 4e27d41a1 ResNetTextBackbone — the only new module of the ResNet+text arm. One ResNet per canonical camera role (front is the same module for every vendor, since VIZ_IMAGE_KEY is), each fed a single frame because ResNet.forward's reshape is only channel-correct at F == 1; the frozen Qwen3-Embedding per-token features and their mask concatenated after them; modality embeddings so a patch token is distinguishable from a word. It returns the one context once per DiT block — the head's per-layer projectors are what give each block its own view.
  • 4a2afe70f recipe config — train_zarr_mecka_flagship_kp_flowvla is train_zarr_mecka_flagship_kp_hpt with one line changed, so the three arms share data, evaluators, val heads and step budget by construction. embodiment_label off makes the prompt exactly the HPT arm's bare "fold clothes"; dit_hidden 768 != the backbone's 1024 keeps the head's per-layer projectors real Linears instead of nn.Identity.
  • 2f54b0542 train-step arm — two optimizer steps through the real trainHydra.train() path with the text encoder swapped for the fixtures stub, so no 596M checkpoint is loaded. The proprio override records a real difference: FlowVLA concatenates every proprio key while HPT selects them with stem_specs, so plain data/mecka is 164-wide here where the flagship keypoint config (ee_pose off) is 144.

Testing

83 passed across test_flowvla_algo.py, test_flowvla_nets.py, test_flowvla_configs.py and test_pi05_norm_rot6d.py.

🤖 Generated with Claude Code

RyanPCo and others added 4 commits September 17, 2026 11:45
QwenVLA never mentioned Qwen outside its constructor: prompt assembly, batch
plumbing, norm stats and the eval contract are all backbone-agnostic. Rename
the chassis so a second backbone can sit on it, drop FlowVLAModel's
QwenVLBackbone type hint in favour of the documented duck-typed contract, and
label the LR-group dict 'backbone' instead of 'vlm'. No behaviour change.

Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
The only new module of the FlowVLA ResNet+text arm. One ResNet per canonical
camera role (front is the same module for every vendor, since VIZ_IMAGE_KEY is),
each fed a single frame because ResNet.forward's reshape is only channel-correct
at F == 1; the frozen Qwen3-Embedding per-token features and their mask
concatenated after them; modality embeddings so a patch token is distinguishable
from a word. Returns the one context once per DiT block - the head's per-layer
projectors are what give each block its own view.

Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
…omparison

train_zarr_mecka_flagship_kp_flowvla is train_zarr_mecka_flagship_kp_hpt with
one line changed, so the three arms share data, evaluators, val heads and step
budget by construction. embodiment_label off makes the prompt string exactly the
HPT arm's bare "fold clothes"; dit_hidden 768 != the backbone's 1024 keeps the
head's per-layer projectors real Linears instead of nn.Identity.

Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
Two optimizer steps through the real trainHydra.train() path, with the text
encoder swapped for the fixtures stub so no 596M checkpoint is loaded. The
proprio override records a real difference: FlowVLA concatenates every proprio
key, while HPT selects them with stem_specs, so plain data/mecka is 164-wide
here where the flagship keypoint config (ee_pose off) is 144.

Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
@RyanPCo RyanPCo changed the title flowvla: rename QwenVLA to the backbone-neutral FlowVLA chassis FlowVLA: backbone-neutral chassis and a ResNet+text backbone Sep 17, 2026

RyanPCo commented Sep 17, 2026 •

Copy link
Copy Markdown
Contributor Author

Warning

This pull request is not mergeable via GitHub because a downstack PR is open. Once all requirements are satisfied, merge this PR as a stack on Graphite.
Learn more

This stack of pull requests is managed by Graphite. Learn more about stacking.

@RyanPCo RyanPCo closed this Sep 19, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant