Skip to content

多模态:一张图怎么变成 token

这篇文档只回答一个问题:一张图片,怎么变成能进 Transformer 那 12 行 的东西。

一旦它变成了 token,后面的事——残差流、attention、FFN、KV Cache、采样——一个字都不用改。模型不知道自己在看图。这是全文最重要的一句话。

每个条目固定三行:是什么 / 一个可验证的数字 / 没有它会坏在哪

🔗 前置:LLM 基础:跟着一个 token 走完全程


0. 骨架

glossary §0 的第一行是 ids = tokenizer.encode(text)。多模态做的全部事情,就是给这一行加一条平行支路:

python
# 文本支路(glossary §1,原样不动)
text_emb = embedding[tokenizer.encode("这张图里有几只猫?")]   # → [T_txt, d_model]

# 图像支路(本文全部内容)
patches  = split(image, patch_size=14)        # → [N, 14, 14, 3]   §1
feats    = vision_encoder(patches)            # → [N, d_vis]        §2
img_emb  = projector(feats)                   # → [N, d_model]      §3  ★对齐到同一维度

# 汇流——从这里开始,两者再无区别
x = concat([img_emb, text_emb])               # → [N + T_txt, d_model]

for layer in range(L):                        # ← glossary §2~§4,一字未改
    x = x + attn(rmsnorm(x))
    x = x + ffn (rmsnorm(x))
...                                           # ← glossary §5~§6,一字未改

三件事看完这段就该记住:

  1. projector 那一行是全部的魔法。它把视觉编码器的输出维度 d_vis 掰成 d_model,让图像向量能挤进残差流。掰完之后,它在数值上和一个词的 embedding 没有任何区别。
  2. 图像 token 是真 token。它占上下文、占 KV Cache、按 O(T²) 参与 attention、要花钱。「传图便宜」是错觉。
  3. N 是这篇文章的主角。一张图变成多少个 token,是所有多模态成本、所有分辨率取舍、所有失败模式的唯一自变量。

速查表

名词在哪名词在哪
Patch / patch_size§1像素重排 / 2×2 合并§3
ViT / CLIP / SigLIP§2图像计费公式§4
DINOv2 / v3§2M-RoPE / RoPE-2D§5
线性投影 / MLP 连接器§3视频 / 音频 token 率§6
Q-Former / Perceiver§3早期融合 / 原生多模态§7
交叉注意力适配器§3分辨率悬崖§8

1. 切块:patch 就是图像的 token

Patch(图块)

  • 是什么:把图像切成不重叠的 P×P 小方块,每块拉平成一个向量,当成一个 token。这就是图像世界的分词——只不过它不需要学,是纯粹的几何切割。

  • 数字:token 数 N = (H/P) × (W/P)P 只有三个常见值:14、16、32

    编码器分辨率patchtoken 数
    ViT-B/1622416196(+1 CLS = 197)
    CLIP ViT-L/1422414256
    CLIP ViT-L/14@33633614576
    SigLIP So400m/1438414729
    DINOv3 ViT-7B/1622416196(+1 CLS +4 register = 201)
  • 没有它会坏在哪:不切块就得让每个像素当一个 token。224×224 = 50,176 个 token,而 attention 是 O(T²)——一张最小尺寸的图就能把 attention 撑爆。切块首先是一个压缩手段,和子词分词的动机一模一样。

  • ⚠️ 二次方陷阱N 随边长平方增长,不是线性。分辨率从 224 提到 336,token 从 256 涨到 576(2.25×);提到 896,涨到 4096(16×)。「把分辨率调高一点」在成本上从来不是「一点」。

为什么是 14 和 16

  • 这两个数不是调出来的,是算力预算的直接后果。224/14 = 16,224/16 = 14,都落在「几百个 token」这个和文本序列可比的量级上。
  • DINOv3(2025)把 patch 从 14 改回了 16,224px 下 token 从 261 降到 201。这是一次明确的成本让步——在特征质量和序列长度之间,它选了后者。

2. 视觉编码器:把 patch 变成向量

