vilt-b32-mlm项目介绍
项目概述
vilt-b32-mlm项目基于Vision-and-Language Transformer(简称ViLT)模型,该模型由Kim等人提出,详细介绍可以在论文ViLT: Vision-and-Language Transformer Without Convolution or Region Supervision中找到。ViLT模型是通过GCC+SBU+COCO+VG数据集进行预训练的,总共进行了20万步的训练。需要注意的是,此版本的模型主要专注于语言建模功能。
使用场景与局限
vilt-b32-mlm模型特别适用于结合图像和文本进行掩码语言建模的任务。在给定一张图片和含有[MASK]标记的文本后,模型可预测文本中的掩码内容,从而实现文本的完整化。
使用方法
要在PyTorch中使用此模型,可以按照以下步骤操作:
from transformers import ViltProcessor, ViltForMaskedLM
import requests
from PIL import Image
import re
url = "http://images.cocodataset.org/val2017/000000039769.jpg"
image = Image.open(requests.get(url, stream=True).raw)
text = "a bunch of [MASK] laying on a [MASK]."
processor = ViltProcessor.from_pretrained("dandelin/vilt-b32-mlm")
model = ViltForMaskedLM.from_pretrained("dandelin/vilt-b32-mlm")
# 准备输入
encoding = processor(image, text, return_tensors="pt")
# 前向传播
outputs = model(**encoding)
tl = len(re.findall("\[MASK\]", text))
inferred_token = [text]
# 逐步填充MASK标记
with torch.no_grad():
for i in range(tl):
encoded = processor.tokenizer(inferred_token)
input_ids = torch.tensor(encoded.input_ids).to(device)
encoded = encoded["input_ids"][0][1:-1]
outputs = model(input_ids=input_ids, pixel_values=pixel_values)
mlm_logits = outputs.logits[0]
mlm_logits = mlm_logits[1 : input_ids.shape[1] - 1, :]
mlm_values, mlm_ids = mlm_logits.softmax(dim=-1).max(dim=-1)
mlm_values[torch.tensor(encoded) != 103] = 0
select = mlm_values.argmax().item()
encoded[select] = mlm_ids[select].item()
inferred_token = [processor.decode(encoded)]
selected_token = ""
encoded = processor.tokenizer(inferred_token)
processor.decode(encoded.input_ids[0], skip_special_tokens=True)
上述代码展示了如何利用ViLT处理器和ViLT掩码语言模型头,从图像和文本中推断出掩码标记的具体内容。
训练数据与过程
该项目未提供具体的训练数据细节。但通常训练数据包括广泛的图像和文本组合,如GCC、SBU、COCO和VG数据集等。
评估结果
项目暂无评估结果的详细信息。
参考文献
@misc{kim2021vilt,
title={ViLT: Vision-and-Language Transformer Without Convolution or Region Supervision},
author={Wonjae Kim and Bokyung Son and Ildoo Kim},
year={2021},
eprint={2102.03334},
archivePrefix={arXiv},
primaryClass={stat.ML}
}
这个项目适合那些对视觉和语言的结合研究感兴趣的研究者和开发者,是一个探索如何跳过传统卷积或区域监督的创新尝试。