ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

深度解析InternVL-14B-FlickrCN-FT-364px:96个查询Token如何桥接视觉与语言

深度解析InternVL-14B-FlickrCN-FT-364px:96个查询Token如何桥接视觉与语言

【免费下载链接】InternVL-14B-FlickrCN-FT-364px

项目地址:https://ai.gitcode.com/OpenGVLab/InternVL-14B-FlickrCN-FT-364px
点击查看免费下载

🎯InternVL-14B-FlickrCN-FT-364px是 OpenGVLab 开源的 InternVL 系列在中文数据集FlickrCN上微调而来的14B 参数图文检索模型,输入 364×364 图像和中文/多语言文本,输出图文匹配分数,支持"以图搜文"与"以文搜图"双向检索。它的核心设计是用96 个可学习的查询 Token(query tokens)作为视觉特征与语言模型之间的"桥梁",本文将带你用通俗的方式看懂这套机制。

🧩 这个模型是什么?

一句话概括:这是一个懂中文的"图搜模型"。

  • 模型类型:微调后的检索模型(fine-tuned retrieval model)
  • 支持任务:图-文检索(Image-to-Text / Text-to-Image Retrieval)
  • 模型规模:14B 参数,图像尺寸 364×364
  • 微调数据:FlickrCN(Flickr30k 的中文翻译语料)
  • 底座模型:OpenGVLab/InternVL-14B-224px

InternVL 本身是当时最大的开源视觉/视觉-语言基础模型(14B),将 ViT 扩展到 6B 参数并与 LLM 对齐,在视觉感知、跨模态检索、多模态对话等 32 项任务上刷新了 SOTA。本模型就是它面向中文图文检索场景的精调版本。

🏗️ 架构总览:InternViT + QLLaMA 的组合拳

整个模型由"一个冻结的视觉塔 + 一个冻结的语言塔 + 少量可训练组件"拼成:

组件作用是否可训练
InternVisionModel(InternViT-6B)视觉编码器,把图像切成 14×14 patch 提特征❌ 冻结
qllama(Llama 结构,32 层)语言骨干,负责文本编码与图像特征的深层加工❌ 冻结
query_tokens(96 个)查询探针,"读取"图像内容✅ 可训练
clip_projector/clip_projector2注意力池化,把长特征序列压成 768 维向量部分可训练
logit_scale、itm_head温度系数与图文匹配头✅ 可训练

配置项都可以在 config.json 中找到,例如:

  • num_query_token: 96—— 查询 Token 数量(本文主角)
  • clip_embed_dim: 768—— 对齐后的向量维度
  • cross_attention_frequency: 2—— 每 2 层插入一次跨模态注意力
  • force_image_size: 364—— 强制输入分辨率
  • max_txt_len: 32—— 文本最大长度

💡 这种"冻结大底座 + 训练小模块"的方式(代码中甚至预留了 LoRA 开关use_backbone_lora/use_qllama_lora),让微调成本大幅降低,同时保留了 14B 底座的强大表示能力。

🔑 96 个查询 Token 如何桥接视觉与语言?

这是整个模型最巧妙的部分。传统 CLIP 里,图像特征通常靠"平均池化"或 CLS token 压缩成一个向量,信息容易丢失。InternVL 换了一个思路:

第 1 步:放探针。模型定义了一组 96 个、每个 4096 维的可学习向量query_tokens,它们在序列最前面,像 96 个"探针"一样等待被填充图像信息:

self.query_tokens = nn.Parameter( torch.zeros(1, config.num_query_token, text_hidden_size) )

(见 modeling_internvl.py)

第 2 步:读图。在 QLLaMA 的每一第 2 层(cross_attention_frequency=2),这 96 个 Token 会通过跨模态注意力LlamaCrossAttention,去"注视"InternViT 输出的整张 patch 特征图(364px 下约 26×26 个 patch),把图像中最相关的信息聚合到自己身上:

query_feats = hidden_states[:, :self.num_query_token, :] query_feats, _, _ = self.cross_attn( hidden_states=query_feats, vision_hidden_states=vision_hidden_states, ...)