ViT(Vision Transformer)

  • 是什么:patch 拉平 → 线性投影 → 加位置编码 → 走 L 层标准 Transformer block。注意:和 glossary §2~§4 描述的结构完全相同,唯一区别是它不用因果掩码——图像没有「未来」,每个 patch 能看见所有 patch(双向)。
  • 数字:ViT-B / L / H 的隐藏维度是 768 / 1024 / 1280。CLIP ViT-L/14 是 24 层、宽 1024、16 头,约 304M 参数
  • 没有它会坏在哪:直接把原始像素块投影进 LLM,你得到的是一堆没有语义的颜色统计。编码器的作用是把像素变成语义——「这块是猫耳朵」而不是「这块偏棕色」。

CLIP / SigLIP:语义从哪来

  • 是什么:视觉编码器的语义不是凭空来的,是用图文对训出来的。CLIP 用对比学习(一个 batch 内做 softmax 匹配),SigLIP 换成 sigmoid 逐对损失,去掉了 batch 内归一化。
  • 数字:CLIP 训练用了 4 亿图文对。SigLIP 的效率提升很直白:SigLiT 在 4 块 TPUv4 上训 2 天就到 84.5% ImageNet 零样本。SigLIP 2 的规格档位:Base 86M / Large 303M / So400m 400M / giant 1B,输出维度 1152(So400m-patch14-384)。
  • 没有它会坏在哪它决定了 LLM「能看见什么」的上限。 编码器没学过的概念,后面再大的 LLM 也读不出来——投影层不会凭空造出信息。这是多模态最常被忽略的瓶颈:大家盯着 LLM 的参数量,但天花板往往在那个 400M 的编码器上。
  • ⚠️ 现在的默认选择是 SigLIP 不是 CLIP。Gemma 3 用 SigLIP 400M,且三个尺寸(4B/12B/27B)共用同一个编码器并全程冻结。编码器已经变成了一个可复用的、和 LLM 解耦的部件。

DINOv2 / DINOv3:另一条路

  • 是什么:纯自监督,不用任何文本。它学的是稠密的空间特征(哪里是边界、哪些像素属于同一物体),而不是「图文对齐」。
  • 数字:DINOv2 用 LVD-142M(1.42 亿图);DINOv3 用 LVD-1689M(16.89 亿图,从 170 亿 Instagram 图池里筛出来),最大 ViT-7B/16 有 6,716M 参数、嵌入维 4096。它在训练约 100 万步后要做一次 Gram anchoring 来修复稠密特征坍缩——这是一个诚实的工程细节:纯自监督在长训练下会自己退化
  • 没有它会坏在哪:CLIP 系的特征擅长「这是什么」,不擅长「它在哪、有多大、和谁相邻」。分割、深度、对应点这类任务需要 DINO 系的稠密特征。目前主流 VLM 走的是 CLIP/SigLIP 路线,这也部分解释了 §8 那些空间推理上的惨败。

3. 连接器:怎么接进残差流

这一节是整篇文章的技术核心。d_visd_model 不一样宽,中间必须有东西。而这个「东西」怎么设计,是过去三年多模态架构的主要战场。

① 线性投影 / MLP(现在的胜者)

  • 是什么:一个 1~2 层的 MLP,把 [N, d_vis] 直接投影成 [N, d_model],然后当普通 token 拼进序列。就这么简单。
  • 数字:LLaVA-1.5 = CLIP-ViT-L-336px + 两层 MLP(1.0 版本是单层线性,1.5 升级成 MLP),576 个视觉 token,用 120 万条公开数据,单台 8×A100 训约一天,在 11 个 benchmark 上 SOTA。
  • 没有它会坏在哪:维度对不上,向量根本进不了残差流。
  • 为什么它赢了:它保留了全部 N 个 token 的信息,且不改动 LLM 的任何结构。代价是序列变长——但序列长度问题有 GQA、有 KV 压缩、有滑动窗口去解决,而信息丢了就是丢了。「Don't be a hero」在这里应验了一次:最简单的方案赢了。

② Q-Former / Perceiver Resampler(被淘汰的路)

  • 是什么:用固定数量的可学习 query 向量,通过交叉注意力从 N 个视觉特征里「抽取」出固定长度的摘要。Flamingo 的 Perceiver Resampler 用 64 个 latent,BLIP-2 的 Q-Former 用一组可学习 query。
  • 数字:BLIP-2 靠这个设计,用少 54 倍的可训练参数,在零样本 VQAv2 上比 Flamingo-80B 高 8.7%
  • 没有它会坏在哪:不压缩的话,高分辨率图的 token 数会失控。
  • ⚠️ 但它输了:固定 64 个 latent 意味着不管图多复杂,信息都被压进同一个瓶颈。OCR、密集文档、小物体计数——这些恰恰是需要保留细节的场景。轨迹很清楚:Q-Former/Perceiver(2022-23)→ 纯 MLP(LLaVA-1.5,2023)→ MLP + 空间合并(2024-25)

