Modelle | Beispielskripte | Erste Schritte | Codeübersicht | Installation | Mitwirken | Lizenz
TorchMultimodal ist eine PyTorch-Bibliothek zum Trainieren modernster multimodaler Multitask-Modelle im großen Maßstab, einschließlich Inhaltsverständnis und generativer Modelle. TorchMultimodal enthält:
TorchMultimodal enthält eine Reihe von Modellen, darunter
Zusätzlich zu den oben genannten Modellen stellen wir Beispielskripte für das Training, die Feinabstimmung und die Bewertung von Modellen für beliebte multimodale Aufgaben bereit. Beispiele finden Sie unter examples/ und include
Modell | Unterstützte Aufgaben |
---|---|
ALBEF | Abruf Visuelle Beantwortung von Fragen |
DDPM | Training und Inferenz (Notizbuch) |
FLAVA | Vorschulung Feinabstimmung Nullschuss |
MDETR | Phrasenerdung Visuelle Beantwortung von Fragen |
MUGEN | Text-zu-Video-Abruf Text-zu-Video-Generierung |
Omnivore | Vorschulung Auswertung |
Im Folgenden geben wir minimale Beispiele dafür, wie Sie mit Komponenten von TorchMultimodal ein einfaches Trainings- oder Zero-Shot-Bewertungsskript schreiben können.
import torch
from PIL import Image
from torchmultimodal . models . flava . model import flava_model
from torchmultimodal . transforms . bert_text_transform import BertTextTransform
from torchmultimodal . transforms . flava_transform import FLAVAImageTransform
# Define helper function for zero-shot prediction
def predict ( zero_shot_model , image , labels ):
zero_shot_model . eval ()
with torch . no_grad ():
image = image_transform ( img )[ "image" ]. unsqueeze ( 0 )
texts = text_transform ( labels )
_ , image_features = zero_shot_model . encode_image ( image , projection = True )
_ , text_features = zero_shot_model . encode_text ( texts , projection = True )
scores = image_features @ text_features . t ()
probs = torch . nn . Softmax ( dim = - 1 )( scores )
label = labels [ torch . argmax ( probs )]
print (
"Label probabilities: " ,
{ labels [ i ]: probs [:, i ] for i in range ( len ( labels ))},
)
print ( f"Predicted label: { label } " )
image_transform = FLAVAImageTransform ( is_train = False )
text_transform = BertTextTransform ()
zero_shot_model = flava_model ( pretrained = True )
img = Image . open ( "my_image.jpg" ) # point to your own image
predict ( zero_shot_model , img , [ "dog" , "cat" , "house" ])
# Example output:
# Label probabilities: {'dog': tensor([0.80590]), 'cat': tensor([0.0971]), 'house': tensor([0.0970])}
# Predicted label: dog
import torch
from torch . utils . data import DataLoader
from torchmultimodal . models . masked_auto_encoder . model import vit_l_16_image_mae
from torchmultimodal . models . masked_auto_encoder . utils import (
CosineWithWarmupAndLRScaling ,
)
from torchmultimodal . modules . losses . reconstruction_loss import ReconstructionLoss
from torchmultimodal . transforms . mae_transform import ImagePretrainTransform
mae_transform = ImagePretrainTransform ()
dataset = MyDatasetClass ( transforms = mae_transform ) # you should define this
dataloader = DataLoader ( dataset , batch_size = 8 )
# Instantiate model and loss
mae_model = vit_l_16_image_mae ()
mae_loss = ReconstructionLoss ()
# Define optimizer and lr scheduler
optimizer = torch . optim . AdamW ( mae_model . parameters ())
lr_scheduler = CosineWithWarmupAndLRScaling (
optimizer , max_iters = 1000 , warmup_iters = 100 # you should set these
)
# Train one epoch
for batch in dataloader :
model_out = mae_model ( batch [ "images" ])
loss = mae_loss ( model_out . decoder_pred , model_out . label_patches , model_out . mask )
loss . backward ()
optimizer . step ()
lr_scheduler . step ()
diffusion_labs enthält Komponenten zum Erstellen von Diffusionsmodellen. Weitere Einzelheiten zu diesen Komponenten finden Sie unter diffusion_labs/README.md.
Suchen Sie hier nach Modellklassen sowie nach anderem Modellierungscode, der für eine bestimmte Architektur spezifisch ist. Beispielsweise enthält das Verzeichnis Torchmultimodal/models/blip2 für BLIP-2 spezifische Modellierungskomponenten.
Suchen Sie hier nach allgemeinen generischen Bausteinen, die zu einer neuen Architektur zusammengefügt werden können. Dazu gehören Schichten wie Codebücher, Patch-Einbettungen oder Transformator-Encoder/Decoder, Verluste wie Kontrastverlust mit Temperatur oder Rekonstruktionsverlust, Encoder wie ViT und BERT sowie Fusionsmodule wie Deep Set Fusion.
Suchen Sie hier nach gängigen Datentransformationen beliebter Modelle, z. B. CLIP, FLAVA und MAE.
TorchMultimodal erfordert Python >= 3.8. Die Bibliothek kann mit oder ohne CUDA-Unterstützung installiert werden. Im Folgenden wird davon ausgegangen, dass Conda installiert ist.
Installieren Sie die Conda-Umgebung
conda create -n torch-multimodal python=
conda activate torch-multimodal
Installieren Sie Pytorch, Torchvision und Torchaudio. Siehe PyTorch-Dokumentation.
# Use the current CUDA version as seen [here](https://pytorch.org/get-started/locally/)
# Select the nightly Pytorch build, Linux as the OS, and conda. Pick the most recent CUDA version.
conda install pytorch torchvision torchaudio pytorch-cuda= -c pytorch-nightly -c nvidia
# For CPU-only install
conda install pytorch torchvision torchaudio cpuonly -c pytorch-nightly
Nightly Binary unter Linux für Python 3.8 und 3.9 kann über Pip Wheels installiert werden. Derzeit unterstützen wir die Linux-Plattform nur über PyPI.
python -m pip install torchmultimodal-nightly
Alternativ können Sie auch aus unserem Quellcode erstellen und unsere Beispiele ausführen:
git clone --recursive https://github.com/facebookresearch/multimodal.git multimodal
cd multimodal
pip install -e .
Für Entwickler folgen Sie bitte der Entwicklungsinstallation.
Wir freuen uns über alle Funktionsanfragen, Fehlerberichte oder Pull-Anfragen der Community. Wie Sie helfen können, finden Sie in der Datei CONTRIBUTING.
TorchMultimodal ist BSD-lizenziert, wie in der LICENSE-Datei zu finden.