【免费下载链接】InternVL2-Pretrain-Models
InternVL2-Pretrain-Models 是 InternVL 2.0 多模态大模型官方发布的 Stage-1 阶段预训练模型仓库,包含 7 个从 1B 到 76B 参数的模型版本。整个体系的"眼睛"是InternViT 视觉编码器——它负责把图像切成小块、提取特征,再压缩成语言模型能读懂的"视觉词"。这篇文章带你完整看懂它的核心组件:视觉编码器、PixelShuffle 降采样、MLP 投影器以及特殊 token 对齐机制,帮助你快速理解多模态预训练模型是如何"看清世界"的。
📦 一分钟认识:这个仓库里有什么?
InternVL 2.0 采用"视觉编码器 + 大语言模型"的双塔架构。本仓库提供的是第一阶段(Stage-1)预训练权重:模型在此阶段学会对齐文本、图像、视频等多模态输入,为后续指令微调打好地基。
| 模型 | 视觉部分(InternViT) | 语言部分 |
|---|---|---|
| InternVL2-1B | InternViT-300M-448px | Qwen2-0.5B |
| InternVL2-2B | InternViT-300M-448px | InternLM2-1.8B |
| InternVL2-4B | InternViT-300M-448px | Phi-3-mini |
| InternVL2-8B | InternViT-300M-448px | InternLM2-7B |
| InternVL2-26B | InternViT-6B-448px | InternLM2-20B |
| InternVL2-40B | InternViT-6B-448px | Yi-34B |
| InternVL2-Llama3-76B | InternViT-6B-448px | Llama-3-70B |
可以看到:小模型配 300M 轻量 ViT,大模型配 6B 高配 ViT,视觉编码器按"负载"分级搭配。
🧩 架构全景:一张图的"旅行路线"
InternVL 的完整推理路径只有 3 步(对应modeling_internvl_chat.py中的InternVLChatModel):
- InternViT:图像 → 1024 个 patch 特征向量
- PixelShuffle + MLP(mlp1):1024 个向量 → 256 个"视觉 token"
- LLM:视觉 token 替换文本中的
<IMG_CONTEXT>占位符,语言模型统一处理图文混合序列
源码位置:InternVL2-1B-Pretrain/modeling_internvl_chat.py,其中视觉特征提取与投影集中在extract_feature方法(L184-L202)。
🔍 核心组件一:InternViT 视觉编码器
InternViT 是标准的 Vision Transformer,完整实现在 InternVL2-1B-Pretrain/modeling_intern_vit.py 中。它由四个关键模块组成:
1️⃣ 图像分块(Patch Embedding)
一张448×448 像素的图,被 14×14 的卷积核切成 32×32 =1024 个小块(patch),每块投影为一个 1024 维(300M 版)向量。代码见 InternVisionEmbeddings。
💡 这就是"图像变词语"的第一步:每个 patch 相当于一个"视觉单词"。
2️⃣ 位置编码与 CLS Token
每个 patch 向量会加上可学习的位置编码,序列最前面还拼接一个特殊的CLS(class)token,用于聚合全局信息。为了适配动态分辨率,位置编码支持双三次插值重采样(_get_pos_embed方法)。
3️⃣ Transformer 编码器层
每层 = 多头自注意力 + MLP 前馈网络 + 归一化 + 随机深度(DropPath)。两个亮点:
- FlashAttention2 加速:FlashAttention 封装类 显著降低长序列注意力的显存占用,448px 下 1024 个 token 的注意力计算开销可观;
- 可选 QK-Norm:对 Query/Key 做 RMSNorm 稳定训练。
层结构见 InternVisionEncoderLayer,整体编码器入口为 InternVisionModel。
4️⃣ 两档规格:300M 与 6B
从各目录的 config.json 中vision_config字段可确认两套配置:
| 参数 | InternViT-300M(1B/2B/4B/8B 用) | InternViT-6B(26B/40B/76B 用) |
|---|---|---|
| hidden_size | 1024 | 3200 |
| 编码器层数 | 24 | 45 |
| 注意力头数 | 16 | 25 |
| 中间层维度 | 4096 | 12800 |
| patch_size / image_size | 14 / 448 | 14 / 448 |
配置文件默认值定义在 configuration_intern_vit.py 的InternVisionConfig类中。
⚡ 关键技巧:动态分辨率
固定 448px 输入会损失细节,InternVL2 的解法是动态分辨率:图像按原始宽高比被切成 1~12 个 448×448 的 patch 图块,分别过 ViT,另外还生成一张缩略图(thumbnail)提供全局视野。
这些开关都写在每个模型的 config.json 里:
dynamic_image_size: true— 启用动态切图min_dynamic_patch: 1/max_dynamic_patch: 12— 每图最多 12 块use_thumbnail: true— 附加缩略图
对应的配置参数说明见 configuration_internvl_chat.py。
🎯 核心组件二:PixelShuffle + MLP 投影器
1024 个 patch 向量直接送入 LLM 太冗长。InternVL 用两个"压缩器":
PixelShuffle 空间重排(pixel_shuffle 方法):把相邻的 2×2 个 patch 特征合并成一个,序列从 32×32 压缩到 16×16,token 数直接降为 1/4(downsample_ratio: 0.5)。
MLP 投影器 mlp1(L78-L83):将合并后的视觉特征(维度 1024×4)线性映射到 LLM 的隐藏层维度,完成"视觉空间 → 语言空间"的对齐。
最终每张 448px 图块只产生256 个视觉 token,这个数值就是config中的num_image_token(L52 处计算):
(448 ÷ 14)² × 0.5² = 1024 × 0.25 = 256🔗 核心组件三:特殊 Token 对齐
视觉 token 如何进入对话?靠一组特殊 token,定义在 added_tokens.json 中:
| Token | 作用 |
|---|---|
<img>/</img> | 图像片段的起止标记 |
<IMG_CONTEXT> | 占位符,前向传播时被视觉特征向量原位替换 |
<ref>/</ref>/<box>/<quad> | 支持目标定位、框坐标等视觉问答任务 |
在generate方法(L309-L349)中,文本先被嵌入,随后所有<IMG_CONTEXT>位置的向量被 ViT 提取的视觉特征覆盖,语言模型看到的就是一串"图文混杂"的 token 流,自然实现跨模态理解。
对话模板(如 Hermes-2、ChatML 风格)则封装在 conversation.py 中。
🚀 快速上手:加载与验证
本地加载任意一个模型目录(以 1B 为例):
from transformers import AutoModel, AutoTokenizer model_dir = "InternVL2-1B-Pretrain" # 替换为对应模型目录 tokenizer = AutoTokenizer.from_pretrained(model_dir, trust_remote_code=True) model = AutoModel.from_pretrained(model_dir, trust_remote_code=True)大模型目录(如 26B、76B)的权重以 safetensors 分片存放,model.safetensors.index.json 记录了每个张量所在的分片文件,加载时会自动处理。
提示:所有目录内都自带自定义代码(
modeling_*.py、configuration_*.py)与auto_map映射,因此必须使用trust_remote_code=True才能正确实例化InternVLChatModel。
✅ 总结:InternViT 为何"看得清"?
- 高分辨率分块:448px + 14px patch,细节不丢失;
- 动态分辨率:原比例切 1~12 块 + 缩略图,小目标与全局语义兼顾;
- PixelShuffle 压缩:token 数降 4 倍,长上下文负担大减;
- ViT 规格分级:300M/6B 两档视觉编码器,与语言模型规模匹配;
- 特殊 token 体系:
<IMG_CONTEXT>原位替换 +<box>/<ref>定位标记,为 OCR、文档理解、目标定位等下游任务铺平道路。
理解了这套"切块 → 编码 → 压缩 → 对齐"的四步流水线,你就掌握了 InternVL 系列多模态模型视觉前端的全部核心逻辑。
【免费下载链接】InternVL2-Pretrain-Models
相关推荐
InternVL2_5-Pretrain-Models 源码解析:InternViT 视觉编码器 + Pixel Shuffle 投影,图像 Token 如何进入大语言模型
InternVL2_5 Pretrain Models 源码解析:InternViT 视觉编码器 + Pixel Shuffle 投影,图像 Token 如何进
InternViT-6B 视觉塔深度剖析:InternVL2.5-26B-MPO-AWQ 的视觉编码核心全解
InternViT 6B 视觉塔深度剖析:InternVL2.5 26B MPO AWQ 的视觉编码核心全解 本文带你深入 InternVL2_5 26B MP
UMT-L视觉编码器详解:VideoChat-Flash-Qwen2-7B_res224的视觉塔核心组件剖析
UMT L视觉编码器详解:VideoChat Flash Qwen2 7B_res224的视觉塔核心组件剖析 VideoChat Flash Qwen2 7B_
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考