③ 交叉注意力适配器(还在用,但代价明确)

  • 是什么:不把图像 token 拼进序列,而是在 LLM 内部每隔几层插一个交叉注意力层,让文本去「查」图像特征。Flamingo 和 Llama 3.2 Vision 走这条路。
  • 数字:Llama 3.2 Vision 每 4 层自注意力后插一层交叉注意力——11B 版本的 GGUF 元数据显示 cross_attention_layers = [3, 8, 13, 18, 23, ...],40 个 block 里 8 层是交叉注意力。Llama 3 论文明说这些层带来 约 25% 的参数增量;如果给 405B 加,光交叉注意力就是 约 1000 亿参数(还不算视觉编码器)。标称 11B / 90B 的实际参数是 10.6B / 88.8B
  • 没有它会坏在哪:好处很实在——图像不占文本上下文,且训练时可以冻结整个语言模型(Llama 3.2 就是这么做的,只更新适配器和视觉编码器)。
  • ⚠️ 但显存账不划算:有研究测出交叉注意力层里图像 token 的 KV Cache 显著超过自注意力层里文本 token 的 KV Cache,而且砍掉 50% 视觉特征 benchmark 基本不掉。Llama 4 已经放弃交叉注意力,转向早期融合(§7)。

④ 空间合并 / 像素重排(真正的降本手段)

  • 是什么:在投影之前,把相邻的 2×2 个 patch 特征拼成一个,token 数直接砍 4 倍。它压的是空间冗余,不是语义瓶颈——所以比 Q-Former 温和得多。
  • 数字
    • Qwen2-VL:ViT 后接一个 MLP,把相邻 2×2 token 压成 1 个。原文的例子:「224×224 的图,patch_size=14,进 LLM 前被压成 66 个 token」(256/4 = 64 个 patch token + 2 个视觉起止特殊 token)。ViT 本体 675M 参数
    • InternVL 2.5:像素重排把每个 448×448 图块的 1024 个 token 降到 256 个(4×)。动态切块最多 12 块 + 1 张缩略图。
    • Gemma 3:896×896 进编码器,输出用 4×4 平均池化压到 256 个 token
  • 没有它会坏在哪:不压的话,896×896 / patch 14 = 4096 个 token——一张图就吃掉 4k 上下文。压到 256 之后才有「一次传 10 张图」的可能。
  • 这是当前的标准配方原生分辨率 ViT → 2×2 合并 → 两层 MLP → 拼进序列。Qwen2.5-VL、InternVL、Gemma 3 用的都是这一套的变体。

4. 账单:一张图到底多少 token

这一节是全文最实用的部分。每一家的公式都不一样,而且都在变。

⚠️ 两个必须先纠正的过时说法

  1. Claude 的 (宽×高)/750 已经不是官方公式了。现行文档给的是 28×28 像素网格⌈w/28⌉ × ⌈h/28⌉。(好消息:两者几乎等价——784 px/token vs 750 px/token,说明 /750 一直是同一个网格的近似。作为心算仍然可用,但别当公式写。)
  2. OpenAI 现在同时跑两套公式。经典的 85 + 170×tiles 只适用于 GPT-4o / 4.1 / o1 / o3 这一代;新一代模型换成了 32×32 patch + 1536 上限 + 每模型乘数

OpenAI(A)图块制

先缩到 2048×2048 以内 → 再把短边缩到 768 → 数有多少个 512×512 方块。

模型基数每图块
GPT-4o / 4.1 / 4.585170
GPT-4o-mini28335667
o1 / o1-pro / o375150
computer-use-preview65129

GPT-4o-mini 那一行不是笔误。 它的图像 token 单价是 4o 的 33 倍——因为它按自己更小的 token 尺度折算。「用 mini 省钱」这个直觉在图像上直接反过来。

OpenAI(B)patch 制

适用于 GPT-4.1-mini/nano、o4-mini、GPT-5 系:

patches = ⌈w/32⌉ × ⌈h/32⌉        上限 1536
超限则按 sqrt(32² × 1536 / (w×h)) 缩放后重新数
tokens  = patches × 模型乘数

