qwen3vl的image_max_token_num和max_pixels
笔者从qwen2vl开始用这个系列的模型,经历了qwen2vl/qwen2.5vl/qwen3vl
qwen2vl和qwen2.5vl系列各模型使用过程中,用的都是MAX_PIXELS/MIN_PIXELS这两个环境参数(实际上主要还是限制最大像素值MAX_PIXELS,为了推理效率和极端尺寸图片不oom);
然而在qwen3vl出来后,发现官方文档里给出的环境变量为IMAGE_MAX_TOKEN_NUM/IMAGE_MIN_TOKEN_NUM
看了一些资料,发现是因为qwen3vl的patch size改变了,然后qwen_vl_utils的版本升级了,因此对图像预处理的所需参数也改变了。
(顺带吐槽一句 qwenvl的github仓库只有一个main分支,没有2vl,2.5vl,3vl这样的tag,找历史版本的code还要去commit里翻)

于是问题就来了,那我以前设置的MAX_PIXELS=602112删了后,我咋设置对齐的参数呢?
首先对齐一个基础认知,MLLM本质上是LLM,因此图像会经过预处理后变成一维的token后进入llm的transformer,而不是传统CNN里的什么feature map,所以不要在乎输入图像的尺寸了,而是从transformer的输入token num倒推。
原先版本(比如qwen2.5vl/2vl)实际上是IMAGE_FACTOR和MAX_PIXELS一起搭配使用的
这里的factor实际上就是下采样倍数。
IMAGE_FACTOR默认是28的情况下(28哪来的?qwen2vl vit的后面有一个MLP做的pooling(x2),加上vit本身的降采样x14(patch_size = 14),总共图像在 宽、高上会降采样2x14=28倍)
那么默认/推荐的MAX_PIXELS=602112实际上是768 * 28 * 28,相当于一张图如果h*w=602112(不要想开根号!再说一遍,摒弃feature map的思维)的情况下,最后会变成768的token_num
那么qwen3vl做了什么呢?因为截止目前(2025-10-20)还没放tech report,所以只能从模型结构图里找细节
这里的图32x256最后变成了8tokens,那么相当于32x256/32/32=8token,也就是说实际上patch size从原先的14 -> 16。
也就是说IMAGE_FACTOR变成了32,对应算下新的MAX_PIXEL就可以,当然qwen3vl可能考虑到这个问题,直接去掉了这层计算,只需要设置最后的token_nums。
结论:
对于原先的MAX_PIXELS=602112,如果要对齐qwen3vl,只需要设置IMAGE_MAX_TOKEN_NUM=768即可。
同理,如果我有个比较大的图,max_pixels原本设置了1003520,相当于1280的token_num(1280 x 28 x 28 = 1003520),那么现在只需要设置IMAGE_MAX_TOKEN_NUM=1280。
更多推荐

所有评论(0)