InternViT-6B-448px-V1-2 图像预处理全解从 448x448 裁剪到 1024 个 Patch 嵌入【免费下载链接】InternViT-6B-448px-V1-2项目地址: https://ai.gitcode.com/hf_mirrors/OpenGVLab/InternViT-6B-448px-V1-2InternViT-6B-448px-V1-2是 InternVL 多模态大模型系列配套的开源视觉编码器Vision Foundation Model由 OpenGVLab 发布。它把任意尺寸的图片经过「缩放 → 裁剪 → 归一化 → 分块」四步图像预处理最终编码为1024 个 Patch 嵌入向量供下游语言模型消费。本文面向新手完整拆解这一流程448×448 为什么这样定、1024 个 Patch 如何算出来、预处理参数该在哪里改。一、模型概览5.5B 参数的纯视觉骨干先建立整体印象这个仓库里没有语言模型只有一个看图的 ViT 编码器 一个对接语言模型的 MLP 投影器。关键指标数值说明参数量约 5540M5.5B原版 48 层裁掉最后 3 层省显存输入图像尺寸448 × 448从早期版本的 224 提升而来分块大小 Patch Size14 × 14每块独立线性映射为向量Patch 数量32 × 32 1024448 ÷ 14 32隐藏维度3200每个 Patch 嵌入为 3200 维向量注意力头数25单头维度 128Transformer 层数45官方建议直接用最后一层输出精度bfloat16 Flash Attention更快更省显存⚠️ 官方提示InternViT V2.5 系列在搭建多模态大模型MLLM上更合适若基于 V1-2 构建 MLLM请使用最后一层输出的特征。权重文件位于仓库根目录model-00001-of-00003.safetensors至model-00003-of-00003.safetensors分片索引见model.safetensors.index.json。MLP 投影器单独存放在mlp_projector/目录下hermes_2_yi_34b.pth用于对接 Nous-Hermes-2-Yi-34B 语言模型。二、图像预处理四步流程缩放、裁剪、归一化、分块所有预处理规则都写在preprocessor_config.json里官方采用 HuggingFace 的 CLIP 特征提取器CLIPFeatureExtractor四步流程如下1️⃣ 缩放Resize统一缩放到 448×448do_resize: truesize: 448。任何尺寸的原图手机竖拍、宽幅截图都会被等比缩放再补齐到 448×448 的正方形画布。插值方式为resample: 3即双三次插值bicubic——比双线性插值保留更多高频细节对文字、图表类图像OCR 场景更友好。2️⃣ 中心裁剪Center Cropdo_center_crop: truecrop_size: 448。如果缩放后尺寸略大于目标就从图像中心裁出 448×448 区域保证主体内容不丢失。3️⃣ 归一化Normalize套上 ImageNet 的均值与标准差do_normalize: true参数如下表通道均值image_mean标准差image_std红 R0.4850.229绿 G0.4560.224蓝 B0.4060.225公式为pixel (pixel / 255 - mean) / std。这组参数来自 ImageNet 统计量因为模型的预训练数据以 LAION、COYO 等大规模网络图文对为主沿用同一套统计量可以让输入分布与预训练阶段对齐直接决定模型精度上限。4️⃣ 分块Patchify1024 个 Patch 的诞生这是 ViT 的核心思想用一次卷积核 14×14、步长 14 的 Conv2d通道 3 → 3200把 448×448 的像素图切成网格向量448 ÷ 14 32 横向 32 块 32 × 32 1024 共 1024 个 Patch每个 14×14 小块经卷积映射为3200 维向量再展平排成序列。实现代码在 modeling_intern_vit.py 的InternVisionEmbeddings类中第 73-89 行核心就三行卷积提块、展平转置、拼接 Class Token。三、Patch 嵌入的数学账本1025 个位置编码进入 Transformer 之前序列还要做两件事拼接 Class Token在 1024 个 Patch 向量前插入 1 个可学习的[CLS]全局向量叠加位置编码每个位置一个可学习向量position_embedding形状 1×1025×3200告诉模型这块来自图片左上角还是右下角。所以最终喂给 45 层 Transformer 的序列长度是1024 1 1025。配置项都定义在config.json与configuration_intern_vit.py中配置项config.json值含义image_size448输入边长patch_size14分块边长hidden_size3200嵌入维度num_hidden_layers45Transformer 层数num_attention_heads25注意力头数use_flash_attntrue启用 Flash Attentiontorch_dtypebfloat16推理精度 对比记忆经典 CLIP 是 224÷1416即 256 个 PatchInternViT 把分辨率提到 448 后 Patch 数翻到 4 倍1024这正是其高分辨率理解与 OCR 能力的来源。四、快速上手三步拿到 1024 个特征向量import torch from PIL import Image from transformers import AutoModel, CLIPImageProcessor # 1. 加载 5.5B 视觉编码器bfloat16 约 11GB 显存 model AutoModel.from_pretrained( OpenGVLab/InternViT-6B-448px-V1-2, torch_dtypetorch.bfloat16, trust_remote_codeTrue).cuda().eval() # 2. 图像预处理自动完成 缩放/裁剪/归一化 processor CLIPImageProcessor.from_pretrained(OpenGVLab/InternViT-6B-448px-V1-2) image Image.open(./demo.jpg).convert(RGB) pixel_values processor(imagesimage, return_tensorspt).pixel_values pixel_values pixel_values.to(torch.bfloat16).cuda() # 3. 前向推理输出 [1, 1025, 3200] 的特征 features model(pixel_values) # 1024 个 Patch 1 个 CLS输出的features.last_hidden_state形状为[batch, 1025, 3200]可直接送入语言模型或做图像检索、特征提取pipeline: image-feature-extraction。五、常见配置速查与避坑清单预处理参数只认preprocessor_config.json想改输入尺寸必须同步改config.json的image_size且需保持image_size % patch_size 0否则 Patch 数量不再是整数网格。Patch 数公式(image_size ÷ patch_size)²。448/14 → 32² 1024若改回 224 则只有 256。训练数据LAION-en/zh、COYO、COCO、Wukong-OCR、LaionCOCO-OCR 等视觉编码器与 MLP 同时训练兼顾图像描述与中英文 OCR。显存不足坚持使用bfloat16 Flash Attention配置中已默认开启45 层设计比原版 48 层更省显存。版本选择构建 MLLM 优先考虑 InternViT-6B-448px-V2_5V1-2 对应 InternVL 1.2 的持续预训练权重许可证为 MIT可自由商用。一句话总结InternViT-6B-448px-V1-2 的图像预处理本质是一条标准化流水线——双三次缩放 中心裁剪到 448×448ImageNet 参数归一化14×14 卷积分块得到 1024 个 3200 维 Patch 向量加上 CLS 与位置编码后进入 45 层 Transformer输出 1025×3200 的高分辨率视觉特征。【免费下载链接】InternViT-6B-448px-V1-2项目地址: https://ai.gitcode.com/hf_mirrors/OpenGVLab/InternViT-6B-448px-V1-2创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考