ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

深度解析InternVL2_5-2B-MPO动态分辨率:448px切块与像素解shuffle如何让2B模型看懂细节

深度解析InternVL2_5-2B-MPO动态分辨率:448px切块与像素解shuffle如何让2B模型看懂细节 深度解析InternVL2_5-2B-MPO动态分辨率448px切块与像素解shuffle如何让2B模型看懂细节【免费下载链接】InternVL2_5-2B-MPO项目地址: https://ai.gitcode.com/hf_mirrors/OpenGVLab/InternVL2_5-2B-MPOInternVL2_5-2B-MPO 是 OpenGVLab 团队推出的 2B 参数轻量级多模态大模型它凭借448px 动态分辨率切块和像素解 shufflePixel Unshuffle两大设计让一个小模型也能看清图片中的细节推理能力还在 MPO混合偏好优化加持下显著提升。本文将用通俗的方式拆解这套动态分辨率机制的核心原理与关键配置帮新手快速理解并上手这个模型。 它是什么一个会看图的 2B 多模态模型InternVL2_5-2B-MPO 延续了 InternVL 系列的ViT-MLP-LLM三段式架构视觉端InternViT-300M-448px约 3 亿参数的视觉编码器基础分辨率 448连接端一个随机初始化的 MLP 投影层代码中的mlp1语言端InternLM 2.5 1.8B 聊天模型再叠加基于约 300 万条偏好数据的MPOMixed Preference Optimization混合偏好优化训练使 2B 小模型的推理、OCR、数学视觉等能力得到明显提升。上图是仓库examples/目录内置的示例图片1000×747 像素正是官方推理脚本中用来演示动态分辨率切块效果的素材。 核心技巧一448px 动态分辨率切块传统多模态模型常把图片压缩到固定尺寸图越大、细节丢得越多。InternVL2.5 系列的做法完全不同保持宽高比根据原图宽高比从一组候选比例中挑选最接近的组合切成 448×448 小块把图片按 448px 网格切成若干小块最少 1 块、最多 12 块由min_dynamic_patch/max_dynamic_patch控制额外附加一张缩略图use_thumbnail: true时还会补一张 448×448 的全局缩略图兼顾局部细节与全局概览。以上面 1000×747 的小熊猫图片为例它的宽高比接近 4:3模型会把它等比缩放后切成多张 448px 小图分别编码——毛发、胡须这样的细节被完整保留而一张小图可能只需 1 块计算量自动变少。这就是动态二字的含义输入多大就切多少块按需分配算力。这套逻辑的实现在 README 的dynamic_preprocess示例函数中预处理参数则定义在 preprocessor_config.jsonImageNet 均值/方差、448 尺寸等。✂️ 核心技巧二Pixel Unshuffle 让视觉 Token 减少 75%切块解决看得清token 压缩解决算得动。流程如下每块 448×448 图片进入 ViT 后patch 尺寸为 14产生32×32 1024 个视觉 tokenpixel_shuffle即像素解 shufflescale_factor0.5把2×2 相邻 token 合并成 1 个数量变为 16×16 256 个通道维度则从 1024 升到 4096最后由mlp1两层线性层把 4096 维投影到 2048 维InternLM2 的隐藏层宽度送入语言模型。也就是说每张 448px 小图只贡献256 个视觉 token。即使满配 12 块 1 缩略图单图最多也只有13 × 256 3328 个视觉 token2B 的模型完全喂得动。这段核心逻辑可以在 modeling_internvl_chat.py 中找到num_image_token的计算第 53 行、pixel_shuffle方法第 169 行以及特征提取入口extract_feature第 185 行。⚙️ 五个关键数字config.json 里的动态分辨率设置不用读代码打开 config.json 就能看懂这套机制的全部开关参数值含义force_image_size448每块切图的固定边长像素dynamic_image_sizetrue开启动态分辨率切块min_dynamic_patch1最少切块数max_dynamic_patch12最多切块数downsample_ratio0.5像素解 shuffle 比例0.5 即 token 减到 1/4use_thumbnailtrue是否附加全局缩略图patch_sizevision_config14ViT 的 patch 尺寸448÷1432想要更大的图就调大max_dynamic_patch想省显存就调小——这就是动态分辨率留给使用者的旋钮。 快速上手在自己电脑上跑起来获取模型文件git clone https://gitcode.com/hf_mirrors/OpenGVLab/InternVL2_5-2B-MPO安装transformers4.37.2用AutoModel加载需要trust_remote_codeTrue因为模型带有自定义代码import torch from transformers import AutoModel, AutoTokenizer model AutoModel.from_pretrained( OpenGVLab/InternVL2_5-2B-MPO, torch_dtypetorch.bfloat16, low_cpu_mem_usageTrue, trust_remote_codeTrue).eval().cuda() tokenizer AutoTokenizer.from_pretrained( OpenGVLab/InternVL2_5-2B-MPO, trust_remote_codeTrue, use_fastFalse)按 README 中的load_image示例对examples/image1.jpg做动态切块再调用model.chat(...)即可对话。仓库还附带examples/image2.jpg多图示例和examples/red-panda.mp4视频多轮对话示例可以直接照抄验证。 小模型也有大作为MPO 带来的收益官方评测显示动态分辨率 MPO 组合让 2B 模型的平均分从 59.9 提升到62.0OCR 任务OCRBench从 80.2 提升到 84.2数学视觉MathVista从 51.1 提升到 56.4——看得清和答得对两件事分别由本文解析的切块机制与偏好优化解决。小结448px 动态切块按宽高比把图片切成 112 块 448×448 小图细节不丢失、算力按需分配Pixel Unshuffle比例 0.5每块视觉 token 从 1024 压缩到 256小模型也能处理多图与视频2B 参数量 MPO 优化轻量、可本地部署推理与 OCR 能力显著增强。理解这两个旋钮之后你再去调max_dynamic_patch或downsample_ratio就能在不同任务间自由权衡清晰度与速度了。【免费下载链接】InternVL2_5-2B-MPO项目地址: https://ai.gitcode.com/hf_mirrors/OpenGVLab/InternVL2_5-2B-MPO创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表