多模态模型图片换算tokens规则
qwen系统vl模型换算规则:
计算公式:图像Token = h_bar * w_bar / token_pixels + 2
h_bar、w_bar:缩放后的图像长宽,模型在处理图像前会进行预处理,会将图像缩小至特定像素上限内,像素上限与max_pixels和vl_high_resolution_images参数的取值有关,
相关章节:处理高分辨率图像。
token_pixels:每视觉Token对应的像素值,不同模型情况不同:
Qwen3-VL、qwen-vl-max-2025-08-13、qwen-vl-plus-2025-08-15、qwen-vl-plus-2025-07-10:每个Token对应 32x32像素
QVQ及其他Qwen2.5-VL模型:每个Token对应28x28像素
以下代码演示了模型内部对图像的大致缩放逻辑,可用于估算一张图像的Token,实际计费请以 API 响应为准。
import math
# 使用以下命令安装Pillow库:pip install Pillow
from PIL import Image
def token_calculate(image_path, max_pixels, vl_high_resolution_images):
# 打开指定的PNG图片文件
image = Image.open(image_path)
# 获取图片的原始尺寸
height = image.height
width = image.width
# 根据不同模型,将宽高调整为32或28的整数倍
h_bar = round(height / 32) * 32
w_bar = round(width / 32) * 32
# 图像的Token下限:4 个 Token
min_pixels = 4 * 32 * 32
# 若 vl_high_resolution_images 设置为True,则输入图像Token上限为16386,对应的最大的像素值为16384 * 32 * 32 或 16384 * 28 * 28,否则为max_pixels设置的值
if vl_high_resolution_images:
max_pixels = 16384 * 32 * 32
else:
max_pixels = max_pixels
# 对图像进行缩放处理,调整像素的总数在范围[min_pixels,max_pixels]内
if h_bar * w_bar > max_pixels:
# 计算缩放因子beta,使得缩放后的图像总像素数不超过max_pixels
beta = math.sqrt((height * width) / max_pixels)
# 重新计算调整后的宽高
h_bar = math.floor(height / beta / 32) * 32
w_bar = math.floor(width / beta / 32) * 32
elif h_bar * w_bar < min_pixels:
# 计算缩放因子beta,使得缩放后的图像总像素数不低于min_pixels
beta = math.sqrt(min_pixels / (height * width))
# 重新计算调整后的高度
h_bar = math.ceil(height * beta / 32) * 32
w_bar = math.ceil(width * beta / 32) * 32
return h_bar, w_bar
if __name__ == "__main__":
# 将test.png替换为本地的图像路径
h_bar, w_bar = token_calculate("xxx/test.jpg", vl_high_resolution_images=False, max_pixels=16384*28*28, )
print(f"缩放后的图像尺寸为:高度为{h_bar},宽度为{w_bar}")
# 系统会自动添加<vision_bos>和<vision_eos>视觉标记(各计1个Token)
token = int((h_bar * w_bar) / (28 * 28))+2
print(f"图像的Token数为{token}")

浙公网安备 33010602011771号