资讯动态

多图对话的两种玩法:InternVL3-78B-Pretrained拼接图像与独立图像详解

发布时间:2026/10/22 1:42:22 来源:尧图企业网站定制
【免费下载链接】InternVL3-78B-Pretrained项目地址https://ai.gitcode.com/OpenGVLab/InternVL3-78B-Pretrained点击查看免费下载InternVL3-78B-Pretrained是书生InternVL系列的多模态大语言模型MLLM支持一次对话中同时理解多张图片。本文将带你快速搞懂它在多图对话时的两种官方玩法拼接图像combined images与独立图像separate images——何时该用哪种、num_patches_list参数到底在做什么、以及两种写法的完整示例。一、先搞懂动态分辨率决定了每张图有多少块在讲玩法之前先理解一个关键机制它是两种玩法差异的根源。InternVL3 采用动态分辨率策略一张图会被切成若干个 448×448 像素的 tile块图片越大、比例越方切出的块数越多若开启了use_thumbnail本项目配置为开启还会额外追加一张缩略图作为全局视角。也就是说每张图贡献给模型的视觉块数patch 数是不一样的。config.json 中的max_dynamic_patch: 12表示单张图最多切 12 块。image1.jpg ── [tile][tile][tile][thumb] → 4 个视觉块 image2.jpg ── [tile][tile][thumb] → 3 个视觉块模型内部用IMG_CONTEXT占位符来承接这些视觉块占位符的个数必须和实际切出的块数严格对应。这正是拼接与独立两种写法分歧所在。二、玩法一拼接图像combined images什么时候用把多张图的视觉块首尾相接成一个整体在提问中只放一个image占位符。此时模型会把所有视觉内容当作一张大拼图来理解写法最简单。关键步骤分别加载两张图load_image已内置动态切块逻辑用torch.cat在维度 0 上拼接得到合并的pixel_values提问中只写一个image不需要传num_patches_list——chat 方法 内部默认把所有视觉块算作一张图pixel_values1 load_image(./examples/image1.jpg, max_num12).to(torch.bfloat16).cuda() pixel_values2 load_image(./examples/image2.jpg, max_num12).to(torch.bfloat16).cuda() pixel_values torch.cat((pixel_values1, pixel_values2), dim0) question image\nDescribe the two images in detail. response, history model.chat(tokenizer, pixel_values, question, generation_config, historyNone, return_historyTrue)完整可运行示例见 README.md。特点✅ 写法最少一个image搞定⚠️ 模型无法从结构上区分哪些块来自图1、哪些来自图2做两张图的相似/差异对比时指代可能不够精确⚠️ 若某张图恰好是单块其缩略图与主 tile 内容相近拼接后信息略有冗余。三、玩法二独立图像separate images什么时候用当你需要模型明确区分每张图比如图1和图2有什么不同就应使用独立图像模式。核心是给model.chat传一个num_patches_list参数声明前 N 块属于图1后 M 块属于图2。关键步骤拼接视觉块时记下每张图各自的块数提问中为每张图各放一个image并加上Image-1:、Image-2:这样的编号提示把块数列表传给num_patches_listpixel_values torch.cat((pixel_values1, pixel_values2), dim0) num_patches_list [pixel_values1.size(0), pixel_values2.size(0)] # 如 [4, 3] question Image-1: image\nImage-2: image\nDescribe the two images in detail. response, history model.chat(tokenizer, pixel_values, question, generation_config, num_patches_listnum_patches_list, historyNone, return_historyTrue)完整示例见 README.md。内部发生了什么在 modeling_internvl_chat.py 中chat方法会按num_patches_list逐个替换每个image占位符每替换一个就为该图展开对应数量的IMG_CONTEXTtoken。例如num_patches_list[4, 3]时第 1 个image→img 4×256 个IMG_CONTEXT/img第 2 个image→img 3×256 个IMG_CONTEXT/img这样每个图的视觉块就被框在各自的img/img边界内模型天然知道图的边界在哪里。若传错块数总数对不上第 262 行 的assert会直接报错提醒你。四、选型对比一张表看懂该选哪个对比维度拼接图像combined独立图像separate提问中的占位符1 个image每张图 1 个image是否需要num_patches_list否默认全部算一张图必须且总数要等于视觉块总数图片边界感知弱视为一张大图强img/img明确分隔适合场景整体描述、氛围理解图片对比、图1是什么/图2是什么类问答写法复杂度⭐ 最简单⭐⭐ 多一步记录块数经验法则做图片对比相似点/差异点时优先用独立图像模式只是让模型综合看看这几张图时拼接模式足够且更省事。五、环境准备与上手清单在跑多图对话之前先确认这几件事硬件load_in_8bitTrue时约需 2 张 80GB 显卡16-bitbf16至少 3 张 80GB 显卡见 README.md依赖transformers4.37.2并设置trust_remote_codeTrue加载本仓库的自定义代码上下文长度多图意味着视觉 token 更多必要时调大session_len/上下文窗口批量与视频场景batch_chat与视频多轮对话同样依赖num_patches_list来划分每个样本的视觉块用法与本文一致。六、相关文件速查内容路径快速开始与完整多图示例README.mdchat/batch_chat多图实现源码modeling_internvl_chat.py动态分辨率配置max_dynamic_patch、use_thumbnailconfig.json视觉塔ViT实现modeling_intern_vit.py对话模板定义conversation.py示例图片 1examples/image1.jpg示例图片 2examples/image2.jpg掌握拼接与独立这两种多图对话方式后你就能充分发挥 InternVL3-78B-Pretrained 的多图理解能力简单场景用最省事的拼接模式对比分析类任务则切换到带num_patches_list的独立模式让模型真正看清哪张是哪张。赞分享【免费下载链接】InternVL3-78B-Pretrained项目地址https://ai.gitcode.com/OpenGVLab/InternVL3-78B-Pretrained点击查看免费下载相关推荐InternVL3-78B-Instruct多图理解实战:拼接图像与独立图像两种模式差异及最佳实践InternVL3 78B Instruct多图理解实战:拼接图像与独立图像两种模式差异及最佳实践 InternVL3 78B Instruct 是 OpenGInternVL2-26B 多图对话实战拼接图像与独立图像两种模式一次讲透InternVL2 26B 多图对话实战拼接图像与独立图像两种模式一次讲透 InternVL2 26B 是 InternVL 2.0 系列的指令微调多模态大模InternVL3-1B-Pretrained 图像描述实战单图对话、多图对比与视频理解的 3 种玩法InternVL3 1B Pretrained 图像描述实战单图对话、多图对比与视频理解的 3 种玩法 InternVL3 1B Pretrained 是书生上一篇深度解析Script-IDEGodot脚本编辑器的架构级性能优化方案下一篇如何快速使用Motion-X数据集10分钟入门教程 - 终极指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