资讯动态

BLIP 统一视觉-语言预训练框架(PyTorch)实战指南:图文检索、图像描述、VQA 与 NLVR2 微调全流程

发布时间:2026/10/15 3:16:41 来源:尧图企业网站定制
多模态计算机视觉NLP预训练微调深度学习【免费下载链接】BLIPPyTorch code for BLIP: Bootstrapping Language-Image Pre-training for Unified Vision-Language Understanding and Generation项目地址https://gitcode.com/gh_mirrors/bl/BLIP点击查看免费下载本文是 BLIPBootstrapping Language-Image Pre-training for Unified Vision-Language Understanding and Generation官方 PyTorch 仓库的完整使用指南。BLIP 通过三项预训练目标统一了视觉-语言理解与生成任务本指南将带你完成环境搭建、预训练/微调权重下载、四大下游任务图文检索、图像描述、VQA、NLVR2的评估与微调以及零样本视频-文本检索的复现。读完本文你将掌握基于 README.md 与仓库源码train_*.py、configs/*.yaml的全部实操命令并理解每个关键配置项的底层含义。仓库状态与官方声明在动手之前请务必注意官方声明本仓库已被官方标记为 DEPRECATED已弃用且不再维护官方不建议在生产和敏感场景中使用本仓库内容。BLIP 现已正式整合进 LAVIS——Salesforce 推出的语言与视觉研究和应用一站式库。本指南面向希望研读经典 BLIP 论文复现代码、学习其模型架构与训练流程的开发者若用于生产环境请优先考虑 LAVIS。本仓库是 BLIP 论文 的 PyTorch 官方实现作者 Junnan Li、Dongxu Li、Caiming Xiong、Steven Hoi发表于 ICML 2022代码在 PyTorch 1.10 上完成测试。环境搭建与依赖安装安装依赖只需一行命令见 README.md 与 requirements.txtpip install -r requirements.txtrequirements.txt 中锁定四个关键依赖依赖包版本用途timm0.4.12提供 Vision Transformer 骨干与预训练权重加载timm.models.hub.download_cached_filetransformers4.15.0提供 BERT Tokenizer 与文本编码器基础结构fairscale0.4.4提供梯度检查点Gradient checkpoint等显存优化能力pycocoevalcap—COCO Caption 评估BLEU、CIDEr、METEOR、SPICE 等指标从源码看模型层依赖models/blip.py会在运行时通过BertTokenizer.from_pretrained(bert-base-uncased)拉取 BERT 基础 tokenizer并添加[DEC]bos与[ENC]两个特殊 token。代码在分布式场景下使用 NCCL 后端见 utils.py训练脚本默认cuda设备。仓库整体结构一份贯穿“预训练 → 微调 → 评估”的代码地图仓库的组织方式清晰对应 BLIP 的技术路线配置层configs/每个任务一份 YAMLretrieval_coco.yaml、retrieval_flickr.yaml、caption_coco.yaml、nocaps.yaml、vqa.yaml、nlvr.yaml、pretrain.yaml、retrieval_msrvtt.yaml另有 BERT 结构配置 med_config.json12 层、hidden_size 768、12 头、add_cross_attention: true。数据层data/通过 data/init.py 的create_dataset统一构造各任务数据集并内置与 ImageNet 不同的均值/方差归一化(0.48145466, 0.4578275, 0.40821073) / (0.26862954, 0.26130258, 0.27577711)。模型层models/核心实现包括 blip.pyBLIP_Base特征提取器与BLIP_Decoder生成器、blip_pretrain.py、blip_retrieval.py、blip_vqa.py、blip_nlvr.py、blip_itm.py。训练/评估脚本train_retrieval.py、train_caption.py、train_vqa.py、train_nlvr.py、pretrain.py、eval_nocaps.py、eval_retrieval_video.py。所有训练脚本共享统一的命令行参数以 train_retrieval.py 为例参数默认值说明--config各任务对应 YAML配置文件路径--output_diroutput/xxx输出目录自动创建并写入config.yaml备份与log.txt--evaluatestore_true仅评估模式不训练--devicecuda运行设备--seed42随机种子实际为seed rank--world_size1分布式进程数--dist_urlenv://分布式初始化方式--distributedTrue是否启用分布式预训练与微调权重清单README 提供了两类权重预训练权重与各任务微调权重。所有权重均为.pth文件可通过 URL 直接下载也可在配置文件中以 URL 或本地文件路径形式写入pretrained字段。模型权重加载逻辑见 models/blip.py会先做visual_encoder.pos_embed的位置编码插值interpolate_pos_embed再以strictFalse加载并剔除形状不匹配的键。预训练权重按预训练图像数量分档预训练图像数BLIP w/ ViT-BBLIP w/ ViT-B CapFilt-LBLIP w/ ViT-L14Mmodel_base_14M.pth——129Mmodel_base.pthmodel_base_capfilt_large.pthmodel_large.pth微调权重任务BLIP w/ ViT-BBLIP w/ ViT-B CapFilt-LBLIP w/ ViT-L图文检索COCOmodel_base_retrieval_coco.pth—model_large_retrieval_coco.pth图文检索Flickr30kmodel_base_retrieval_flickr.pth—model_large_retrieval_flickr.pth图像描述COCO—model_base_caption_capfilt_large.pthmodel_large_caption.pthVQAmodel_vqa.pthmodel_base_vqa_capfilt_large.pth—NLVR2model_base_nlvr.pth——从模型实现看vit参数决定骨干规模models/blip.pybase为 patch16、embed_dim 768、depth 12、12 头large为 embed_dim 1024、depth 24、16 头并带 0.1 的 drop path。图中“ViT-B CapFilt-L”指预训练阶段使用 CapFilt 框架以 ViT-L 作为 captioner/filter 生成并筛选合成描述synthetic captions后的权重。推理 Demo四大能力的快速体验README 提供两条 Demo 路径Colab Notebook无需 GPU打开 demo.ipynb 即可交互运行涵盖四类能力图像描述Image captioning开放式视觉问答Open-ended VQA多模态 / 单模态特征提取Multimodal / unimodal feature extraction图文匹配Image-text matchingWeb Demo集成在 HuggingFace Spaces 的 Gradio 应用中另有 Replicate 网页 Demo 与 Docker 镜像可用。仓库内还提供了基于 Cog 的推理封装 predict.py其Predictor.setup()一次加载三个模型blip_decoder图像描述image_size 384、blip_vqaVQAimage_size 480、blip_itm图文匹配image_size 384。该脚本展示了三个推理接口的典型用法图像描述model.generate(im, sampleFalse, num_beams3, max_length20, min_length5)返回 beam search 生成的描述文本VQAmodel(im, question, trainFalse, inferencegenerate)开放式生成答案图文匹配match_headitm输出匹配二分类概率match_headitc输出图像-文本余弦相似度详见 models/blip_itm.py。推理时的图像预处理predict.py使用 BICUBIC 插值 Resize 到目标尺寸并执行上述均值方差归一化与训练保持一致。任务一图文检索Image-Text Retrieval数据准备从原始网站下载 COCO 与 Flickr30k 数据集然后在 retrieval_coco.yaml或 retrieval_flickr.yaml中设置image_root指向图片根目录。仓库数据层data/coco_karpathy_dataset.py会自动下载 Karpathy 划分的标注文件train/val/test JSON无需手动准备检索标注。评估微调模型COCOpython -m torch.distributed.run --nproc_per_node8 train_retrieval.py \ --config ./configs/retrieval_coco.yaml \ --output_dir output/retrieval_coco \ --evaluate微调预训练权重8 张 A100 GPU先修改 retrieval_coco.yaml 中的pretrained为预训练权重地址如model_base.pth再运行python -m torch.distributed.run --nproc_per_node8 train_retrieval.py \ --config ./configs/retrieval_coco.yaml \ --output_dir output/retrieval_coco核心配置项与源码原理retrieval_coco.yaml 关键参数参数默认值说明pretrainedmodel_base_retrieval_coco.pth支持 URL 或本地路径vitbasebase或largelarge 需配套调整批大小/学习率batch_size_train/batch_size_test32 / 64large 下建议 16 / 32image_size384输入分辨率queue_size57600动量队列长度ITC 训练的负样本池alpha0.4ITC 软标签权重第一轮内线性从 0 升到设定值见 train_retrieval.pyk_test256评估时 ITM 重排的候选数量negative_all_rankTrue是否跨所有 rank 收集硬负样本weight_decay/init_lr/min_lr0.05 / 1e-5 / 0AdamW 余弦学习率调度utils.pymax_epoch6训练轮数vit_grad_ckpt/vit_ckpt_layerTrue / 4ViT 梯度检查点及起始层省显存训练损失由 ITCImage-Text Contrastive图文对比 ITMImage-Text Matching图文匹配两部分组成models/blip_retrieval.py。ITM 部分通过从动量编码器计算的相似度中按权重采样负样本并支持negative_all_rankTrue时跨进程收集负样本。评估时train_retrieval.py采用“ITC 粗排 ITM 精排”先对所有图文对计算归一化余弦相似度取 top-k再用融合编码器 ITM head 精排最终输出 R1/5/10 与 r_mean见itm_eval。最佳模型按验证集r_mean保存为checkpoint_best.pth。任务二图像描述Image Captioning数据准备下载 COCO 与 NoCaps 数据集分别在 caption_coco.yaml 与 nocaps.yaml 中设置image_root。评估COCOpython -m torch.distributed.run --nproc_per_node8 train_caption.py --evaluate评估NoCaps生成结果后需提交到官方服务器评估python -m torch.distributed.run --nproc_per_node8 eval_nocaps.py微调8 张 A100 GPU将 caption_coco.yaml 的pretrained设为model_base_capfilt_large.pth然后python -m torch.distributed.run --nproc_per_node8 train_caption.py生成配置与源码原理caption_coco.yaml 独有的“生成配置”直接控制解码行为参数默认值说明max_length/min_length20 / 5生成序列长度上下界num_beams3beam search 宽度prompta picture of 解码提示词作为前缀参与生成最终从输出中裁剪掉图像描述模型是BLIP_Decodermodels/blip.pyViT 视觉编码器 BertLMHeadModel文本解码器。训练时以提示词前缀后接真实描述作为解码目标prompt 部分 token 的 loss 置为 -100推理时从 prompt 开始执行 beam searcheos使用[SEP]token。评估采用 COCO Caption 标准指标BLEU、METEOR、ROUGE、CIDEr、SPICE通过pycocoevalcap计算data/utils.py最佳模型按验证集CIDEr Bleu_4保存。任务三视觉问答VQA数据准备下载 VQA v2 与 Visual Genome 数据集在 vqa.yaml 中设置vqa_root与vg_root注意目录后需跟train2014/与image/。评估生成结果后需在官方服务器评估python -m torch.distributed.run --nproc_per_node8 train_vqa.py --evaluate微调16 张 A100 GPU将 vqa.yaml 的pretrained设为model_base_capfilt_large.pth然后python -m torch.distributed.run --nproc_per_node16 train_vqa.py关键配置与推理模式vqa.yaml 关键参数参数默认值说明train_files[vqa_train,vqa_val,vg_qa]训练用标注文件组合image_size480VQA 使用更高分辨率k_test128rank 推理候选数inferencerankrank在候选答案列表上排序或generate开放式生成batch_size_train/batch_size_test16 / 32—init_lr/max_epoch2e-5 / 10—VQA 模型models/blip_vqa.py训练时每个问题对应多个标注答案按 10 人投票比例分配权重weightsVG 数据固定 0.2见 data/vqa_dataset.py。rank模式会先用解码器首 token 的概率对候选答案列表取 top-k再精排挑选得分最高的答案rank_answergenerate模式则用 beam searchnum_beams3直接生成答案。任务四NLVR2 视觉推理数据准备下载 NLVR2 数据集在 nlvr.yaml 中设置image_root。评估python -m torch.distributed.run --nproc_per_node8 train_nlvr.py --evaluate微调16 张 A100 GPU将 nlvr.yaml 的pretrained设为model_base.pth然后python -m torch.distributed.run --nproc_per_node16 train_nlvr.py任务特点与源码原理NLVR2 是二分类任务判断句子描述与一对图片是否匹配。数据层data/nlvr_dataset.py会将左右两张图片与句子成对返回并对含 left/right 的句子做左右交换增强句子中 left/right 同步互换。模型models/blip_nlvr.py使用专用 nlvr_encoder.py 的双分支跨模态注意力编码两张图片以[CLS]特征过两层 MLP 分类头loss 为交叉熵。评估指标为准确率acc按验证集准确率保存checkpoint_best.pth。nlvr.yaml 中image_size: 384、batch_size_train: 16、init_lr: 3e-5、max_epoch: 15。使用 ViT-L 骨干微调README 明确给出 ViT-L 微调方法只需将配置文件的vit改为large同时按论文附录调整 batch size 与学习率。各配置文件中已注释好 ViT-L 推荐值例如 retrieval_coco.yaml# vit: large # batch_size_train: 16 # batch_size_test: 32 # vit_grad_ckpt: True # vit_ckpt_layer: 12 # init_lr: 5e-6显存优化方面可在配置中开启 Gradient checkpointvit_grad_ckpt: True配合vit_ckpt_layer指定启用检查点的起始层该能力依赖 fairscale 提供支持。预训练Pre-training数据格式预训练数据由若干 JSON 文件组成每个文件是一个列表列表中每个元素为包含两个键值对的字典{image: path_of_image, caption: text_of_image}在 configs/pretrain.yaml 中设置train_file为这些 JSON 文件的路径列表。启动预训练8 张 A100 GPUpython -m torch.distributed.run --nproc_per_node8 pretrain.py --config ./configs/Pretrain.yaml --output_dir output/PretrainREADME 命令中./configs/Pretrain.yaml对应仓库内 configs/pretrain.yaml注意 Linux 路径大小写敏感实际文件名为小写。预训练配置与三目标损失pretrain.yaml 关键参数参数默认值说明train_filecoco_karpathy_train.json、vg_caption.json预训练标注路径列表laion_pathLAION 数据目录非空则每个 epoch 轮换加载其中的 JSON 文件见 data/pretrain_dataset.pyimage_size224预训练分辨率低于微调batch_size75—queue_size/alpha57600 / 0.4动量队列与软标签init_lr/min_lr/warmup_lr3e-4 / 1e-6 / 1e-6学习率区间warmup_steps3000首轮线性预热步数utils.pylr_decay_rate0.9步进衰减lr max(min_lr, init_lr * decay_rate**epoch)见 utils.pymax_epoch20—BLIP_Pretrainmodels/blip_pretrain.py在单一前向过程中联合优化三个目标ITCImage-Text Contrastive图文对比学习借助动量编码器momentum0.995与 57600 长度的跨模态队列提供负样本并以alpha * softmax(动量相似度) (1-alpha) * 真值构造软标签alpha 在前两个 epoch 内线性 ramp up见 pretrain.pyITMImage-Text Matching二分类匹配头负样本按相似度权重采样LMLanguage Modeling以图像特征为条件做因果语言建模自回归解码对应生成任务。解码器与编码器之间通过tie_encoder_decoder_weights共享部分权重跳过 attention 层见 models/blip_pretrain.py。pretrain.py还支持--checkpoint参数从保存的checkpoint_XX.pth断点续训同时恢复模型与优化器状态。零样本视频-文本检索Zero-shot Video-Text RetrievalBLIP 的图文检索模型可直接零样本迁移到视频-文本检索无需视频训练数据按 ALPRO 项目的指引下载 MSRVTT 数据集在 retrieval_msrvtt.yaml 中设置video_root安装视频解码依赖pip install decord执行零样本评估python -m torch.distributed.run --nproc_per_node8 eval_retrieval_video.pyretrieval_msrvtt.yaml 中pretrained复用 COCO 检索权重model_base_retrieval_coco.pthnum_frm_test: 8表示每个视频均匀采样 8 帧。评估流程eval_retrieval_video.py将每帧独立过 ViT 视觉编码器对帧级特征做平均池化得到视频特征再走“ITC 粗排 ITM 精排”数据集侧使用 decord 解码data/video_dataset.py支持 uniform / rand / headtail 三种帧采样策略指标输出txt_r1/5/10与vid_r1/5/10及vid_mdR中位秩。预训练数据集下载Bootstrapped Datasets仓库提供 CapFilt 框架产出的“引导式”预训练数据 JSON 文件每条记录格式为{url: url_of_image, caption: text_of_image}注意此处的预训练下载数据使用url键而本地训练用数据使用image键见 data/pretrain_dataset.py。数据按图像来源与描述来源分为三类图像来源Filtered web captionFiltered synthetic caption by ViT-BFiltered synthetic caption by ViT-LCC3MCC12MSBUccs_filtered.jsonccs_synthetic_filtered.jsonccs_synthetic_filtered_large.jsonLAION115Mlaion_filtered.jsonlaion_synthetic_filtered.jsonlaion_synthetic_filtered_large.json其中 “web caption” 是过滤后的原始网页描述“synthetic caption” 是分别由 ViT-B / ViT-L 生成并经 filter 筛选的合成描述——这正是 BLIP 论文中 CapFiltCaptioning and Filtering框架的具体产物用 captioner 为网络图片生成合成描述再用 filter 剔除噪声从而提升预训练数据质量。如何引用与致谢若本代码对你的研究有帮助README 建议按如下格式引用inproceedings{li2022blip, title{BLIP: Bootstrapping Language-Image Pre-training for Unified Vision-Language Understanding and Generation}, author{Junnan Li and Dongxu Li and Caiming Xiong and Steven Hoi}, year{2022}, booktitle{ICML}, }仓库实现依托 ALBEF、Huggingface Transformers 与 timm 等开源资源其代码结构也延续了 ALBEF 的动量编码器与队列设计思路。小结本文完整覆盖了 README.md 的全部操作路径从依赖安装、权重下载到图文检索、图像描述、VQA、NLVR2 四大任务的评估与微调再到预训练、零样本视频检索与引导式数据集下载。结合仓库源码你可以进一步深入理解架构层ViTbase/large BERT 系多模态编码器/解码器的组装方式models/blip.py训练层ITC ITM LM 三目标联合优化、动量队列、软标签与负样本采样models/blip_pretrain.py、models/blip_retrieval.py工程层分布式训练、种子复现、结果保存与 COCO 评估链路utils.py、data/utils.py。最后再次提醒该仓库已弃用并整合进 LAVIS新项目建议直接在 LAVIS 生态中使用 BLIP 相关能力本指南更适合学习与复现论文实验场景。赞分享多模态计算机视觉NLP预训练微调深度学习【免费下载链接】BLIPPyTorch code for BLIP: Bootstrapping Language-Image Pre-training for Unified Vision-Language Understanding and Generation项目地址https://gitcode.com/gh_mirrors/bl/BLIP点击查看免费下载相关推荐芋道管理后台现代化企业级开源管理平台解决方案芋道管理后台现代化企业级开源管理平台解决方案 在数字化转型浪潮中企业面临管理碎片化、系统孤岛化、开发成本高等多重挑战。芋道管理后台yudao ui adm前端企业应用BLIP统一视觉-语言理解与生成的预训练框架BLIP统一视觉 语言理解与生成的预训练框架 项目基础介绍及编程语言 BLIPBootstrapping Language Image Pre traini多模态计算机视觉NLP预训练微调深度学习Notepad-- 上手指南编辑、批量替换、文件对比一次搞定的跨平台文本编辑器Notepad 上手指南编辑、批量替换、文件对比一次搞定的跨平台文本编辑器 Notepad 是一款免费开源的跨平台文本编辑器Windows、Linux、ma桌面应用上一篇huggingface_hub 搜索指南用 Python 与 CLI 精准检索 Hub 上的模型、数据集与 Spaces下一篇如何永久保存你的QQ空间青春记忆终极备份指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