(见 modeling_qllama.py)

第 3 步:压缩。经过 32 层反复"读取"后的 96 个 Token,再用 16 头注意力池化clip_projector2压成1 个 768 维向量——这就是图像在统一向量空间里的最终表示。

用一个比喻:96 个 Token 就像 96 位"看图记者",每 2 层采访一轮图像特征,最后由编辑(attention pooling)把它们的消息汇总成一句话(768 维向量)。

文本侧则相对简单:文本经 QLLaMA 编码后取最后一个有效 Token的隐藏状态,再线性投影到 768 维(见 encode_text)。

第 4 步:算匹配分。两边向量归一化后做余弦相似度,乘上可学习的温度系数logit_scale(初始值 1/0.07,沿用 CLIP 经典设定),就得到匹配 logits:

logits_per_image = logit_scale * image_features @ text_features.t()

(见 modeling_internvl.py)

⚖️ InternVL-C 与 InternVL-G:双模式检索

调用model(..., mode=...)时可以选择两种模式(见 encode_image):

  • InternVL-C(CLIP 式):只走视觉塔 +clip_projector池化,链路短、速度快,适合对延迟敏感的检索服务;
  • InternVL-G(Generic 通用式):在 CLIP 分支之外,叠加上述"96 查询 Token + QLLaMA"分支,两路向量归一化后相加(ensemble)。多模态理解更强,对复杂语义的区分更准。

可以理解为:C 模式是"快问快答",G 模式是"深思熟虑"——检索精度优先时选 G,吞吐优先时选 C。

🚀 快速上手:3 个关键步骤与 1 个易踩的坑

  1. 加载模型:用AutoModel.from_pretrained('OpenGVLab/InternVL-14B-FlickrCN-FT-364px', torch_dtype=torch.bfloat16, trust_remote_code=True),建议放在 GPU 上并eval();
  2. 预处理:图像用仓库自带的CLIPImageProcessor(会自动缩放到 364×364,参数见 preprocessor_config.json);文本用AutoTokenizer(use_fast=False, add_eos_token=True);
  3. 打分:传入image与text,设置mode='InternVL-G'(或'InternVL-C'),对返回的logits_per_image做 softmax 即得匹配概率,按分数排序就是检索结果。

⚠️最容易踩的坑(README 特别强调):

  • 文本前必须加'summarize:'前缀;
  • 必须手动设置tokenizer.pad_token_id = 0。

缺了这两步,结果会"异常"。中文、英文、日文文本都可以直接输入,模型支持多语言查询。完整示例见 README.md 的 Model Usage 部分。

📂 关键文件导览

文件说明
config.json模型配置:96 查询 Token、768 维对齐、364px 分辨率等
modeling_internvl.py主模型:query_tokens定义、双模式编码、相似度打分
modeling_qllama.pyQLLaMA 语言骨干:LlamaCrossAttention、跨模态注意力插入逻辑
modeling_intern_vit.pyInternViT-6B 视觉编码器
configuration_internvl.py配置类InternVLConfig,含各超参默认值
preprocessor_config.json图像预处理参数(364×364、归一化均值/方差)
README.md使用示例、性能说明与引用格式

📌 小结

InternVL-14B-FlickrCN-FT-364px 展示了大模型时代图文检索的新范式:

  1. 冻结 14B 大底座,只训练 96 个查询 Token 和少量投影头,微调成本极低;
  2. 96 查询 Token 通过每 2 层一次的跨模态注意力,把整张图的语义"采访"进语言模型空间,比简单池化保留更多细节;
  3. C/G 双模式兼顾速度与精度,可按业务场景切换;
  4. 面向中文检索场景在 FlickrCN 上精调,多语言文本 + 中文图像的检索开箱即用。

如果你的业务需要做中文图搜、电商以文搜图、多模态内容审核等场景,这个模型是一个值得评估的起点。

【免费下载链接】InternVL-14B-FlickrCN-FT-364px

项目地址:https://ai.gitcode.com/OpenGVLab/InternVL-14B-FlickrCN-FT-364px
点击查看免费下载

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进