跳转到主要内容

LAVIS - 通用语言-视觉智能库

项目描述



LAVIS - 通用语言-视觉智能库

新增功能: 🎉

一种通用的、高效的预训练策略,可以轻松地利用预训练视觉模型和大型语言模型(LLM)在视觉-语言预训练方面的开发。BLIP-2 在零样本 VQAv2 上击败了 Flamingo(65.0 比 56.3),在零样本标题生成上创造了新的最先进水平(在 NoCaps 上 121.6 CIDEr 分数,比以往最佳 113.2 分高)。此外,BLIP-2 还配备了强大的 LLM(例如 OPT,FlanT5),为各种有趣的应用解锁了新的 零样本指令视觉到语言生成 能力!

  • 2023 年 1 月,LAVIS 现已可在 PyPI 上安装!
  • [模型发布] 2022 年 12 月,发布了 Img2prompt-VQA 的实现。
    论文项目页面在 Colab 中打开

一个即插即用的模块,使大型语言模型(LLM)在视觉问答(VQA)中的即插即用成为可能。Img2Prompt-VQA 在 VQAv2 上的零样本 VQA(61.9 比 56.3)超过了 Flamingo,同时不需要端到端的训练!

  • [模型发布] 2022 年 10 月,发布了 PNP-VQAEMNLP Findings 2022,“即插即用 VQA:通过将大型预训练模型与零训练相结合进行零样本 VQA”,由 Anthony T.M.H. 等人撰写),
    论文项目页面在 Colab 中打开

一个模块化的零样本 VQA 框架,无需 PLM 训练,实现了 SoTA 零样本 VQA 性能。

目录

简介

LAVIS 是一个用于语言和视觉智能研究与应用的 Python 深度学习库。此库旨在为工程师和研究人员提供一个一站式解决方案,以快速开发针对其特定多模态场景的模型,并在标准和非标准数据集上对其进行基准测试。它具有统一的接口设计,可以访问

  • 10+ 个任务(检索、标题生成、视觉问答、多模态分类等);
  • 20+ 个数据集(COCO、Flickr、Nocaps、Conceptual Commons、SBU 等);
  • 30+ 个最先进的语言-视觉基础模型及其特定任务适应的预训练权重,包括 ALBEFBLIPALPROCLIP



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 定制化
文本到图像生成 [即将推出]

安装

  1. (可选) 创建conda环境
conda create -n lavis python=3.8
conda activate lavis
  1. PyPI安装
pip install salesforce-lavis
  1. 或者,为了开发,您也可以从源代码构建
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()namemodel_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与我们联系。

许可

BSD 3-Clause License

项目详情


下载文件

下载适合您平台文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源码分发

salesforce-lavis-1.0.2.tar.gz (1.6 MB 查看哈希值)

上传时间 源码

构建分发

salesforce_lavis-1.0.2-py3-none-any.whl (1.8 MB 查看哈希值)

上传时间 Python 3

由以下组织支持