Downloads · 30 days
34
26% of all-time downloads
numinousmuses/laguna-s-2.1-vision
laguna-s-2.1-vision is a image-text-to-text model from numinousmuses. Use it for the image-text-to-text task on the model card, and read the license before you ship it in a product. It is set up for transformers. The card lists the license as mit.
Laguna-S-2.1 with sight. A vision-language model that attaches the Qwen3-VL vision tower to poolside's Laguna-S-2.1 through a trained projector.
Downloads · 30 days
34
26% of all-time downloads
All-time downloads
133
Public
Repo size
1.2 GB
Likes
1
Public
Click a slice to open those files.
.safetensors1.2 GB · 99%
From the Hugging Face model README
Laguna-S-2.1 with sight. A vision-language model that attaches the Qwen3-VL vision tower to poolside's Laguna-S-2.1 through a trained projector.
Laguna-S-2.1 is a strong code and reasoning model with no image input. This checkpoint adds it without touching a single Laguna weight. Both the text backbone and the vision tower are frozen and byte-identical to their upstream releases. The only newly trained parameters are the 35.4M projector that maps Qwen3-VL's 1152-dim patch embeddings into Laguna's 3072-dim token space.
| Component | Detail |
|---|---|
| Text backbone | Laguna-S-2.1, 117B total / 5.3B active, MoE, frozen |
| Vision tower | Qwen3-VL, 27 layers, 1152-dim, patch 16, frozen |
| Projector | norm -> 2x2 concat -> linear_fc1 -> GELU -> linear_fc2, 1152 to 4608 to 3072, trained |
| Training | 2,070 steps, batch 64, 132,480 samples, lr 5e-4 |
| Hardware | 4x B200, 7.5 hours, 30.1 B200-hours (about $188) |
Code: https://github.com/numinousmuses/laguna-s-2.1-vision — training, evaluation with the blind control, the projector module, and full inference code.
Every benchmark ran twice: once normally, once with the image features replaced by Gaussian noise of the same shape and scale. The gap between the two is the measurement. 300 questions per benchmark, per arm.
| benchmark | sighted | blind | gap | chance |
|---|---|---|---|---|
| MMMU-Pro | 38.33% | 13.00% | 25.33 | 25% |
| MMMU_DEV_VAL | 45.33% | 20.00% | 25.33 | 25% |
| MMBench_DEV_EN | 73.67% | 25.67% | 48.00 | 25% |
| SEEDBench_IMG | 68.00% | 19.00% | 49.00 | 25% |
| HallusionBench | 51.67% | 4.33% | 47.34 | 50% |
| TextVQA_VAL | 74.00% | 2.67% | 71.33 | n/a |
| OCRVQA | 43.67% | 6.00% | 37.67 | n/a |
Read the chance column before the sighted column.
The blind arm is the point of the table. Sighted accuracy on its own cannot separate a model reading images from a language model answering off the question wording. In our own experiments a different graft scored 41.67% sighted on MMMU-Pro and 40.0% blind, a gap of 1.67 points. It was not using the images at all, and its headline number was indistinguishable from this model's.
linear_fc2 was randomly initialised. Only 4 of 6 projector tensors
transferred.Reinforcement learning, at a scale that can be measured. GRPO on the projector with verifiable rewards is the obvious next stage, and it is cheap because only 35.4M parameters move. Our own 10-step probe is not evidence either way: step-to-step reward variance was std 0.024 on a mean of 0.122, wider than anything 10 steps could produce. A real run needs hundreds of steps before the benchmark suite can settle it.
Unfreeze the language model. Everything here holds Laguna byte-identical, which is what makes the text behaviour guarantee below true. Relaxing that, even to LoRA on attention projections only, is the largest available gain and the point at which the model stops being a drop-in replacement for the base weights.
Raise the image token budget. Dropping the 2x2 merge quadruples image tokens and should move TextVQA and OCRVQA most. It costs sequence length, so it trades against throughput rather than against quality.
Train against hallucination directly. HallusionBench sits at its 50% floor. That needs contrastive data where the question's premise is false, which the current short-answer mixture contains almost none of.
More alignment data. 57,600 samples is small. The gap was still moving between checkpoints when we stopped, which means the curve had not flattened.
What this would not fix. No amount of projector training makes a frozen text model reason about images the way an end-to-end multimodal model does. The projector translates; it does not teach. The ceiling here is set by what Laguna can already do once the content arrives in its embedding space.
With no image tokens in the prompt, the forward pass is bit-identical to stock Laguna-S-2.1. Every backbone weight is frozen, the projector is not in the text path, and the added placeholder id never appears. This is a property of the construction, not a benchmark result.
mm_projector.safetensors 35.40 M the only trained part
vision_tower.safetensors 576.39 M Qwen3-VL tower, frozen
config.json wires backbone, tower, projector
preprocessor_config.json Qwen preprocessing, patch 16
tokenizer.json, tokenizer_config.json, generation_config.json
The text shards are not included. They are byte-identical to
poolside/Laguna-S-2.1, so point --model-path at the upstream checkpoint and
load these files alongside it. Copying 219 GB would buy nothing.
import torch, json
from transformers import AutoTokenizer, AutoModelForCausalLM, AutoImageProcessor
from transformers.models.qwen3_vl_moe.modeling_qwen3_vl_moe import Qwen3VLMoeVisionModel
from transformers.models.qwen3_vl_moe.configuration_qwen3_vl_moe import Qwen3VLMoeVisionConfig
from safetensors.torch import load_file
REPO = "<this repo>"
BASE = "poolside/Laguna-S-2.1"
IMAGE_TOKEN_ID = 100351
lm = AutoModelForCausalLM.from_pretrained(BASE, dtype=torch.bfloat16,
device_map="auto", attn_implementation="sdpa")
tok = AutoTokenizer.from_pretrained(BASE)
cfg = json.load(open(f"{REPO}/config.json"))
tower = Qwen3VLMoeVisionModel(Qwen3VLMoeVisionConfig(**cfg["vision_config"]))
tower.load_state_dict({k[len("model.visual."):]: v
for k, v in load_file(f"{REPO}/vision_tower.safetensors").items()},
strict=False)
tower = tower.to("cuda", torch.bfloat16)
proc = AutoImageProcessor.from_pretrained(REPO)
# projector: see modeling code at https://github.com/numinousmuses/laguna-s-2.1-vision
Full inference code, including the projector module and the blind-control evaluation harness, is in the linked GitHub repository.
MIT, following both parents. The projector weights are released under MIT. Redistributed upstream weights keep their original terms.
Built on poolside's Laguna-S-2.1 and Alibaba's Qwen3-VL. Neither team was involved in this work. Please do not send issues about this checkpoint to them.