Our Stage-1 VLM (Qwen3.5-2B + discrete 3D tokens) learned to read 3D well, but when asked to generate it, every input collapsed to roughly the same blobby shape — a torus became a bottle, a gear a smooth disc. This is the record of running that failure down to a single measurable cause and reversing it: shape and color now bind to the input, and a quantitative image-usage signal tripled.
Free-generating 3D from an image produced coherent-but-wrong volumes, identical in character across very different inputs. Greedy decoding was the worst case; even with sampling the shapes were generic.
We resisted guessing and instead ruled hypotheses in or out with cheap measurements.
| # | Hypothesis | Test | Result | Verdict |
|---|---|---|---|---|
| 1 | Token stream is low-information → CE rewards copying (the FAST failure mode) | Per-token entropy + repeat-run audit of the VQ codes | SS/shape/tex carry 10.8–11.9 bits/token, codebook fully used, no pathological repeats | RULED OUT |
| 2 | The VQ decoder is brittle to imperfect (off-manifold) predicted codes | Decode GT codes vs predicted codes | GT decodes clean; predicted decodes to clean but wrong shapes, not garbage — decoder is faithful | RULED OUT |
| 3 | The model ignores the conditioning image (condition-ignoring / posterior collapse) | Image-usage GAP: teacher-forced CE on codes with vs without the image | GAP ≈ 0.04 bits/token, and flat across epochs — the image barely changes the prediction | CONFIRMED |
| 4 | It's just a bad decoding strategy (greedy) | Greedy vs temperature-sampling on the same weights | Sampling removes the degenerate loops/flats; still generic without more structure | CONTRIBUTING |
Three independent lines converge on the same architecture, which framed the fix and the roadmap:
| Source | What it says for our case |
|---|---|
| Image-AR (LlamaGen, VAR, Chameleon, Emu3, Janus) | Never greedy — every shipped model samples + uses classifier-free guidance. Greedy on long high-entropy streams is the textbook collapse setting. |
| MolmoAct2 (action pretraining) | Same discrete-token-VLM problem. Uses 10% teacher-forced input-noising on structured codes + response-token dropout; final policy uses a flow expert, not raw token decode. |
| Kyvo / EVA01 / BLIP3o-NEXT | Discrete AR over 3D tokens works for structure; every high-fidelity textured generator uses continuous latents + flow. Discrete = blueprint, flow = fine geometry. |
Everything below stacks; each item targets a specific finding above.
| Change | Targets | Detail |
|---|---|---|
| Shorter codes 5824 → 1536 | Test 3 (easy path) | Re-trained 3 VQ tokenizers to 512 tokens each (SS/shape/tex). Fewer tokens → each carries more of the answer → the condition becomes necessary, not optional. |
| Input-noising 0.15 | Test 3 + exposure bias | Corrupt 15% of teacher-forced code inputs (labels intact) — breaks the local-grammar shortcut, forces gradient toward the condition. (MolmoAct2 mechanism.) |
| Sampling + constrained grammar | Test 4 | Never greedy; section markers injected deterministically + per-section vocabulary masking → runaway loops become impossible. |
| Condition-dropout 10% → real CFG | generic outputs | 10% of image→3D samples trained image-free, so the unconditional branch is in-distribution and CFG actually works at inference. |
v1's GAP was flat (the disease); v2's climbs monotonically and hasn't saturated at 10 epochs — the model keeps learning to use the image.


[3D Gen]/[VQA] task tags + a caption task restores it.[VQA] = all non-3D tasks)stage1_v2/…/checkpoint-9790 (10 epochs, 1536 codes/asset). Full paths, scripts, and run instructions in the repo README at /fsx/home/weikai.huang/3dgen/vlm3d_stage1/README.md.