VLE基于预训练文本和图像编码器的图像-文本多模态理解模型:支持视觉问答、图文匹配、图片分类、常识推理等

news2025/1/19 7:57:41

在这里插入图片描述

项目设计集合(人工智能方向):助力新人快速实战掌握技能、自主完成项目设计升级,提升自身的硬实力(不仅限NLP、知识图谱、计算机视觉等领域):汇总有意义的项目设计集合,助力新人快速实战掌握技能,助力用户更好利用 CSDN 平台,自主完成项目设计升级,提升自身的硬实力。

在这里插入图片描述

  1. 专栏订阅:项目大全提升自身的硬实力

  2. [专栏详细介绍:项目设计集合(人工智能方向):助力新人快速实战掌握技能、自主完成项目设计升级,提升自身的硬实力(不仅限NLP、知识图谱、计算机视觉等领域)

VLE基于预训练文本和图像编码器的图像-文本多模态理解模型:支持视觉问答、图文匹配、图片分类、常识推理等

多模态预训练模型通过在多种模态的大规模数据上的预训练,可以综合利用来自不同模态的信息,执行各种跨模态任务。在本项目中,我们推出了VLE (Vision-Language Encoder),一种基于预训练文本和图像编码器的图像-文本多模态理解模型,可应用于如视觉问答、图像-文本检索等多模态判别任务。特别地,在对语言理解和推理能力有更强要求的视觉常识推理(VCR)任务中,VLE取得了公开模型中的最佳效果。

最近,大型语言模型(LLM)取得了巨大成功,并被用于翻译、问答、摘要等文本任务。虽然LLM是单模态模型,但它们的能力也可用于辅助多模态理解任务。借助LLM的zero-shot能力,我们设计了一种VQA+LLM方案,将大型语言模型集成到视觉问答任务中,实现了帮助视觉问答模型生成更准确和流畅的答案。

开源VLE相关资源以供学术研究参考。

在线演示地址:https://huggingface.co/spaces/hfl/VQA_VLE_LLM


中文LERT | 中英文PERT | 中文MacBERT | 中文MiniRBT | 中文ELECTRA | 中文XLNet | 中文BERT | 知识蒸馏工具TextBrewer | 模型裁剪工具TextPruner

查看更多哈工大讯飞联合实验室(HFL)发布的资源:https://github.com/iflytek/HFL-Anthology

1.模型结构

VLE模型采用双流结构,与METER模型结构类似,由两个单模态编码器(图像编码器和文本编码器)和一个跨模态融合模块构成。VLE与METER的结构上的差异在于:

  • VLE使用DeBERTa-v3作为文本编码器,其性能优于METER中使用的RoBERTa-base。
  • 在VLE-large中,跨模态融合模块的隐层维度增加至1024,以增加模型的容量。
  • 在精调阶段,VLE引入了额外的token类型向量表示。

2.预训练

VLE使用图文对数据进行预训练。在预训练阶段,VLE采用了四个预训练任务:

  • MLM (Masked Language Modeling):掩码预测任务。给定图文对,随机遮掩文本中的部分单词,训练模型还原遮掩的文本。
  • ITM (Image-Text Matching):图文匹配预测任务。给定图文对,训练模型判断图像和文本是否匹配。
  • MPC (Masked Patch-box Classification):遮掩Patch分类任务,给定图文对,并遮掩掉图片中包含具体对象的patch,训练模型预测被遮掩的对象种类。
  • PBC (Patch-box classification):Patch分类任务。给定图文对,预测图片中的哪些patch与文本描述相关。

VLE在14M的英文图文对数据上进行了25000步的预训练,batch大小为2048。下图展示了VLE的模型结构和部分预训练任务(MLM、ITM和MPC)。

3.下游任务适配

3.1视觉问答 (VQA)

  • 我们遵循标准做法,使用VQA的训练集(training set)和验证集(validation set)训练模型,在test-dev集上进行验证。我们采用模型的融合层的pooler的输出进行分类任务的训练。

3.2 视觉常识推理 (VCR)

  • 我们将VCR格式化为一个类似于RACE的选择题任务,并对于每张图像中的对象,将覆盖该对象的patch的表示的平均池化值添加到融合模块之前的图像特征序列中。我们还为图像和文本中的对象添加额外的token_type_ids,以注入不同模态之间的对齐信息,提升模型的对齐性能。

3.3 模型下载

本次发布了VLE-base和VLE-large两个版本的预训练模型,模型权重为PyTorch格式,可以选择手动从🤗 transformers模型库下载权重和配置文件,或者在代码中使用 from_pretrained(model_name) 以自动加载模型。详细方法参加模型使用。

3.4 预训练权重

模型文本编码器图像编码器参数量*MODEL_NAME链接
VLE-baseDeBERTa-v3-baseCLIP-ViT-base-patch16378Mhfl/vle-baselink
VLE-largeDeBERTa-v3-largeCLIP-ViT-large-patch14930Mhfl/vle-largelink

* : 仅计算encoder和emebddings的参数。特定任务的预测层的参数量未计入。

3.5 精调权重

模型文本编码器图像编码器MODEL_NAME链接
VLE-base-for-VQADeBERTa-v3-baseCLIP-ViT-base-patch16hfl/vle-base-for-vqalink
VLE-large-for-VQADeBERTa-v3-largeCLIP-ViT-large-patch14hfl/vle-large-for-vqalink
VLE-base-for-VCR-q2aDeBERTa-v3-baseCLIP-ViT-base-patch16hfl/vle-base-for-vcr-q2alink
VLE-large-for-VCR-q2aDeBERTa-v3-largeCLIP-ViT-large-patch14hfl/vle-large-for-vcr-q2alink
VLE-base-for-VCR-qa2rDeBERTa-v3-baseCLIP-ViT-base-patch16hfl/vle-base-for-vcr-qa2rlink
VLE-large-for-VCR-qa2rDeBERTa-v3-largeCLIP-ViT-large-patch14hfl/vle-large-for-vcr-qa2rlink

3.6 模型对比

在下表中,我们比较了VLE、METER以及其他多模态模型的参数量、预训练数据和下游任务效果。其中VQA展示的的是test-dev集上的效果;VCR展示的是dev集上的效果。

模型VQAVCR (QA2R)VCR (Q2A)参数量预训练数据量*
CoCa82.3--2.1 B未知
BeiT-384.2--1.9 B21M(I-T) + 14M(I) + 160G(T)
OFA82.0--930M20M(I-T) + 39M(I) + 140G(T)
BLIP78.3--385M~130M(I-T)
METER-base77.7 (76.8†‡)79.8§77.6§345M9M(I-T)
METER-Huge80.3--878M20M(I-T)
VLE-base77.683.7§79.9§378M15M(I-T)
VLE-large79.387.5§84.3§930M15M(I-T)

: 复现效果

: 精调参数: lr=7e-6, batch_size={256, 512}, num_epochs=10

§ : 精调参数: lr=1e-5, batch_size=128, num_epochs=5

* : I-T: 图文对. I: 图像. T: 文本.

观察上表可以发现:

  • VLE的预训练更高效:与大小相近的模型相比,VLE使用了更少的预训练数据,并在视觉问答上取得了相当甚至更好的效果。
  • VLE有更强的推理能力: 特别地,在对推理能力要求更高的视觉常识推理(VCR)任务上,VLE显著地超过了具有相似结构的METER。

4.结合大模型的视觉问答

最近,随着指令微调、RLHF等技术的发展,LLM在多种文本任务中取得了巨大的成功。尽管LLM是单模态模型,但它们的能力也可用于辅助多模态理解任务。具体而言,我们提出一种VQA + LLM方案,将多模态模型与LLM集成到视觉问答任务中,从而帮助VQA模型生成更准确和流畅的答案。下图展示了系统流程。

(a) VQA: 这是使用判别模型执行VQA任务的标准方式。输入问题和图像到多模态模型中,训练模型预测正确的答案标签。

(b) VQA + LLM: 首先利用captioning模型生成图片的描述;将图片描述、问题以及VQA模型的详细预测结果拼接,组合成合适的prompt的形式送入LLM,最后要求LLM模型回复最合理的答案。

VQA+LLM生成的答案更准确,也有更高的可读性。下面是一些例子:

Demo地址(仅供学术研究):https://huggingface.co/spaces/hfl/VQA_VLE_LLM

4.1 模型使用

环境要求

  • PIL
  • Transformers >= 4.25
  • PyTorch Lightning (仅用于运行精调脚本)

模型相关代码位于models/VLE目录下的*py文件中。因此,要使用VLE模型,仅需把models目录复制到你的项目代码目录即可。

要运行以下演示代码,请使用git clone命令下载本仓库至本地,并进入仓库的根目录。

4.2 加载VLEModel

from models.VLE import VLEModel, VLEProcessor
from PIL import Image
import torch

model_name="hfl/vle-large"
images = [Image.open('pics/dogs.png')]
text = ["There are dogs on the grass."]

model = VLEModel.from_pretrained(model_name)
vle_processor = VLEProcessor.from_pretrained(model_name)
multimodal_inputs = vle_processor(text=text,images=images, return_tensors='pt',padding=True)

#forward
vle_output = model(**multimodal_inputs)

5.推理

5.1 视觉问答 (VQA)

from models.VLE import VLEForVQA, VLEProcessor, VLEForVQAPipeline
from PIL import Image

model_name="hfl/vle-base-for-vqa"
text= "What is the color of the floor?"
image = Image.open("pics/door.png")

model = VLEForVQA.from_pretrained(model_name)
vle_processor = VLEProcessor.from_pretrained(model_name)
vqa_pipeline = VLEForVQAPipeline(model=model, device='cpu', vle_processor=vle_processor)

vqa_answers = vqa_pipeline(image=image, question=text, top_k=5)
print(f"Question: {text}. Answers: {vqa_answers}")

5.2 图文匹配(ITM)

from models.VLE import VLEForITM, VLEProcessor, VLEForITMPipeline
from PIL import Image

model_dir = 'hfl/vle-base'
itm_text = ["a photo of a cat.", "a photo of dogs."]
itm_images = Image.open("pics/dogs.png")

print("Init ITM model")
model = VLEForITM.from_pretrained(model_dir)
vle_processor = VLEProcessor.from_pretrained(model_dir)

print("init ITM pipeline")
itm_pipeline = VLEForITMPipeline(model=model, device='cpu', vle_processor=vle_processor)
itm_pred = itm_pipeline([{"image": itm_images, "text": itm_text[0]}, 
                         {"image": itm_images, "text": itm_text[1]}])

for t, pred in zip(itm_text,itm_pred):
    print(t,pred)

5.3 Patch分类(PBC)

from models.VLE import VLEForPBC, VLEProcessor, VLEForPBCPipeline
from PIL import Image

model_dir = 'hfl/vle-base'
pbc_text = "pink tongues"
pbc_image = Image.open("pics/dogs.png")

print("Init PBC model")
model = VLEForPBC.from_pretrained(model_dir)
vle_processor = VLEProcessor.from_pretrained(model_dir)

print("init PBC pipeline")
pbc_pipeline = VLEForPBCPipeline(model=model, device='cpu', vle_processor=vle_processor)
pbc_pred = pbc_pipeline(image=pbc_image,text=pbc_text)
print(pbc_text)
pbc_pred['image'].save('pics/pink_tongues.png')

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/843201.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DROP USER c##xyt CASCADE > ORA-01940: 无法删除当前连接的用户

多创建了一个用户,想要给它删除掉 一 上执行过程,确实删除成功了 Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production With the Partitioning, OLAP, Advanced Analytics and Real Application Testing optionsSQL> DR…

用excel格式书写的接口用例执行脚本

创建测试用例和测试结果集文件夹: excel编写的接口测试用例如下: 1 encoding 响应的编码格式。所测项目大部分是utf-8,有一个特殊项目是utf-8-sig 2 params 对应requests的params 3 data,对应requests的data 有些参数是动态的&a…

C#,数值计算——查找等价类(Find equivalence classes)的计算方法及其源程序

1 等价类的定义 2 Examples 3 Partitions 4 C#源代码 using System; namespace Legalsoft.Truffer { /// <summary> /// Find equivalence classes /// </summary> public class EClass { public EClass() { } pub…

有没有好用的在线画图工具推荐?

绘画是设计师最常见的工作之一&#xff0c;设计师对在线绘画工具的要求越来越高&#xff0c;市场上也出现了各种在线绘画工具&#xff0c;让设计师不知道如何选择高质量的在线绘画工具&#xff0c;一个好的在线绘画工具不仅可以让你轻松绘画&#xff0c;而且可以让你的工作效率…

android studio内存分析之Memory profiler的使用

目录 Android Studio中内存分析工具Memory profiler的使用1. 打开Memory Profiler2. 工具使用3. 内存选项说明4. 内存性能分析器概览5. 内存计算方式6. 查看内存分配7. 捕获java/kotlin方式查看内存分配8. 堆转储文件导入和导出 内存性能分析器中的泄漏检测 Android Studio中内…

带你了解—使用Ubuntu系统,公网环境下SSH远程树莓派

公网环境下Ubuntu系统SSH远程树莓派 文章目录 公网环境下Ubuntu系统SSH远程树莓派前言 1. 安装cpolar客户端2. 安装完成后输入指令3. ubuntu系统输入命令 前言 树莓派作为低功耗、小型化的硬件设备&#xff0c;其功能和运算能力并未过度缩水&#xff0c;在不少场景中&#xff…

UEditorPlus v3.3.0 图片上传压缩重构,UI优化,升级基础组件

UEditor是由百度开发的所见即所得的开源富文本编辑器&#xff0c;基于MIT开源协议&#xff0c;该富文本编辑器帮助不少网站开发者解决富文本编辑器的难点。 UEditorPlus 是有 ModStart 团队基于 UEditor 二次开发的富文本编辑器&#xff0c;主要做了样式的定制&#xff0c;更符…

基于spring boot的餐饮管理系统java酒店饭店菜谱 jsp源代码mysql

本项目为前几天收费帮学妹做的一个项目&#xff0c;Java EE JSP项目&#xff0c;在工作环境中基本使用不到&#xff0c;但是很多学校把这个当作编程入门的项目来做&#xff0c;故分享出本项目供初学者参考。 一、项目描述 基于spring boot的餐饮管理系统j 系统1权限&#xff…

Python实现GA遗传算法优化LightGBM分类模型(LGBMClassifier算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 遗传算法&#xff08;Genetic Algorithm&#xff0c;GA&#xff09;最早是由美国的 John holland于20世…

利用Jmeter做接口测试全流程分析

利用Jmeter做接口测试怎么做呢&#xff1f;过程真的是超级简单。 明白了原理以后&#xff0c;把零碎的知识点填充进去就可以了。这篇文章就来介绍一下如何利用Jmeter做接口测试的流程&#xff0c;主要针对的是功能测试。暂不涉及到自动化测试和性能测试的内容。 一把来说&…

AIGC:【LLM(五)】——Faiss:高效的大规模相似度检索库

文章目录 一.简介1.1 什么是Faiss1.2 Faiss的安装 二.Faiss检索流程2.1 构建向量库2.2 构建索引2.3 top-k检索 三.Faiss构建索引的多种方式3.1 Flat &#xff1a;暴力检索3.2 IVFx Flat &#xff1a;倒排暴力检索3.3 IVFxPQy 倒排乘积量化3.4 LSH 局部敏感哈希3.5 HNSWx 一.简介…

企业工程项目管理系统源码(三控:进度组织、质量安全、预算资金成本、二平台:招采、设计管理)em

​ 工程项目管理软件&#xff08;工程项目管理系统&#xff09;对建设工程项目管理组织建设、项目策划决策、规划设计、施工建设到竣工交付、总结评估、运维运营&#xff0c;全过程、全方位的对项目进行综合管理 工程项目各模块及其功能点清单 一、系统管理 1、数据字典&#…

【Megatron-DeepSpeed】张量并行工具代码mpu详解(三):张量并行层的实现及测试

相关博客 【Megatron-DeepSpeed】张量并行工具代码mpu详解(三)&#xff1a;张量并行层的实现及测试 【Megatron-DeepSpeed】张量并行工具代码mpu详解(一)&#xff1a;并行环境初始化 【Megatron-DeepSpeed】张量并行工具代码mpu详解(二)&#xff1a;Collective通信操作的封装ma…

【FIFO IP系列】FIFO IP参数配置与使用示例

Vivado IP核提供了强大的FIFO生成器&#xff0c;可以通过图形化配置快速生成FIFO IP核。 本文将详细介绍如何在Vivado中配置一个FIFO IP核,以及如何调用这个FIFO IP核。 一、FIFO IP核的配置 1、新建FIFO IP 在Vivado的IP Catalog中找到FIFO Generator IP核&#xff0c;双击…

梳理日常开发涉及的负载均衡

负载均衡是当前分布式微服务时代最能提及的词之一&#xff0c;出于对分层、解耦、弱依赖、可配置、可靠性等概念的解读&#xff0c;一对一的模式变得不再可信赖&#xff0c;千变万化的网络环境中&#xff0c;冗余和备份显得格外重要&#xff0c;稍大型的系统就会存在大量微服务…

一百四十七、Kettle——Linux上安装的kettle8.2连接ClickHouse数据库

一、目标 kettle8.2在Linux安装好后&#xff0c;需要与ClickHouse数据库建立连接 二、前提准备 1、在Linux已经安装好kettle并可以启动kettle 2、kettle版本是8.2 3、已知Linux系统架构是64位 4、准备好ClickHouse的驱动包(借他人网盘链接一用) https://pan.baidu.com/s/…

Pytorch深度学习-----损失函数(L1Loss、MSELoss、CrossEntropyLoss)

系列文章目录 PyTorch深度学习——Anaconda和PyTorch安装 Pytorch深度学习-----数据模块Dataset类 Pytorch深度学习------TensorBoard的使用 Pytorch深度学习------Torchvision中Transforms的使用&#xff08;ToTensor&#xff0c;Normalize&#xff0c;Resize &#xff0c;Co…

编织人工智能:机器学习发展历史与关键技术全解析

文章目录 1. 引言1.1 机器学习的定义1.2 重要性和应用场景重要性应用场景 2. 机器学习的早期历史2.1 初期理论与算法感知机决策树 2.2 早期突破支持向量机神经网络初探 3. 21世纪初期的发展3.1 集成学习方法随机森林XGBoost 3.2 深度学习的崛起卷积神经网络&#xff08;CNN&…

ViLT:基于transformer模型的计算机视觉与自然语言处理多模态模型

transformer模型刚开始使用在NLP自然语言处理的机器翻译实例上,但是随着注意力机制的算法越来越火,根据transformer模型的魔改模型也越来越多,首先便是Google自己发布的VIT模型,把transformer注意力机制应用到计算机视觉任务上。那么transformer模型是否也同样适用于多模态…

模拟实现消息队列项目(系列4) -- 服务器模块(内存管理)

目录 前言 1. 创建MemoryDataCenter 2. 封装Exchange 和 Queue方法 3. 封装Binding操作 4. 封装Message操作 4.1 封装消息中心集合messageMap 4.2 封装消息与队列的关系集合queueMessageMap的操作 5. 封装未确认消息集合waitMessage的操作 6. 从硬盘中恢复数据到内存中 7. Memo…