图像和视频输入总是太大?qwen-vl-utils 像素控制从入门到调优
图像和视频输入总是太大qwen-vl-utils 像素控制从入门到调优【免费下载链接】Qwen3-VLQwen3-VL is the multimodal large language model series developed by Qwen team, Alibaba Cloud.项目地址: https://gitcode.com/GitHub_Trending/qw/Qwen3-VL为什么 Qwen2.5-VL 不能直接生吃原图和视频因为它的视觉编码是动态分辨率的图像按 patch 切块切得越细token 越多。一张 4K 原图、一段 10 分钟的录像原封不动塞进去很容易把上下文窗口和显存一起撑爆。qwen-vl-utils 就是为此而生的预处理助手专门服务于 Qwen2.5-VL 这类视觉语言模型图像尺寸调整交给smart_resize视频帧数抽帧交给smart_nframes而process_vision_info则把两者统一成一个入口输出可以直接喂给模型 processor 的张量。安装 qwen-vl-utils 并跑通第一张图一条命令完成安装pip install qwen-vl-utils # 需要更快的视频读取时可选装 decord 后端 # pip install qwen-vl-utils[decord]上手流程只需要三步把视觉信息连同尺寸配置一起写进 messages → 调用process_vision_info拿到处理好的images, videos→ 交给 processor 组模型输入。最小可用示例from qwen_vl_utils import process_vision_info messages [{ role: user, content: [ {type: image, image: file:///path/to/image.jpg, resized_height: 280, resized_width: 420}, # 指定目标尺寸可省略 {type: text, text: Describe this image.} ] }] images, videos process_vision_info(messages)resized_height/resized_width是软约束你给出期望值smart_resize会在对齐步长和像素上下限的前提下最接近这个值。另外注意既然工具包已经负责缩放后续 processor 应传do_resizeFalse避免二次缩放把尺寸带偏。图像尺寸怎么被对齐和压缩smart_resize 的三个约束smart_resize是一个纯计算函数不读文件回答的问题是这张图最终以多大尺寸进模型。它同时满足三个约束尺寸对齐输出的高和宽都必须是factor的整数倍。factor等于 patch 尺寸乘以 2空间合并因子Qwen2.5-VL 下为 14×228。对齐是为了让图像能整齐铺进 ViT 的 patch 网格切不出半块。像素区间总像素落在 [min_pixels, max_pixels] 内。默认上限是 16384 个 token 对应的像素数下限是 4 个 token——上限防撑爆上下文下限保证小图也有最低表达量。比例保持超限时按beta sqrt(原始像素/上限)等比缩小并向下取整到步长低于下限时等比放大并向上取整宽高比基本不变形。另外它拒绝长宽比超过 200:1 的病态输入直接抛错而不是产出诡异尺寸。直接调用长这样from qwen_vl_utils import smart_resize # 800x600 的图按 28 对齐后得到对齐且受像素上限约束的新尺寸 (h, w) new_h, new_w smart_resize(800, 600, factor28)视频帧数怎么抽smart_nframes 的计算逻辑视频进模型前要先决定抽多少帧这就是smart_nframes的事它拿到视频总帧数和原始帧率按你的配置算出最终帧数。两种给法二选一给fps默认 2.0按总帧数 ÷ 原帧率 × 目标fps折算再夹在min_frames默认 4到max_frames默认 768之间给nframes直接指定抽帧数工具包会把它就近对齐到步长 2 的倍数——这是时序合并的要求帧数成对使用才能进入时间合并层。无论哪种给法最终帧数还会再对 2 取整并做合法性校验必须在 [2, 总帧数] 内。messages [{ role: user, content: [ {type: video, video: file:///path/to/video.mp4, fps: 2.0, # 每秒抽 2 帧 min_frames: 4, max_frames: 768, resized_height: 280, resized_width: 280}, {type: text, text: Describe this video.} ] }] images, videos process_vision_info(messages)抽帧之后每帧图像同样会过一遍smart_resize做尺寸调整整个视频还有总像素预算兜底所以帧多时单帧分辨率会自动下调总 token 不会失控。参数与环境变量速查表名称类型默认值作用与原因fpsmessages 字段2.0按目标帧率折算抽帧数控制时间维度信息量nframesmessages 字段—直接指定帧数与fps二选一就近对齐到 2 的倍数min_frames/max_framesmessages 字段4 / 768抽帧数的下限/上限防止视频过短帧不够或过长爆 tokenresized_height/resized_widthmessages 字段按原图期望输出尺寸最终仍受步长对齐和像素区间约束min_pixels/max_pixelsmessages 字段4 / 16384 个 token 的像素数单图或视频帧像素上下限是控制单图内存占用的直接开关VIDEO_MAX_PIXELS环境变量上下文长度 90% 折算值视频整段像素总预算例如export VIDEO_MAX_PIXELS$((32000 * 28 * 28 * 0.9))MODEL_SEQ_LEN环境变量128000模型可接受的 token 上限参与总像素预算计算FORCE_QWENVL_VIDEO_READER环境变量自动探测强制指定读取后端torchcodec/decord/torchvision便于排查后端兼容问题TORCHCODEC_NUM_THREADS环境变量8torchcodec 后端的 FFmpeg 解码线程数按 CPU 核数调整可提速常见坑与调优建议帧数越界会抛错nframes必须在 [2, 总帧数] 区间内过短的视频抽不满 2 帧时若你以帧列表形式传入工具包会用最后一帧补齐到偶数而不是报错。后端失败自动降级首选读取视频的后端按 torchcodec → decord → torchvision 顺序探测一旦异常会自动回落到 torchvision 并打 warning进程不会中断想锁定后端就用FORCE_QWENVL_VIDEO_READER。显存吃紧先调max_pixels它是 token 数的直接杠杆调低后单图/单帧变小KV cache 随之下降反过来需要更高分辨率识别细节时再上调注意别超VIDEO_MAX_PIXELS的总预算。批量抽帧有并行以帧列表传入的伪视频会用ThreadPoolExecutor并行处理默认最多 8 个 worker批量场景下吞吐基本不用自己操心。别重复缩放工具包输出已是最终尺寸processor 侧记得do_resizeFalse。一句话总结把多大尺寸、抽多少帧、走哪个解码后端都交给 qwen-vl-utils 的三个函数和几个环境变量你只需要在 messages 里声明意图剩下的像素预算与对齐细节它替你算完。【免费下载链接】Qwen3-VLQwen3-VL is the multimodal large language model series developed by Qwen team, Alibaba Cloud.项目地址: https://gitcode.com/GitHub_Trending/qw/Qwen3-VL创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
上一篇/下一篇内容由系统自动关联
返回资讯列表 →