Open-Weight VLM Recipes: What Actually Matters
The 2024-2026 open-weight VLM literature is a forest of ablation tables. Apple's MM1 tested 13 combinations of image encoder, connector, and data mix. Allen AI's Molmo showed that detailed human captions beat GPT-4V distillation. Cambrian-1 compared 20+ encoders. Idefics2 formalized the five-axis design space. Prismatic VLMs compared 27 training recipes on a controlled benchmark. Across all of that, a few results hold from paper to paper: the image encoder matters more than the connector, the data mixture matters more than either, and detailed human captions beat distilled synthetic data. This lesson reads the tables so you don't have to.
Learning Objectives
- Name the five-axis VLM design space: image encoder, connector, LLM, data mix, resolution schedule.
- Read an MM1 / Idefics2 / Cambrian-1 ablation table and predict which knob moves a given benchmark.
- Pick a recipe (encoder, connector, data, resolution) for a new VLM given a compute budget and task mix.
- Explain why detailed human captions beat GPT-4V distillation at the same token count.
The Problem
Many open-weight VLMs exist, and most of the gap between a good one and a state-of-the-art one is not architecture. It is data, resolution schedule, and encoder choice. Knowing which knob to turn first when your model underperforms saves you from an expensive wrong guess.
The 2023 wave (LLaVA-1.5, InstructBLIP, MiniGPT-4) ran on caption-pair pretraining plus LLaVA-Instruct-150k. That is a good baseline, and it topped out around MMMU 35%.
The 2024 wave (MM1, Idefics2, Molmo, Cambrian-1, Prismatic VLMs) ran exhaustive ablations, and the results were surprising and practical.
The Concept
The five-axis design space
Idefics2 (Laurençon et al., 2024) named the axes:
- Image encoder. CLIP ViT-L/14, SigLIP SO400m/14, DINOv2 ViT-g/14, InternViT-6B. Encoders differ in patch size, resolution, and pretraining objective.
- Connector. MLP (2-4 layers), Q-Former (32 queries + cross-attn), Perceiver Resampler (64 queries), C-Abstractor (convolutional + bilinear pooling).
- Language model. Llama-3 8B / 70B, Mistral 7B, Phi-3, Gemma-2, Qwen2.5. LLM size is the dominant param cost.
- Training data. Caption pairs (CC3M, LAION), interleaved (OBELICS, MMC4), instruction (LLaVA-Instruct, ShareGPT4V, PixMo, Cauldron).
- Resolution schedule. Fixed 224/336/448, AnyRes, native dynamic. Ramped during training or constant.
Every production VLM makes a choice on each axis. Most of the variance in MMMU scores comes from axes 1, 4, and 5, not from which connector you picked.
Axis 1: encoder > connector
MM1 Section 3.2 showed that swapping from CLIP ViT-L/14 to SigLIP SO400m/14 added 3+ points MMMU, while swapping the connector from MLP to Perceiver Resampler added less than 1 point. Idefics2 replicated it: SigLIP > CLIP, and Q-Former ≈ MLP ≈ Perceiver at the same token count.
Cambrian-1's "Cambrian Vision Encoders Match-Up" (Tong et al., 2024) ran 20+ encoders on a vision-centric benchmark (CV-Bench). The top of the leaderboard is a mix of DINOv2 and SigLIP, CLIP sits in the middle of the pack, and ImageBind and ViT-MAE score lower. The gap from CLIP ViT-L to DINOv2 ViT-g/14 is ~5-9 points on CV-Bench (9 in the condensed table in main.py).
The 2026 default encoder for open VLMs is SigLIP 2 SO400m/14 for semantic + dense features, sometimes concatenated with DINOv2 ViT-g/14 features (Cambrian's "Spatial Vision Aggregator" does this).
Axis 2: connector design is a wash
MM1, Idefics2, Prismatic, and MM-Interleaved reached the same conclusion: at a fixed visual-token count, connector architecture barely matters. A 2-layer MLP on mean-pooled patches performs within 1 point of a 32-query Q-Former at the same token budget.
Token count does matter. More visual tokens means more LLM compute and better performance up to a point, then diminishing returns. 64 tokens per image is too few for OCR. 576-1024 tokens is the sweet spot for most open VLMs, and 2048+ helps only for documents and charts.
Q-Former vs MLP is a cost question, not a quality question. Q-Former caps tokens at 32-64 regardless of image resolution, while MLP emits all patch tokens. For high-res inputs, Q-Former saves LLM context. For low-res inputs, the difference is noise.
Axis 3: LLM size sets the ceiling
Doubling the LLM from 7B to 13B adds 2-4 points on MMMU across the VLM papers. By 70B most benchmarks saturate. The VLM's multimodal reasoning ceiling is the LLM's text reasoning ceiling. The visual encoder can only feed it, not reason for it.
That is why Qwen2.5-VL-72B and Claude Opus 4.7 lead on MMMU-Pro and ScreenSpot-Pro: the language brain is huge. Clever connector design will not turn a 7B VLM into a 70B one.
Axis 4: data, where detailed human captions beat distillation
Molmo + PixMo (Deitke et al., 2024) is the 2024 result to read first. Allen AI had human annotators describe images in 1-3 minute dense speech-to-text passes, yielding 712K densely-captioned images. There is no GPT-4V distillation anywhere in the training data.
Molmo-72B beat Llama-3.2-90B-Vision on 11 of 11 benchmarks. The delta comes from caption quality, not architecture. Detailed human captions contain 5-10x more information per image than short web captions, and they stay factually grounded where GPT-4V distillation hallucinates.
ShareGPT4V (Chen et al., 2023) and Cauldron (Idefics2) followed the same playbook with mixed human + GPT-4V captions. For the 2026 frontier the ordering is caption density, then caption quantity, then distillation convenience.
Axis 5: resolution and its schedule
Idefics2's ablations: 384 -> 448 adds 1-2 points. 448 -> 980 with image splitting (AnyRes) adds another 3-5 on OCR benchmarks. Flat resolution training plateaus at medium accuracy, while resolution ramping (start 224, finish 448 or native) trains faster and ends higher.
Cambrian-1 ran a resolution vs tokens trade-off. At fixed compute you can have more tokens at lower resolution or fewer tokens at higher resolution. Higher resolution wins for OCR, and lower-res-more-tokens wins for general scene understanding.
The 2026 production recipe: train Stage 1 at 384 fixed, then Stage 2 with dynamic resolution up to 1280 for OCR-heavy tasks.
The Prismatic controlled comparison
Prismatic VLMs (Karamcheti et al., 2024) controlled all the axes. Same 13B LLM, same instruction data, same evaluation, and only one axis varies at a time. Results:
- Per-image visual-token count explains ~60% of variance.
- Encoder choice explains ~20%.
- Connector architecture explains ~5%.
- Everything else (data mix, scheduler, LR) the remaining ~15%.
This is a rough decomposition, but it is the cleanest answer to "what should I ablate first" in the literature.
A picker for 2026
Given the evidence, here is the default open-VLM recipe for a new project in 2026:
- Encoder: SigLIP 2 SO400m/14 at native resolution with NaFlex, concatenated with DINOv2 ViT-g/14 for dense features if you need segmentation/grounding.
- Connector: 2-layer MLP on patch tokens. Skip Q-Former unless you are token-constrained.
- LLM: Qwen2.5 / Llama-3.1 / Gemma 2, 7B for cost, 70B for quality, picked by target latency.
- Data: PixMo + ShareGPT4V + Cauldron, topped up with task-specific instruction data.
- Resolution: dynamic (min 256, max 1280 pixels per long side).
- Schedule: Stage 1 alignment (projector-only), Stage 2 full fine-tune, Stage 3 task-specific fine-tune.
Each default above traces back to an ablation in the papers listed under Further Reading.
Use It
main.py encodes condensed versions of these ablation tables as plain Python data and prints them: a table of canonical open VLMs with MMMU, CV-Bench, and DocVQA scores, the Prismatic-style axis-impact breakdown, the encoder-swap rows, and the data-mix rows. There is no parser and no numpy, just dicts and print tables.
On top of the tables sits a small picker. Give it a parameter budget and a task profile (ocr, agent, reasoning, or equal weights), and it filters recipes by LLM size, scores each one as a weighted sum of the three benchmarks, and prints the top three with their encoder, data, and resolution. The numbers are rounded and condensed, so read the structure of the evidence, not the decimals.
Ship It
This lesson produces outputs/skill-vlm-recipe-picker.md. Given a target task mix, a compute budget, and a latency target, it emits a full recipe (encoder, connector, LLM, data mix, resolution schedule) with a citation to the ablation behind each choice. That way you don't rebuild the Idefics2 ablation table at the start of every VLM project.
I'd run main.py and read the encoder-swap table before the prose. It holds the LLM at 7B and the data fixed, so the SigLIP row against the CLIP row is the cleanest look at axis 1 in the file. It also shows something a single MMMU number hides: DINOv2 scores 65.0 on CV-Bench and only 52.0 on DocVQA, while CLIP lands at 56.0 and 70.0. Which encoder is better depends on which benchmark you care about.
The picker is the part to poke at. It filters on LLM size only, then sums the three benchmarks with per-task weights. Run it at a 10B budget with the ocr profile and again with agent, and Molmo-7B-D, Cambrian-1-8B, and Idefics2-8B come back in the same order both times. With only nine recipes in the table, the weights have little room to reorder anything. That is a limit of the toy, and it tells you more about the table than about OCR versus agents.
I'd also treat the axis-impact percentages with suspicion. The six weights in the code sum to 115, and the final line prints a note about rebasing to 100 without actually doing it. The body's 60/20/5/15 split is the Prismatic summary I'd trust more as a rough guide to what to ablate first.
Exercises
-
Read MM1 Section 3.2. For a fixed 2B LLM at budget 50M images, which encoder wins? Would the answer flip at 13B LLM? Why?
-
Cambrian-1 finds that concatenating DINOv2 + SigLIP outperforms either alone on vision-centric benchmarks but adds no signal on MMMU. Predict which benchmarks gain and which stay flat.
-
Your target is a mobile UI agent on a 2B LLM. Pick encoder, connector, resolution, and data mix. Justify each choice with a specific ablation table.
-
Molmo ships 4B and 72B models. The 4B is competitive with closed 7B VLMs; the 72B beats Llama-3.2-90B-Vision on 11/11 benchmarks. What does that tell you about the LLM-size plateau hypothesis?
-
Design an ablation table to isolate data-mix quality from encoder quality on a 7B VLM. How many training runs minimum? Propose the four axis settings.
Key Terms
| Term | What people say | What it actually means |
|---|---|---|
| Ablation | "Turning one knob" | Training multiple runs that differ in exactly one design-space axis, holding everything else constant |
| Connector | "Bridge" / "projector" | Trainable module that maps vision encoder output into the LLM's token space (MLP, Q-Former, Perceiver) |
| Detailed human caption | "Dense caption" | A multi-sentence human-written description (typically 80-300 tokens) richer than a web alt text |
| Distillation | "GPT-4V captions" | Training data generated by a stronger proprietary VLM; convenient but prone to inherited hallucination |
| AnyRes / dynamic res | "High-res path" | Strategy to feed images larger than the encoder's native resolution via tiling or M-RoPE |
| Resolution ramp | "Curriculum" | Training schedule that starts low-resolution and increases, speeding alignment learning |
| Vision-centric bench | "CV-Bench / BLINK" | Evaluation that stresses fine-grained visual perception rather than language-heavy reasoning |
| PixMo | "Molmo's data" | Allen AI's 712K densely-captioned image dataset; human speech transcribed into dense captions |
Code
- main.py (python, 146 lines)