乘数:GPT-4.1-mini / GPT-5-mini = 1.62,nano = 2.46,o4-mini = 1.72。 官方给的完整例子:1800×2400 → 57×75 = 4275 patch → 缩放到 1056×1408 → 1452 patch

Anthropic Claude

⌈w/28⌉ × ⌈h/28⌉,两档上限:

档位模型长边上限token 上限
高分辨率Claude 4.7+2576 px4784
标准其余1568 px1568

官方表里最说明问题的一行:3840×2160 在标准档被缩到 1456×819——829 万像素砍到 119 万,丢掉 85%。高分辨率档保留 2576×1449,token 从 1560 涨到 4784(约 3 倍)。

Google Gemini

  • 两边都 ≤ 384 px → 恒定 258 token
  • 更大 → 切成 768×768 的块,每块 258 token
  • 切块单位 = floor(min(w,h) / 1.5)
  • 官方例子:960×540 → 单位 360 → 3×2 = 6 块

Qwen2.5-VL(开源系的做法)

tokens = (H/28) × (W/28),边长向 28 的倍数取整。默认范围 4 ~ 16,384 token,推荐区间 min_pixels = 256×28×28(256 token)、max_pixels = 1280×28×28(1280 token)。它把 token 预算直接暴露成了一个可调参数——这是开源模型相对闭源 API 最实际的一个优势。

⭐ 同一张 1024×1024 的照片,各家收多少

系统算法token
o1 / o375 + 150×4675
GPT-4o / 4.1短边→768,2×2=4 块,85+170×4765
Gemini单位 682 → 2×2=4 块 × 2581,032 ⚠️推导
Qwen2.5-VL(推荐上限)封顶 12801,280
Claude(两档同值)37×371,369
Qwen2.5-VL(不封顶)37×371,369
GPT-4.1-mini1024 patch × 1.62~1,659
o4-mini1024 patch × 1.72~1,761
GPT-4.1-nano1024 patch × 2.46~2,519
GPT-4o-mini2833 + 5667×425,501

⚠️ Gemini 那一行是我按官方切块规则推导的(用 960×540→6 块的官方例子反推出必须向上取整),不是官方给的例子;GPT-4o 的 765 同理是按文档流程算的。上生产前用返回里的 usage 字段自己核一遍——已有开发者报告实际计费高于文档公式。

读完这张表该记住的:同一张图,最贵的比最便宜的差 37 倍。图像 token 不是一个可以糊弄过去的成本项,它是选型的一个硬输入。


5. 位置编码:二维的顺序

为什么不能直接用 RoPE

glossary §3 说过:不给位置信息,attention 对输入顺序是置换等变的。图像上这个问题更严重——patch 是二维排列的,把它拉平成一维序列,「上下相邻」这个关系就丢了。第 1 个 patch 和第 17 个 patch 在图上是垂直相邻,在序列里却隔了 16 位。

M-RoPE(Qwen2-VL)

  • 是什么:把 RoPE 的旋转维度拆成三组:时间 / 高 / 宽。文本 token 三个 ID 相同(退化成普通 RoPE),图像 token 时间维恒定、高宽维变化,视频 token 三维全动。
  • 数字:通道切分从发布的 config 里能直接读到——mrope_section = [16, 24, 24],即 16 维给时间、24 维给高、24 维给宽。(注意:这是 config 里的值,论文正文没写死这个切分。)
  • 没有它会坏在哪:模型无法判断两个 patch 是「左右相邻」还是「上下相邻」,所有空间关系推理(「杯子在书的左边」)都无从谈起。

其他做法

  • RoPE-2D(Pixtral):直接把旋转按二维展开,支持任意分辨率和长宽比,最大 1024×1024,并加了 [IMG BREAK] / [IMG END] 特殊 token 来标记换行和结束——行边界得显式告诉模型,因为拉平之后它看不出来
  • 轴向 RoPE(DINOv3):配合 box jittering 数据增强,训练时只用 256 分辨率,推理能稳到 4k
  • 插值(最经典的一招):CLIP 的 336px 模型不是重训的,它的位置编码是从 224px 模型插值出来的,再多训一个 epoch。这是变分辨率的标准做法。
  • Qwen2.5-VL 的绝对时间编码:让时间维 ID 对齐真实墙上时钟,这才有了「秒级事件定位」。

