Package: ammico-lavis
AMMICO-LAVISThis is a fork ofLAVIS(release 1.0.2) that support ARM M1, M2, and M3 Macs. On MacOS it depends oneva-decord, instead ofdecordon other systems.
Supportstransformers>=4.25.0,<4.27.Benchmark,Technical Report,Documentation,Jupyter Notebook Examples,BlogLAVIS - A Library for Language-Vision IntelligenceWhat's New: 🎉[Model Release] Jan 2023, released implementation ofBLIP-2Paper,Project Page,,A generic and efficient pre-training strategy that easily harvests development of pretrained vision models and large language models (LLMs) for vision-language pretraining. BLIP-2 beats Flamingo on zero-shot VQAv2 (65.0vs56.3), establishing new state-of-the-art on zero-shot captioning (on NoCaps121.6CIDEr score vs previous best113.2). In addition, equipped with powerful LLMs (e.g. OPT, FlanT5), BLIP-2 also unlocks the newzero-shot instructed vision-to-language generationcapabilities for various interesting applications!Jan 2023, LAVIS is now available onPyPIfor installation![Model Release] Dec 2022, released implementation ofImg2prompt-VQAPaper,Project Page,A plug-and-play module that enables off-the-shelf use of Large Language Models (LLMs) for visual question answering (VQA). Img2Prompt-VQA surpasses Flamingo on zero-shot VQA on VQAv2 (61.9 vs 56.3), while in contrast requiring no end-to-end training![Model Release] Oct 2022, released implementation ofPNP-VQA(EMNLP Findings 2022,"Plug-and-Play VQA: Zero-shot VQA by Conjoining Large Pretrained Models with Zero Training", by Anthony T.M.H. et al),Paper,Project Page,)A modular zero-shot VQA framework that requires no PLMs training, achieving SoTA zero-shot VQA performance.Table of ContentsIntroductionInstallationGetting StartedModel ZooImage CaptioningVisual question answering (VQA)Unified Feature Extraction InterfaceLoad DatasetsJupyter Notebook ExamplesResources and ToolsDocumentationsEthical and Responsible UseTechnical Report and Citing LAVISLicenseIntroductionLAVIS is a Python deep learning library for LAnguage-and-VISion intelligence research and applications. This library aims to provide engineers and researchers with a one-stop solution to rapidly develop models for their specific multimodal scenarios, and benchmark them across standard and customized datasets.
It features a unified interface design to access10+tasks
(retrieval, captioning, visual question answering, multimodal classification etc.);20+datasets (COCO, Flickr, Nocaps, Conceptual
Commons, SBU, etc.);30+pretrained weights of state-of-the-art foundation language-vision models and their task-specific adaptations, includingALBEF,BLIP,ALPRO,CLIP.Key features of LAVIS include:Unified and Modular Interface: facilitating to easily leverage and repurpose existing modules (datasets, models, preprocessors), also to add new modules.Easy Off-the-shelf Inference and Feature Extraction: readily available pre-trained models let you take advantage of state-of-the-art multimodal understanding and generation capabilities on your own data.Reproducible Model Zoo and Training Recipes: easily replicate and extend state-of-the-art models on existing and new tasks.Dataset Zoo and Automatic Downloading Tools: it can be a hassle to prepare the many language-vision datasets. LAVIS provides automatic downloading scripts to help prepare a large variety of datasets and their annotations.The following table shows the supported tasks, datasets and models in our library. This is a continuing effort and we are working on further growing the list.TasksSupported ModelsSupported DatasetsImage-text Pre-trainingALBEF, BLIPCOCO, VisualGenome, SBU ConceptualCaptionsImage-text RetrievalALBEF, BLIP, CLIPCOCO, Flickr30kText-image RetrievalALBEF, BLIP, CLIPCOCO, Flickr30kVisual Question AnsweringALBEF, BLIPVQAv2, OKVQA, A-OKVQAImage CaptioningBLIPCOCO, NoCapsImage ClassificationCLIPImageNetNatural Language Visual Reasoning (NLVR)ALBEF, BLIPNLVR2Visual Entailment (VE)ALBEFSNLI-VEVisual DialogueBLIPVisDialVideo-text RetrievalBLIP, ALPROMSRVTT, DiDeMoText-video RetrievalBLIP, ALPROMSRVTT, DiDeMoVideo Question Answering (VideoQA)BLIP, ALPROMSRVTT, MSVDVideo DialogueVGD-GPTAVSDMultimodal Feature ExtractionALBEF, CLIP, BLIP, ALPROcustomizedText-to-image Generation[COMING SOON]Installation(Optional) Creating conda environmentcondacreate-nlavispython=3.8
condaactivatelavisinstall fromPyPIpipinstallsalesforce-lavisOr, for development, you may build from sourcegitclonehttps://github.com/salesforce/LAVIS.gitcdLAVIS
pipinstall-e.Getting StartedModel ZooModel zoo summarizes supported models in LAVIS, to view:fromlavis.modelsimportmodel_zooprint(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                   baseLet’s see how to use models in LAVIS to perform inference on example data. We first load a sample image from local.importtorchfromPILimportImage# setup device to usedevice=torch.device("cuda"iftorch.cuda.is_available()else"cpu")# load sample imageraw_image=Image.open("docs/_static/merlion.png").convert("RGB")This example image showsMerlion park(source), a landmark in Singapore.Image CaptioningIn this example, we use the BLIP model to generate a caption for the image. To make inference even easier, we also associate each
pre-trained model with its preprocessors (transforms), accessed viaload_model_and_preprocess().importtorchfromlavis.modelsimportload_model_and_preprocessdevice=torch.device("cuda"iftorch.cuda.is_available()else"cpu")# loads BLIP caption base model, with finetuned checkpoints on MSCOCO captioning dataset.# this also loads the associated image processorsmodel,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 captionmodel.generate({"image":image})# ['a large fountain spewing water into the air']Visual question answering (VQA)BLIP model is able to answer free-form questions about images in natural language.
To access the VQA model, simply replace thenameandmodel_typearguments
passed toload_model_and_preprocess().fromlavis.modelsimportload_model_and_preprocessmodel,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']Unified Feature Extraction InterfaceLAVIS provides a unified interface to extract features from each architecture.
To extract features, we load the feature extractor variants of each model.
The multimodal feature can be used for multimodal classification.
The low-dimensional unimodal features can be used to compute cross-modal similarity.fromlavis.modelsimportload_model_and_preprocessmodel,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 tasksfeatures_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 featuresprint(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]])Load DatasetsLAVIS inherently supports a wide variety of common language-vision datasets by providingautomatic download toolsto help download and organize these datasets. After downloading, to load the datasets, use the following code:fromlavis.datasets.buildersimportdataset_zoodataset_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']After downloading the images, we can useload_dataset()to obtain the dataset.fromlavis.datasets.buildersimportload_datasetcoco_dataset=load_dataset("coco_caption")print(coco_dataset.keys())# dict_keys(['train', 'val', 'test'])print(len(coco_dataset["train"]))# 566747print(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}If you already host a local copy of the dataset, you can pass in thevis_pathargument to change the default location to load images.coco_dataset=load_dataset("coco_caption",vis_path=YOUR_LOCAL_PATH)Jupyter Notebook ExamplesSeeexamplesfor more inference examples, e.g. captioning, feature extraction, VQA, GradCam, zeros-shot classification.Resources and ToolsBenchmarks: seeBenchmarkfor instructions to evaluate and train supported models.Dataset Download and Browsing: seeDataset Downloadfor instructions and automatic tools on download common language-vision datasets.GUI Demo: to run the demo locally, runbash run_scripts/run_demo.shand then follow the instruction on the prompts to view in browser. A web demo is coming soon.DocumentationsFor more details and advanced usages, please refer todocumentation.Ethical and Responsible UseWe note that models in LAVIS provide no guarantees on their multimodal abilities; incorrect or biased predictions may be observed. In particular, the datasets and pretrained models utilized in LAVIS may contain socioeconomic biases which could result in misclassification and other unwanted behaviors such as offensive or inappropriate speech. We strongly recommend that users review the pre-trained models and overall system in LAVIS before practical adoption. We plan to improve the library by investigating and mitigating these potential biases and
inappropriate behaviors in the future.Technical Report and Citing LAVISYou can find more details in ourtechnical report.If you're using LAVIS in your research or applications, please cite using this 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}}Contact usIf you have any questions, comments or suggestions, please do not hesitate to contact us atlavis@salesforce.com.LicenseBSD 3-Clause License