Qwen3-VL 图像 Token 计算器

基于 Qwen3-VL-32B-Instruct 配置 |源码:image_processing_qwen2_vl.py

🧮 Token 计算器

输入图像尺寸,实时计算 resize 后的大小和最终 token 数。

常见尺寸:
单张 Token 数
Context 占用
原始尺寸
原始像素
smart_resize
Resize 后像素
Patch grid
Merge 后 tokens

核心参数

参数说明
max_position_embeddings 262,144 最大上下文长度(256K tokens)
max_pixels 16,777,216 单张图最大像素数(4096² = 16M)
min_pixels 65,536 单张图最小像素数(256²)
patch_size 16 每个 patch 覆盖 16×16 像素
spatial_merge_size 2 2×2 patch 合并为 1 个 token
factor (= patch × merge) 32 resize 后尺寸必须是 32 的整数倍
image_mean / std [0.5, 0.5, 0.5] 归一化参数
宽高比上限 200:1 超过则报错
📐 Token 数范围

计算公式

完整链路
Step 1: smart_resize

将 $H \times W$ 调整为 $\bar{H} \times \bar{W}$,满足:

  • $\bar{H}, \bar{W}$ 均为 32 的整数倍
  • $65{,}536 \leq \bar{H} \times \bar{W} \leq 16{,}777{,}216$
  • 尽可能保持原始宽高比
Step 2: Patch → Token
$$N_{\text{tokens}} = \frac{\bar{H}}{16} \times \frac{\bar{W}}{16} \div 2^2 = \frac{\bar{H} \times \bar{W}}{1024}$$

每 1024 像素 = 1 个 LLM token

smart_resize 分支逻辑

① 对齐:$\bar{H} = \text{round}(H / 32) \times 32$,$\bar{W}$ 同理

② 超过上限($\bar{H}\bar{W} > \text{max\_pixels}$):

$$\beta = \sqrt{\frac{HW}{\text{max\_pixels}}}, \quad \bar{H} = \max\!\Big(32, \Big\lfloor \frac{H}{\beta \cdot 32} \Big\rfloor \times 32\Big)$$

③ 低于下限($\bar{H}\bar{W} < \text{min\_pixels}$):

$$\beta = \sqrt{\frac{\text{min\_pixels}}{HW}}, \quad \bar{H} = \Big\lceil \frac{H\beta}{32} \Big\rceil \times 32$$

④ 在范围内:直接使用对齐后的尺寸。