【免费下载链接】InternVL-14B-Flickr30K-FT-364px
InternVL-14B-Flickr30K-FT-364px 是一个 14B 参数的开源多模态图文检索模型,在 Flickr30K 数据集上微调,支持"图搜文"和"文搜图"两种零样本检索任务。本文带你用 10 分钟完成模型下载,并跑通第一次图文相似度检索。
一、这是什么模型?适合谁用
InternVL 系列把 6B 参数的视觉编码器(ViT)与 LLM 对齐,是目前规模最大的开源视觉/视觉-语言基础模型之一。而本仓库InternVL-14B-Flickr30K-FT-364px是它的检索微调版,核心能力是:
- 🖼️Image-to-Text Retrieval:给一张图,从一堆文本中找出最匹配的描述
- ✍️Text-to-Image Retrieval:给一段描述,从一堆图中找出最匹配的图片
- 🌏多语言文本:英文、中文、日文描述均可使用(如
summarize:一张熊猫的照片) - 📐 图像统一处理为364×364像素,与底座模型 InternVL-14B-224px 相比对小物体更友好
你可以把它理解为一个"图文相似度计算器":图片和文本都被编码成同一空间里的向量,向量越接近(余弦相似度越高),说明图文匹配度越高。
二、环境准备:最快安装方法
模型依赖 PyTorch 与 Transformers,建议先创建虚拟环境:
pip install torch transformers模型权重为 bfloat16 精度,建议准备一块显存 ≥24GB 的 GPU(如 RTX 3090/4090 或 A100)。
三、获取模型:两种方式任选
方式一:克隆仓库(获得代码与配置文件)
git clone https://gitcode.com/OpenGVLab/InternVL-14B-Flickr30K-FT-364px仓库中的核心文件:
- modeling_internvl.py:模型主实现,
forward方法返回图文相似度 logits - config.json:模型结构配置(
force_image_size: 364即 364 分辨率的来源) - preprocessor_config.json:图像预处理参数(缩放、归一化均值/方差)
- tokenizer_config.json:分词器配置(LlamaTokenizer)
- pytorch_model-00001-of-00003.bin 等三个权重分片,索引见 pytorch_model.bin.index.json
方式二:通过 Transformers 自动下载
代码中直接写模型名OpenGVLab/InternVL-14B-Flickr30K-FT-364px,首次运行会自动拉取权重与代码,适合快速验证。
四、第一次图文检索:核心代码解析
完整示例见 README.md,下面是精简版:
import torch from PIL import Image from transformers import AutoModel, AutoTokenizer, CLIPImageProcessor # 1. 加载模型(bfloat16 + trust_remote_code 缺一不可) model = AutoModel.from_pretrained( 'OpenGVLab/InternVL-14B-Flickr30K-FT-364px', torch_dtype=torch.bfloat16, low_cpu_mem_usage=True, trust_remote_code=True).cuda().eval() image_processor = CLIPImageProcessor.from_pretrained('OpenGVLab/InternVL-14B-Flickr30K-FT-364px') # 2. 加载分词器(必须设置 pad_token_id = 0) tokenizer = AutoTokenizer.from_pretrained( 'OpenGVLab/InternVL-14B-Flickr30K-FT-364px', use_fast=False, add_eos_token=True) tokenizer.pad_token_id = 0 # 3. 准备图文数据:注意文本要加 'summarize:' 前缀 images = [Image.open('./cat.jpg').convert('RGB')] texts = ['summarize:一张猫的照片', 'summarize:a photo of a red panda'] # 4. 前向推理,得到相似度矩阵 pixel_values = image_processor(images=images, return_tensors='pt').pixel_values.to(torch.bfloat16).cuda() input_ids = tokenizer(texts, return_tensors='pt', max_length=80, truncation=True, padding='max_length').input_ids.cuda() logits_per_image, logits_per_text = model( image=pixel_values, text=input_ids, mode='InternVL-C') probs = logits_per_image.softmax(dim=-1)两个必须注意的细节(缺失会导致结果异常):
- 文本前缀
'summarize:' tokenizer.pad_token_id = 0
相似度矩阵logits_per_image的行对应图片、列对应文本,取argmax即可得到匹配结果。推理逻辑可参考 modeling_internvl.py 中的forward:图文特征先做归一化,再计算余弦相似度作为 logits。
五、两种模式怎么选:InternVL-C 与 InternVL-G
model(..., mode=...)支持两种模式,对应 InternVL 论文中的两个变体(实现见 modeling_internvl.py):
| 模式 | 特点 | 适用场景 |
|---|---|---|
InternVL-C | 视觉特征直连 CLIP 投影头,结构更简洁 | 通用图文检索、相似度计算 |
InternVL-G | 引入 96 个 query token 与 LLM 交互,语义理解更深 | 需要强语义对齐的细粒度检索 |
配置中num_query_token: 96、clip_embed_dim: 768等参数可在 config.json 中查看;视觉编码器细节见 configuration_intern_vit.py,语言模型部分见 modeling_qllama.py。
六、常见问题速查(FAQ)
- 结果全是异常分数?检查是否加了
summarize:前缀、是否设置了pad_token_id = 0 - 中文/日文能检索吗?可以,示例中
'summarize:一张熊猫的照片'即为中文查询 - 图像尺寸有要求吗?处理器会自动缩放到 364×364 并做 CLIP 风格归一化(见 preprocessor_config.json),你只需传入原图
- 显存不够怎么办?14B + bfloat16 至少需要约 30GB 显存;显存不足时可降低批量或考虑其他量级的 InternVL 模型
七、下一步:如何评估你的检索效果
- 跑通单图单句后,可替换为自己的图片库和文本库,批量计算相似度并排序
- 训练参数可参考 training_args.bin(Flickr30K 微调配置)
- 学术引用格式见 README.md
至此,你已经完成了从下载到第一次图文检索的全流程。InternVL-14B-Flickr30K-FT-364px 开箱即用,非常适合作为图搜引擎、内容审核、多模态搜索等场景的检索基座。
【免费下载链接】InternVL-14B-Flickr30K-FT-364px
相关推荐
5分钟上手InternVL-14B-FlickrCN-FT-364px:图文检索快速入门教程
5分钟上手InternVL 14B FlickrCN FT 364px:图文检索快速入门教程 InternVL 14B FlickrCN FT 364px 是一
一文读懂InternVL-14B-FlickrCN-FT-364px:从CLIP到生成式对齐的图文检索技术演进
一文读懂InternVL 14B FlickrCN FT 364px:从CLIP到生成式对齐的图文检索技术演进 InternVL 14B FlickrCN FT
为什么检索结果不准?InternVL-14B-Flickr30K-FT-364px 必看的 summarize 前缀与 pad_token 陷阱
为什么检索结果不准?InternVL 14B Flickr30K FT 364px 必看的 summarize 前缀与 pad_token 陷阱 InternV
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考