代码
基于MindSpore NLP实现Blip2模型论文解读

基于MindSpore NLP实现Blip2模型论文解读

基于MindSpore NLP实现Blip2模型论文解读

**作者:**未平 来源:知乎

BLIP-2 提出了一个新的高效预训练策略,用于解决视觉和语言联合学习任务中的计算成本问题。相比其他模型,BLIP-2 的最大创新点在于,它引入了冻结的预训练图像编码器和冻结的大型语言模型(LLM),通过一个**轻量级的查询转换器(Querying Transformer, Q-Former)**来弥合视觉和语言的跨模态差距。

模型创新点

该模型的主要创新包括:

**1、****两阶段的预训练策略:**第一阶段学习视觉-语言表征,第二阶段进行视觉到语言的生成学习。这种分阶段策略有效利用了预训练的图像和语言模型,减少了计算成本。

**2、****轻量化设计:**BLIP-2 相比于其他最新的模型,训练参数显著减少,尤其是与 Flamingo80B 相比,BLIP-2 在零样本 VQAv2 上的表现高出 8.7%,但其训练参数却减少了 54 倍。

**3、****通用性:**BLIP-2 支持多种视觉-语言任务,如视觉问答(VQA)、图像字幕生成、图文检索等,并表现出良好的零样本推理能力。

数据集上的评价指标得分

BLIP-2 在多个视觉-语言任务的数据集上表现出色,主要得分指标如下:

1、视觉问答 (VQA):在 VQAv2 数据集上,BLIP-2 在零样本情况下取得了65.0的准确率,远高于 Flamingo80B 的 56.3%。

2、****图像字幕生成:在 NoCaps 数据集的验证集中,BLIP-2 获得了121.6 CIDEr和15.8 SPICE的得分,同样高于现有的 SOTA 模型。

**3、图文检索 (Flickr30K):BLIP-2 在 Image → Text 检索任务上达到了97.6%的 R@1(检索准确率),在 Text → Image 任务上达到了89.7%**的 R@1,这些结果均超过了之前的顶级模型。

创新点优势分析

BLIP-2 的创新相较于其他工作具有以下优势:

**1、计算效****率显著提高:**传统的视觉-语言预训练方法需要对大规模模型进行端到端训练,计算成本高昂。BLIP-2 通过冻结预训练的图像编码器和语言模型,显著降低了计算成本,仅需微调轻量级的查询转换器,这使得它比 Flamingo 等模型更高效。

**2、性能****卓越,参数更少:**在多个任务上,BLIP-2 展现了更高的性能,如在 VQA、图像字幕生成和图文检索任务中的表现均优于现有的模型,并且其参数量更小。例如,在 VQAv2 上,它比 Flamingo80B 高出 8.7%,但仅使用了 54 倍更少的训练参数。

**3、通****用性和扩展性:**BLIP-2 的设计能够兼容更多的预训练图像和语言模型,这意味着随着更多高级模型的出现,它可以轻松进行适配以获得更好的性能。

使用 MindSpore NLP 进行模型评估

图文检索评估过程参照官方代码和论文实现,首先对每张待评估图像进行预处理并提取特征,然后通过计算图像特征与预存文本特征的相似度进行初步检索,选出最相关的前K=128个文本。接着,利用BLIP-2模型的图文匹配ITM和ITC对这K个文本进行更精细的相似度计算,综合ITM和ITC分数得到最终排序。最后,根据排序结果记录相应的图像ID,并通过检查真实图像ID是否出现在检索结果的前N位来计算R@1、R@5和R@10等评估指标,从而模型的图文检索性能。

为了验证该模型的效果,我们使用 MindSpore NLP 来加载(blip2-itm-vit-g) 模型,并在数据集( COCO Caption 2014)上进行评估,由于资源限制只选取了coco2014中的全部文本和2500张图片进行测试,所以评分偏低,但Transformers实现与MindSpore nlp误差小于2%。

完整代码

已经上传到 GitHub 仓库中,您可以通过以下链接访问并运行:

BLIP-2 MindNLP 图文检索评估代码:https://github.com/fanxing-6/MindNLPBlip2ImageTextRetrievalEval

我们使用 MindSpore NLP 加载 BLIP-2 模型(blip2-itm-vit-g),并在 coco 2014 数据集上进行推理。

总结

BLIP-2通过使用冻结的预训练图像编码器和大型语言模型,实现了一种计算高效的视觉-语言预训练策略,有效减少了训练成本,同时在多种视觉-语言任务上展现出卓越的性能。

建议各位开发者利用MindSpore NLP等工具来加载并复现该模型的实验成果。MindSpore NLP提供了一套与PyTorch风格一致的简洁接口,加载和评估预训练模型非常直接和高效。