【免费下载链接】InternVL2-Pretrain-Models项目地址https://ai.gitcode.com/OpenGVLab/InternVL2-Pretrain-Models点击查看免费下载InternVL2-Pretrain-Models 是 InternVL 2.0 多模态大语言模型 Stage-1 阶段的多模态预训练模型仓库提供从 InternVL2-1B 到 Llama3-76B 共 7 个规格的预训练权重。这篇文章带你拆解其中最关键的两个组件Pixel Shuffle 空间重排与mlp1 投影器看看一张图片的像素特征是如何一步步压缩成 LLM 能读懂的词汇向量的。一、为什么图像特征必须先压缩多模态模型的基本思路是让 ViT 视觉编码器看图再把图像特征塞进语言模型的输入序列。但直接塞会有个尴尬的问题——token 太多。InternVL2 系列把图片统一缩放到 448×448用 14×14 的 patch 切块一张图会切出 32×32 1024 个 patch token。而且 InternVL2 支持动态分辨率一张大图最多可切成 12 个 patchmax_dynamic_patch: 12也就是 12288 个视觉 token。对 LLM 来说注意力计算量随序列长度平方增长。如果把 1 万多个视觉 token 原样喂给 LLM推理成本会失控。InternVL2 的解法分两步走Pixel Shuffle把 2×2 相邻的 4 个空间 token 合并成 1 个token 数降为 1/4细节信息搬进通道维度而不是丢弃mlp1 投影把视觉隐层维度翻译成 LLM 的隐层维度。二、Pixel Shuffle一次纯重排1024 变 256Pixel Shuffle 的实现非常轻量——它在 modeling_internvl_chat.py 的pixel_shuffle方法中不引入任何可学习参数只做张量形状的重组reshape permute输入ViT 输出的特征网格以 1B 为例是 32×32×1024按downsample_ratio 0.5重排纵向每 2 行并成 1 行横向每 2 列并成 1 列输出16×16 的网格通道数变为原来的 4 倍1024 → 4096可以把它想象成4 宫格拼图每个输出 token 不再只代表 1 个 patch而是打包了 2×2 邻域共 4 个 patch 的完整特征。空间分辨率减半但局部细节没有丢失只是从位置挪到了通道里。以 InternVL2-1BViT 隐层 1024、LLM 隐层 896为例整个过程是这样的阶段空间网格通道维度token 数ViT 原始输出32×3210241024Pixel Shuffle 之后16×164096256mlp1 投影之后16×16896256一个容易踩坑的细节pixel_shuffle支持两个版本modeling_internvl_chat.py。ps_versionv1重排后忘记把高、宽维度换回来会导致图像特征转置上下左右错位v2修复了这个问题。本仓库所有模型的 config.json 里都是ps_version: v2。三、mlp1 投影器ViT 与 LLM 之间的翻译官重排之后通道维度变成vit_hidden × 4但它仍然属于视觉空间LLM 看不懂。mlp1就是那座桥定义在 modeling_internvl_chat.pyLayerNorm先对 4 倍通道维做归一化稳定数值分布Linear把vit_hidden × 4映射到 LLM 的llm_hidden_sizeGELU非线性激活Linear在 LLM 维度内再变换一次这其实是多模态社区经典的两层 MLP projector早期 LLaVA 同款结构特点是参数量小、表达能力够用。各规格模型的维度换算一览数据来自各目录下的 config.json模型ViT 隐层Shuffle 后输入LLM 隐层输出InternVL2-1B10244096896InternVL2-2B102440962048InternVL2-4B102440963072InternVL2-8B102440964096InternVL2-26B3200128006144InternVL2-40B3200128007168Llama3-76B3200128008192 注意小模型1B/2B/4B/8B用的是 InternViT-300M隐层 1024大模型26B 及以上用 InternViT-6B隐层 3200。mlp1 是从零开始训练的连接层——它正是 Stage-1 预训练阶段让视觉词汇和语言词汇学会对齐的关键部件。四、完整数据流从像素到 LLM 输入extract_feature方法modeling_internvl_chat.py把上述流程串成 4 步取 ViT 特征默认select_layer -1即取最后一层输出去掉 CLS tokenvit_embeds[:, 1:, :]只保留 patch 特征Pixel Shuffle 压缩网格 32×32 → 16×16通道 ×4mlp1 投影压到 LLM 隐层维度得到每 patch256 个图像词汇num_image_token (448/14)² × 0.5² 256。接下来forward在 modeling_internvl_chat.py 中做一个巧妙操作找到输入序列里所有IMG_CONTEXT占位符img_context_token_id用 256 个图像向量整体替换掉它们的词嵌入。于是 LLM 读到的就是一段图像词汇 文本词汇混合的序列无需任何交叉注意力模块。五、关键配置参数速查以上行为都由 configuration_internvl_chat.py 定义的参数控制在各模型目录的 config.json 中可直接查看参数本仓库取值作用downsample_ratio0.5Pixel Shuffle 缩放比例token 数按平方压缩ps_versionv2使用修复了转置 bug 的重排版本select_layer-1取 ViT 最后一层特征force_image_size448图像统一缩放尺寸min/max_dynamic_patch1 / 12动态分辨率的 patch 数范围对应 256~3072 个图像 token六、小结一套极简但高效的压缩方案InternVL2-Pretrain-Models 的视觉-语言对齐设计本质上是先无损压缩、再线性翻译Pixel Shuffle 用零参数的重排把视觉 token 减到 1/4同时保住局部细节mlp1 两层 MLP 完成跨模型的维度翻译参数开销极小配合动态 patch 机制模型可按图分配 256~3072 个 token在精度与成本之间灵活权衡。这套方案也正是 InternVL 2.0 能用 8k 上下文处理多图、长文、视频的基础——理解了这两个组件你就读懂了该仓库最核心的架构思想。赞分享【免费下载链接】InternVL2-Pretrain-Models项目地址https://ai.gitcode.com/OpenGVLab/InternVL2-Pretrain-Models点击查看免费下载相关推荐InternVL2_5-Pretrain-Models 源码解析InternViT 视觉编码器 Pixel Shuffle 投影图像 Token 如何进入大语言模型InternVL2_5 Pretrain Models 源码解析InternViT 视觉编码器 Pixel Shuffle 投影图像 Token 如何进InternVL2-Pretrain-Models如何处理任意尺寸的图片动态分辨率机制完全图解InternVL2 Pretrain Models如何处理任意尺寸的图片动态分辨率机制完全图解 InternVL2 Pretrain Models 是 OpeDBoW3图像特征索引与视觉词汇生成的强大工具DBoW3图像特征索引与视觉词汇生成的强大工具 项目介绍 DBoW3 是一个开源的 C 库专门用于图像的索引和将图像转换为“词袋”表示。它是 DBow2计算机视觉创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考