Модели | Примеры скриптов | Начало работы | Обзор кода | Установка | Содействие | Лицензия
TorchMultimodal — это библиотека PyTorch для обучения современным мультимодальным многозадачным моделям в любом масштабе, включая как понимание контента, так и генеративные модели. TorchMultimodal содержит:
TorchMultimodal содержит ряд моделей, в том числе
Помимо вышеперечисленных моделей, мы предоставляем примеры скриптов для обучения, тонкой настройки и оценки моделей на популярных мультимодальных задачах. Примеры можно найти в разделе «примеры/» и включают в себя
Модель | Поддерживаемые задачи |
---|---|
АЛЬБЕФ | Поиск Визуальный ответ на вопрос |
ДДПМ | Обучение и вывод (тетрадь) |
ФЛАВА | Предварительная подготовка Тонкая настройка Нулевой выстрел |
МДЭТР | Фраза заземления Визуальный ответ на вопрос |
МУГЕН | Преобразование текста в видео Генерация текста в видео |
Всеядный | Предварительная подготовка Оценка |
Ниже мы приводим минимальные примеры того, как можно написать простой сценарий обучения или нулевой оценки с использованием компонентов 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 ()
диффузия_labs содержит компоненты для построения моделей диффузии. Более подробную информацию об этих компонентах см. в разделе диффузия_labs/README.md.
Здесь вы найдете классы моделей, а также любой другой код моделирования, специфичный для данной архитектуры. Например, каталог torchmultimodal/models/blip2 содержит компоненты моделирования, специфичные для BLIP-2.
Здесь вы найдете общие стандартные блоки, которые можно соединить вместе для создания новой архитектуры. Сюда входят такие слои, как кодовые книги, встраивание патчей или преобразовательные кодеры/декодеры, потери, такие как контрастные потери с температурой или потери при реконструкции, кодеры, такие как ViT и BERT, и модули слияния, такие как Deep Set fusion.
Здесь вы найдете распространенные преобразования данных из популярных моделей, например CLIP, FLAVA и MAE.
TorchMultimodal требует Python >= 3.8. Библиотеку можно установить с поддержкой CUDA или без нее. Ниже предполагается, что conda установлена.
Установить среду Конды
conda create -n torch-multimodal python=
conda activate torch-multimodal
Установите pytorch, torchvision и torchaudio. См. документацию 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
Двоичный файл Nightly в Linux для Python 3.8 и 3.9 можно установить с помощью pipwheels. На данный момент мы поддерживаем платформу Linux только через PyPI.
python -m pip install torchmultimodal-nightly
Кроме того, вы также можете выполнить сборку из нашего исходного кода и запустить наши примеры:
git clone --recursive https://github.com/facebookresearch/multimodal.git multimodal
cd multimodal
pip install -e .
Для разработчиков, пожалуйста, следуйте инструкциям по установке.
Мы приветствуем любые запросы функций, отчеты об ошибках или запросы на включение от сообщества. О том, как помочь, см. в файле CONTRIBUTING.
TorchMultimodal имеет лицензию BSD, как указано в файле LICENSE.