Views
No views yet
*.pt is a state_dict of a bottleneck adapter Δ(x) = W_up · GELU(W_down · x) added to the
visual tokens (and, for the Qwen files, a few early decoder layers at image positions).| file | base model | trainable params | notes |
|---|---|---|---|
qwen3vl-8b_adapter_rank8.pt | Qwen/Qwen3-VL-8B-Instruct | 279K (0.003%) | best efficiency; VSR +3.2, CV-Bench transfer +9.9 |
qwen3vl-8b_adapter_rank96.pt | Qwen/Qwen3-VL-8B-Instruct | 3.16M (0.04%) | VSR +2.8, CV-Bench transfer +10.7 |
qwen25-3b_adapter.pt | Qwen/Qwen2.5-VL-3B-Instruct | 3.2M | VSR +3.9 |
internvl3-2b_adapter.pt | OpenGVLab/InternVL3-2B-hf | 2.4M | VSR +4.2 |
smolvlm_adapter.pt | HuggingFaceTB/SmolVLM2-2.2B-Instruct | 3.2M | VSR +1.3 |
llava_adapter.pt | llava-hf/llava-1.5-7b-hf | 6.3M | ~0 (base at chance on VSR) |
idefics2_adapter.pt | HuggingFaceM4/idefics2-8b | 6.3M | −2.0 (Perceiver connector; included for completeness) |
1import torch, torch.nn.functional as F
2from torch import nn
3
4class Bottleneck(nn.Module):
5 def __init__(self, d, r):
6 super().__init__()
7 self.down = nn.Linear(d, r); self.up = nn.Linear(r, d)
8 def forward(self, x):
9 return self.up(F.gelu(self.down(x)))
10
11sd = torch.load("qwen3vl-8b_adapter_rank8.pt") # {"merger": ..., "L2": ..., "L6": ..., "L10": ...}
12# register forward hooks that add Bottleneck(x) to the projector output (key "merger")
13# and to image-token positions at decoder layers {2,6,10} (keys "L2","L6","L10").