LAVIS - 通用语言-视觉智能库
项目描述
LAVIS - 通用语言-视觉智能库
新增功能: 🎉
一种通用的、高效的预训练策略,可以轻松地利用预训练视觉模型和大型语言模型(LLM)在视觉-语言预训练方面的开发。BLIP-2 在零样本 VQAv2 上击败了 Flamingo(65.0 比 56.3),在零样本标题生成上创造了新的最先进水平(在 NoCaps 上 121.6 CIDEr 分数,比以往最佳 113.2 分高)。此外,BLIP-2 还配备了强大的 LLM(例如 OPT,FlanT5),为各种有趣的应用解锁了新的 零样本指令视觉到语言生成 能力!
一个即插即用的模块,使大型语言模型(LLM)在视觉问答(VQA)中的即插即用成为可能。Img2Prompt-VQA 在 VQAv2 上的零样本 VQA(61.9 比 56.3)超过了 Flamingo,同时不需要端到端的训练!
- [模型发布] 2022 年 10 月,发布了 PNP-VQA(EMNLP Findings 2022,“即插即用 VQA:通过将大型预训练模型与零训练相结合进行零样本 VQA”,由 Anthony T.M.H. 等人撰写),
论文,项目页面,)
一个模块化的零样本 VQA 框架,无需 PLM 训练,实现了 SoTA 零样本 VQA 性能。
目录
简介
LAVIS 是一个用于语言和视觉智能研究与应用的 Python 深度学习库。此库旨在为工程师和研究人员提供一个一站式解决方案,以快速开发针对其特定多模态场景的模型,并在标准和非标准数据集上对其进行基准测试。它具有统一的接口设计,可以访问
- 10+ 个任务(检索、标题生成、视觉问答、多模态分类等);
- 20+ 个数据集(COCO、Flickr、Nocaps、Conceptual Commons、SBU 等);
- 30+ 个最先进的语言-视觉基础模型及其特定任务适应的预训练权重,包括 ALBEF、BLIP、ALPRO、CLIP。
LAVIS 的关键特性包括
-
统一和模块化接口:便于轻松利用现有模块(数据集、模型、预处理程序),也可添加新模块。
-
易于即插即用推理和特征提取:可用的预训练模型让您能够利用最先进的多模态理解和生成能力来处理自己的数据。
-
可重复的模型库和训练配方:轻松复制和扩展现有任务上的最先进模型。
-
数据集库和自动下载工具:准备众多语言-视觉数据集可能会很麻烦。LAVIS 提供自动下载脚本来帮助准备各种数据集及其注释。
以下表格显示了库中支持的任务、数据集和模型。这是一个持续的工作,我们正在努力进一步扩大这个列表。
任务 | 支持模型 | 支持数据集 |
---|---|---|
图像-文本预训练 | ALBEF,BLIP | COCO、VisualGenome、SBU ConceptualCaptions |
图像文本检索 | ALBEF、BLIP、CLIP | COCO、Flickr30k |
文本图像检索 | ALBEF、BLIP、CLIP | COCO、Flickr30k |
视觉问答 | ALBEF,BLIP | VQAv2、OKVQA、A-OKVQA |
图像标题生成 | BLIP | COCO、NoCaps |
图像分类 | CLIP | ImageNet |
自然语言视觉推理(NLVR) | ALBEF,BLIP | NLVR2 |
视觉蕴涵(VE) | ALBEF | SNLI-VE |
视觉对话 | BLIP | VisDial |
视频文本检索 | BLIP、ALPRO | MSRVTT、DiDeMo |
文本视频检索 | BLIP、ALPRO | MSRVTT、DiDeMo |
视频问答(VideoQA) | BLIP、ALPRO | MSRVTT、MSVD |
视频对话 | VGD-GPT | AVSD |
多模态特征提取 | ALBEF、CLIP、BLIP、ALPRO | 定制化 |
文本到图像生成 | [即将推出] |
安装
- (可选) 创建conda环境
conda create -n lavis python=3.8
conda activate lavis
- 从PyPI安装
pip install salesforce-lavis
- 或者,为了开发,您也可以从源代码构建
git clone https://github.com/salesforce/LAVIS.git
cd LAVIS
pip install -e .
入门
模型库
模型库总结了LAVIS支持的模型,查看
from lavis.models import model_zoo
print(model_zoo)
# ==================================================
# Architectures Types
# ==================================================
# albef_classification ve
# albef_feature_extractor base
# albef_nlvr nlvr
# albef_pretrain base
# albef_retrieval coco, flickr
# albef_vqa vqav2
# alpro_qa msrvtt, msvd
# alpro_retrieval msrvtt, didemo
# blip_caption base_coco, large_coco
# blip_classification base
# blip_feature_extractor base
# blip_nlvr nlvr
# blip_pretrain base
# blip_retrieval coco, flickr
# blip_vqa vqav2, okvqa, aokvqa
# clip_feature_extractor ViT-B-32, ViT-B-16, ViT-L-14, ViT-L-14-336, RN50
# clip ViT-B-32, ViT-B-16, ViT-L-14, ViT-L-14-336, RN50
# gpt_dialogue base
让我们看看如何使用LAVIS中的模型在示例数据上进行推理。我们首先从本地加载一个示例图像。
import torch
from PIL import Image
# setup device to use
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
# load sample image
raw_image = Image.open("docs/_static/merlion.png").convert("RGB")
图像标题生成
在这个例子中,我们使用BLIP模型为图像生成一个标题。为了使推理更加简单,我们还通过load_model_and_preprocess()
将每个预训练模型与其预处理器(转换)关联起来。
import torch
from lavis.models import load_model_and_preprocess
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
# loads BLIP caption base model, with finetuned checkpoints on MSCOCO captioning dataset.
# this also loads the associated image processors
model, vis_processors, _ = load_model_and_preprocess(name="blip_caption", model_type="base_coco", is_eval=True, device=device)
# preprocess the image
# vis_processors stores image transforms for "train" and "eval" (validation / testing / inference)
image = vis_processors["eval"](raw_image).unsqueeze(0).to(device)
# generate caption
model.generate({"image": image})
# ['a large fountain spewing water into the air']
视觉问答(VQA)
BLIP模型能够用自然语言回答关于图像的自由形式问题。要访问VQA模型,只需替换传递给load_model_and_preprocess()
的name
和model_type
参数即可。
from lavis.models import load_model_and_preprocess
model, vis_processors, txt_processors = load_model_and_preprocess(name="blip_vqa", model_type="vqav2", is_eval=True, device=device)
# ask a random question.
question = "Which city is this photo taken?"
image = vis_processors["eval"](raw_image).unsqueeze(0).to(device)
question = txt_processors["eval"](question)
model.predict_answers(samples={"image": image, "text_input": question}, inference_method="generate")
# ['singapore']
统一特征提取接口
LAVIS提供统一的接口,可以从每个架构中提取特征。要提取特征,我们加载每个模型的特征提取器变体。多模态特征可用于多模态分类。低维单模态特征可用于计算跨模态相似度。
from lavis.models import load_model_and_preprocess
model, vis_processors, txt_processors = load_model_and_preprocess(name="blip_feature_extractor", model_type="base", is_eval=True, device=device)
caption = "a large fountain spewing water into the air"
image = vis_processors["eval"](raw_image).unsqueeze(0).to(device)
text_input = txt_processors["eval"](caption)
sample = {"image": image, "text_input": [text_input]}
features_multimodal = model.extract_features(sample)
print(features_multimodal.multimodal_embeds.shape)
# torch.Size([1, 12, 768]), use features_multimodal[:,0,:] for multimodal classification tasks
features_image = model.extract_features(sample, mode="image")
features_text = model.extract_features(sample, mode="text")
print(features_image.image_embeds.shape)
# torch.Size([1, 197, 768])
print(features_text.text_embeds.shape)
# torch.Size([1, 12, 768])
# low-dimensional projected features
print(features_image.image_embeds_proj.shape)
# torch.Size([1, 197, 256])
print(features_text.text_embeds_proj.shape)
# torch.Size([1, 12, 256])
similarity = features_image.image_embeds_proj[:,0,:] @ features_text.text_embeds_proj[:,0,:].t()
print(similarity)
# tensor([[0.2622]])
加载数据集
LAVIS通过提供自动下载工具来支持广泛的各种常见语言视觉数据集。下载后,要加载数据集,请使用以下代码
from lavis.datasets.builders import dataset_zoo
dataset_names = dataset_zoo.get_names()
print(dataset_names)
# ['aok_vqa', 'coco_caption', 'coco_retrieval', 'coco_vqa', 'conceptual_caption_12m',
# 'conceptual_caption_3m', 'didemo_retrieval', 'flickr30k', 'imagenet', 'laion2B_multi',
# 'msrvtt_caption', 'msrvtt_qa', 'msrvtt_retrieval', 'msvd_caption', 'msvd_qa', 'nlvr',
# 'nocaps', 'ok_vqa', 'sbu_caption', 'snli_ve', 'vatex_caption', 'vg_caption', 'vg_vqa']
下载图像后,我们可以使用load_dataset()
来获取数据集。
from lavis.datasets.builders import load_dataset
coco_dataset = load_dataset("coco_caption")
print(coco_dataset.keys())
# dict_keys(['train', 'val', 'test'])
print(len(coco_dataset["train"]))
# 566747
print(coco_dataset["train"][0])
# {'image': <PIL.Image.Image image mode=RGB size=640x480>,
# 'text_input': 'A woman wearing a net on her head cutting a cake. ',
# 'image_id': 0}
如果您已经托管了数据集的本地副本,您可以通过传递vis_path
参数来更改默认位置以加载图像。
coco_dataset = load_dataset("coco_caption", vis_path=YOUR_LOCAL_PATH)
Jupyter Notebook 示例
请参阅示例以获取更多推理示例,例如标题、特征提取、VQA、GradCam、零样本分类。
资源和工具
- 基准测试:请参阅基准测试以获取评估和训练支持模型的说明。
- 数据集下载和浏览:请参阅数据集下载以获取说明和下载常见语言视觉数据集的自动工具。
- GUI演示:要本地运行演示,请运行
bash run_scripts/run_demo.sh
,然后按照提示在浏览器中查看。网页演示即将推出。
文档
有关更多详细信息和高阶用法,请参阅文档。
伦理和负责任的使用
请注意,LAVIS中的模型在多模态能力上不提供任何保证;可能会观察到错误或不偏颇的预测。特别是,LAVIS中使用的数据集和预训练模型可能包含社会经济偏见,这可能导致误分类以及其他不良行为,如冒犯性或不适当的言论。我们强烈建议用户在实践采用之前审查LAVIS中的预训练模型和整体系统。我们计划通过调查和减轻这些潜在的偏见和不适当行为来改进库。
技术报告和引用 LAVIS
更多详细信息请参阅我们的技术报告。
如果您在研究或应用中使用LAVIS,请使用以下BibTeX引用
@misc{li2022lavis,
title={LAVIS: A Library for Language-Vision Intelligence},
author={Dongxu Li and Junnan Li and Hung Le and Guangsen Wang and Silvio Savarese and Steven C. H. Hoi},
year={2022},
eprint={2209.09019},
archivePrefix={arXiv},
primaryClass={cs.CV}
}
联系我们
如果您有任何问题、评论或建议,请随时通过lavis@salesforce.com与我们联系。
许可
项目详情
salesforce-lavis-1.0.2.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 778f6be1717a6e60ca7787f164bd04f8f361694baf04154805e9ac9c27a08a37 |
|
MD5 | e36a2502e068c9cd4f02ce586f7f12ed |
|
BLAKE2b-256 | 095a1053fd2730419fe53f876fdfc9cb782b099865724194ad06b44e4d138d00 |
salesforce_lavis-1.0.2-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 489782efc2d98d8e878112b2758f82ac2e6c10dfcfa087db6656465c7784d49f |
|
MD5 | 5e722761ced12372d14902b7c355ea43 |
|
BLAKE2b-256 | 771b112981873d44de113ecaab8084da82606871ad1e914e00c6ceb68f96b394 |