Modelos | Guiones de ejemplo | Empezando | Descripción general del código | Instalación | Contribuyendo | Licencia
TorchMultimodal es una biblioteca de PyTorch para entrenar modelos multimodales multitarea de última generación a escala, que incluyen tanto la comprensión del contenido como los modelos generativos. TorchMultimodal contiene:
TorchMultimodal contiene varios modelos, incluidos
Además de los modelos anteriores, proporcionamos scripts de ejemplo para entrenar, ajustar y evaluar modelos en tareas multimodales populares. Los ejemplos se pueden encontrar en ejemplos/ e incluyen
Modelo | Tareas admitidas |
---|---|
ALBEF | Recuperación Respuesta visual a preguntas |
DDPM | Entrenamiento e Inferencia (cuaderno) |
flava | Preentrenamiento Sintonia FINA Tiro cero |
MDETR | puesta a tierra de frase Respuesta visual a preguntas |
MUGEN | Recuperación de texto a video Generación de texto a video |
Omnívoro | Pre-entrenamiento Evaluación |
A continuación, brindamos ejemplos mínimos de cómo se puede escribir un script de capacitación simple o de evaluación de disparo cero utilizando componentes de TorchMultimodal.
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 contiene componentes para construir modelos de difusión. Para obtener más detalles sobre estos componentes, consulte diffusion_labs/README.md.
Busque aquí clases de modelo, así como cualquier otro código de modelado específico de una arquitectura determinada. Por ejemplo, el directorio torchmultimodal/models/blip2 contiene componentes de modelado específicos de BLIP-2.
Busque aquí los bloques de construcción genéricos comunes que se pueden unir para construir una nueva arquitectura. Esto incluye capas como libros de códigos, incrustaciones de parches o codificadores/decodificadores de transformadores, pérdidas como pérdida de contraste con temperatura o pérdida de reconstrucción, codificadores como ViT y BERT, y módulos de fusión como Deep Set Fusion.
Busque aquí transformaciones de datos comunes de modelos populares, por ejemplo, CLIP, FLAVA y MAE.
TorchMultimodal requiere Python >= 3.8. La biblioteca se puede instalar con o sin soporte CUDA. Lo siguiente supone que conda está instalado.
Instalar el entorno conda
conda create -n torch-multimodal python=
conda activate torch-multimodal
Instale pytorch, torchvision y torchaudio. Consulte la documentación de PyTorch.
# 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
El binario nocturno en Linux para Python 3.8 y 3.9 se puede instalar mediante pip wheels. Por ahora solo admitimos la plataforma Linux a través de PyPI.
python -m pip install torchmultimodal-nightly
Alternativamente, también puedes construir desde nuestro código fuente y ejecutar nuestros ejemplos:
git clone --recursive https://github.com/facebookresearch/multimodal.git multimodal
cd multimodal
pip install -e .
Para desarrolladores, siga la instalación de desarrollo.
Damos la bienvenida a cualquier solicitud de función, informe de errores o solicitud de extracción de la comunidad. Consulte el archivo CONTRIBUCIÓN para saber cómo ayudar.
TorchMultimodal tiene licencia BSD, como se encuentra en el archivo LICENCIA.