6. 视频与音频:把时间也切成 token

视频

视频没有新机制,就是图像 × 帧数。全部的设计空间只有两个旋钮:采样率每帧 token 数

Gemini 的账(官方数字,最清楚)

  • 采样 1 fps
  • 默认 258 token/帧;低分辨率档 66 token/帧
  • 音轨 32 token/秒
  • 合计:默认 约 300 token/秒,低分辨率 约 100 token/秒
  • ⭐ 一分钟视频 ≈ 18,000 token(默认)/ 6,000 token(低分辨率)
  • 100 万上下文能装 1 小时(默认)或 3 小时(低分辨率)

Qwen2-VL:采样 2 fps,但每个视频总 token 硬性封顶 16,384——采样率和总预算是两个独立的闸门。

没有它会坏在哪:不封顶的话,一分钟 1080p 视频按每帧 1560 token(Claude 标准档)× 30 fps = 281 万 token,任何模型都装不下。所有视频多模态本质上都是在做激进的时间降采样——1 fps 意味着你丢掉了 96.7% 的帧。快速动作、瞬时事件,模型在物理上就看不见。

音频

  • Whisper 编码器(几乎所有音频前端的祖宗):68 万小时训练,30 秒定长窗口,80 通道 log-Mel,25ms 窗 / 10ms 跳,一个 30 秒窗产出 1500 帧(即 50 帧/秒)。
  • GPT-4o Realtime 的计费口径最直白:用户音频 1 token / 100ms(10 token/秒 ≈ 600/分钟)助手音频 1 token / 50ms(20 token/秒 ≈ 1200/分钟)。静音不产生 token。
  • Qwen2-Audio:编码器从 Whisper-large-v3 初始化,加一个 stride=2 的池化层,每帧约对应 40ms,即 25 Hz / 25 token 每秒
  • Mimi / Moshi(离散音频编解码):24kHz 音频 → 12.5 Hz 帧率8 个码本100 token/秒,码率 1.1 kbps,端到端延迟 80ms。设计动机写得很直白:12.5 Hz 是在向文本 token 约 3-4 Hz 的速率靠拢——让音频和文本在同一个数量级上,才能塞进同一个自回归循环。
  • SNAC:多尺度 RVQ,三层量化器跑在不同时间分辨率(12 / 23 / 47 Hz)上,合计 约 82 token/秒,0.98 kbps,19.8M 参数。

没有它会坏在哪:音频天然是每秒 16,000 个采样点。不做 100~1000 倍的降采样,它连一句话都进不了上下文。「实时语音对话」这件事的全部工程难点,就是把这个降采样做到既省 token 又不丢语义。


7. 原生多模态:原生在哪

「原生多模态」这个词被用滥了。它只有一个技术含义:图像编码器是不是和 LLM 一起从头训的,而不是事后接上去的。

后期融合(接上去的)

预训练好的 ViT + 预训练好的 LLM,中间训一个连接器。LLaVA、Llama 3.2 Vision、Gemma 3 都是这类(Gemma 3 甚至全程冻结视觉编码器)。优点是便宜、模块可复用;缺点是编码器的语义边界在多模态训练开始前就定死了。

早期融合(一起训的)

图像被转成离散 token,和文本 token 共享同一张词表,从预训练第一步就混在一起。

  • Chameleon(Meta):512×512 图 → 1024 个离散 token,码本大小 8192;BPE 词表 65,536,其中 8192 个就是图像码本——文本和图像在字面意义上共用一个词表。训练 9.2T token、2.1 个 epoch,7B / 34B 两档,用 QK-Norm 稳训练。
  • Emu3:纯 next-token 预测,8B 参数,视觉 tokenizer 做 8×8 空间压缩、码本 32,768、4× 时间压缩。理解和生成都不用扩散、不用组合系统。
  • Llama 4:官方措辞是「early fusion,把文本和视觉 token 统一进同一个主干」,视觉编码器基于 MetaCLIP 但配合一个冻结的 Llama 重新训过。Scout 是 17B 激活 / 16 专家 / 109B 总参 / 10M 上下文;Maverick 是 17B 激活 / 128 专家 / 400B 总参。官方只承诺最多 8 张图的后训练效果。

哪条路对

Apple 那篇《Scaling Laws for Native Multimodal Models》(ICCV 2025 oral)训了 457 个模型来回答这个问题,结论很直接:

