窝牛号

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

transformer模型刚开始使用在NLP自然语言处理的机器翻译实例上,但是随着注意力机制的算法越来越火,根据transformer模型的魔改模型也越来越多,首先便是Google自己发布的VIT模型,把transformer注意力机制应用到计算机视觉任务上。那么transformer模型是否也同样适用于多模态模型呢?本期我们就介绍一下基于transformer模型的文本与图片多模态模型--ViLT。

ViLT 是一种简单的视觉和语言模型架构,其框架使用transformer模型的encoder编码器来提取和处理视觉特征,而不是单独的计算机视觉模型来提取特征,比如CNN卷积等。模型第一次在不使用区域特征或深度卷积特征提取的情况下在视觉和语言任务上都取得了良好的表现。

可以从模型框图上,我们可以看到ViLT把文本使用word embedding进行数据的特征转换,并加上位置编码传递给transformer模型的encoder编码器进行特征提取,图片部分使用VIT模型的patch embedding,并添加位置编码,最后同样传递给transformer模型的encoder编码器进行注意力机制的计算。从运算速度来看,其模型在对比ViLBERT,UNITER等模型上大大提高了运行效率。

我们可以直接在hugging face上面来体验ViLT模型,只是模型仅仅是英文模型,这里我们需要输入英文的句子,上面我们输入一张图片,并写出自己的prompt:what is the flower color?模型会自动识别哪里是花的区域,并成功识别出花的颜色是红色。

当然我们也可以使用transformers库来进行代码的运行,在运行此项目前,我们首先需要安装transformers库,安装transformers库也很简单,只需要pip install transformers即可。

Requirement already satisfied: tqdm>=4.27 in /usr/local/lib/python3.10/dist-packages (from transformers) (4.65.0) Requirement already satisfied: fsspec in /usr/local/lib/python3.10/dist-packages (from huggingface-hub<1.0,>=0.14.1->transformers) (2023.6.0) Requirement already satisfied: typing-extensions>=3.7.4.3 in /usr/local/lib/python3.10/dist-packages (from huggingface-hub<1.0,>=0.14.1->transformers) (4.7.1) Requirement already satisfied: urllib3<1.27,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests->transformers) (1.26.16) Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests->transformers) (2023.7.22) Requirement already satisfied: charset-normalizer~=2.0.0 in /usr/local/lib/python3.10/dist-packages (from requests->transformers) (2.0.12) Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests->transformers) (3.4) Installing collected packages: tokenizers, safetensors, huggingface-hub, transformers Successfully installed huggingface-hub-0.16.4 safetensors-0.3.1 tokenizers-0.13.3 transformers-4.31.0

成功安装transformers后,我们可以新建一个py文件,并输入如下代码。并加载一张需要识别的图片。

from transformers import ViltProcessor, ViltForQuestionAnswering import requests from PIL import Image im = Image.open(&39;).convert(&39;) text = &34; processor = ViltProcessor.from_pretrained(&34;) model = ViltForQuestionAnswering.from_pretrained(&34;) encoding = processor(im, text, return_tensors=&34;) outputs = model(**encoding) logits = outputs.logits idx = logits.argmax(-1).item() print(&34;, model.config.id2label[idx])

这里需要注意的是导入图片,使用PIL打开图片后,需要convert到RGB颜色空间,并输入需要模型识别的prompt语句。然后加载预训练模型,这里模型会自动下载其相关的配置文件与模型。

Downloading (…)rocessor_config.json: 100%251/251 [00:00<00:00, 7.83kB/s] Downloading (…)okenizer_config.json: 100%320/320 [00:00<00:00, 9.17kB/s] Downloading (…)solve/main/vocab.txt: 100%232k/232k [00:00<00:00, 2.42MB/s] Downloading (…)/main/tokenizer.json: 100%466k/466k [00:00<00:00, 7.24MB/s] Downloading (…)cial_tokens_map.json: 100%112/112 [00:00<00:00, 1.43kB/s] Downloading (…)lve/main/config.json: 100%136k/136k [00:00<00:00, 2.40MB/s] Downloading pytorch_model.bin: 100%470M/470M [00:04<00:00, 100MB/s]

成功下载完所有的配置文件,预训练模型等配置,模型进行图片的识别,并进行输入语句的解析,并最后给出结论,这里模型成功识别出了图片中的cat,并得到了cat的数量。

Predicted answer:2

我们使用另外一张图片,并输入如下语句,模型也成功识别出了图片中的girls,并得到了准确的数量。

text = &34; Predicted answer:2

既然可以能识别出girls,那么是否可以进行性别识别那,我们可以修改一下输入的语句。

text = &34; Predicted answer:0

可以看到模型成功识别出了我们输入的语句,也同样返回了正确的数据,模型不仅可以识别出人类,还可以正确识别出性别。多模态模型的发布,会越来越多的模型会基于transformer进行多模态模型的发布,最近刚刚发布的Meta transformer模型,更是把多模态发展到了12种输入数据。其包括文本、图像、点云、音频、视频、红外、超光谱、X 射线、表格、图形、时间序列和惯性测量单元(IMU)数据。

https://github.com/dandelin/ViLT https://huggingface.co/dandelin/vilt-b32-finetuned-vqa

transformer模型是NLP领域的基础模型,也是多模态模型的基础理论,我们可以进入如下专栏来学习transformer模型,本专栏将使用动画视频,代码分享,图文教程的三个维度进行transformer模型的详解讲解。transformer模型真的可以进行模型大一统吗,我们拭目以待。

本站所发布的文字与图片素材为非商业目的改编或整理,版权归原作者所有,如侵权或涉及违法,请联系我们删除

窝牛号 wwww.93ysy.com   沪ICP备2021036305号-1