后期融合相对早期融合没有内在优势。 早期融合在小参数量下表现更强、训练更省、部署更简单。

而且它指出 MoE 让模型能自己学出模态专属的权重,这对早期融合是实质性加成——glossary §4 说 MoE 只作用在 FFN 上,那么在多模态里,不同专家自然会分化去处理不同模态。这也解释了 Llama 4 为什么同时选了早期融合和 MoE。

⚠️ GPT-4o 和 Gemini 的「原生」是厂商说法,没有公开架构细节——没有参数量、没有 tokenizer 规格、没有融合方式。别把它们当技术论据用。


8. 坏在哪里

多模态最反直觉的一点:这些模型的「看」和人类的「看」,重合度远低于 demo 给人的印象。

3,807 道选择题,考的全是经典 CV 任务(相对深度、视觉对应、多视角推理、伪造检测)——人类平均 95.70%,而:

GPT-4V 51.26%,Gemini 45.72%——只比随机猜(38.09%)高 13.17 和 7.63 个百分点。

论文的措辞很克制也很致命:这些感知能力在多模态 LLM 上「尚未涌现」,因为这类任务「抵抗通过自然语言中介」。

翻译一下:能被语言描述的视觉任务,模型做得不错;不能被语言描述的,它基本在瞎猜。 这直接对应 §2 那个判断——主流 VLM 用的是 CLIP/SigLIP 的图文对齐特征,不是 DINO 系的稠密空间特征。它学的一直是「怎么用语言描述这张图」,不是「这张图的几何结构是什么」。

其他有数字的失败面

benchmark最好成绩参照
BLINKGPT-4V 51.26%人类 95.70%,随机 38.09%
MathVistaGPT-4V 49.9%人类 60.3%(差 10.4 分)
MMMUGemini Ultra 59% / GPT-4V 56%11.5K 题,30 学科

MathVista 论文对失败原因的判断是「难以理解复杂图形、难以做严格推理」。InternVL 2.5 报告 CoT 能给 MMMU +3.7 分——说明有一部分失败是推理侧的,不全是感知侧。这两类失败要分开看,修法完全不同。

分辨率悬崖(可量化)

Claude 的两档上限是公开数据里最干净的例子:同一张 3840×2160 的图,标准档缩到 1456×819(丢 85% 像素,1560 token),高分辨率档保留 2576×1449(4784 token,约 3 倍)。小字 OCR 就是在这条线上失败的——不是模型「不认识字」,是那些字在进编码器之前已经被插值抹掉了。

Anthropic 自己列的限制里还有几条值得抄下来:200 像素以下的小图、旋转图、多次 JPEG 压缩的图会诱发幻觉;坐标定位是近似值;「大量小物体的计数不保证准确」

计数这一条特别能说明问题。数数在人看来是最简单的视觉任务,但对模型来说——它没有一个「逐个指认并累加」的机制,只有一次前向里的加权平均。glossary §3 说 attention 是加权求和,加权求和天生不会数数。


9. 一句话收尾

图像变成 token 之后,模型不知道自己在看图。这是多模态能这么快铺开的原因——不用改架构,只用改入口

也是它现在这些毛病的原因。整条链路的每一环都在把二维的、连续的、高信息量的东西,压成一维的、离散的、几百个 token 的序列,然后指望一个从文本里学会推理的模型在这上面做几何。它在能被语言描述的部分做得很好,在其余部分接近随机。

N 是唯一的自变量。 成本、分辨率、能不能读小字、能不能数清楚——全在这一个数上。


附:本文用到的未定论/未公开项

写技术文档最容易出问题的地方是把「厂商说法」当「已验证事实」。下面这些我在正文里做了标注,这里再集中列一次:

  • GPT-4o / Gemini 的内部架构:未公开,「原生多模态」是厂商措辞,无法作为技术论据。
  • Llama 4 的单图 token 数:官方未发布。
  • Gemini 1024×1024 = 1032 tokenGPT-4o = 765 token:按官方规则推导,非官方给出的例子,生产前请用 usage 字段核对。
  • Q-Former 的 query 数与参数量:常见的「32 个 query / 188M」我没能从论文正文确认,正文中未采用。
  • Claude 的 (w×h)/750:已被 28px 网格公式取代,仅可作心算近似。

Released under the MIT License.