--- license: apache-2.0 ---

UForm

Multi-Modal Inference Library
For Semantic Search Applications

--- UForm is a Multi-Modal Modal Inference package, designed to encode Multi-Lingual Texts, Images, and, soon, Audio, Video, and Documents, into a shared vector space! It extends the `transfromers` package to support Mid-fusion Models. This is model card of __English only model__ with: * 4 layers BERT (2 layers for unimodal encoding and rest layers for multimodal encoding) * ViT-B/16 (image resolution is 224x224) If you need multilingual model, check [this](https://huggingface.co/unum-cloud/uform-vl-multilingual). ## Installation ```bash pip install uform ``` ## Usage To load the model: ```python import uform model = uform.get_model('unum-cloud/uform-vl-english') ``` To encode data: ```python from PIL import Image text = 'a small red panda in a zoo' image = Image.open('red_panda.jpg') image_data = model.preprocess_image(image) text_data = model.preprocess_text(text) image_embedding = model.encode_image(image_data) text_embedding = model.encode_text(text_data) joint_embedding = model.encode_multimodal(image=image_data, text=text_data) ``` To get features: ```python image_features, image_embedding = model.encode_image(image_data, return_features=True) text_features, text_embedding = model.encode_text(text_data, return_features=True) ``` These features can later be used to produce joint multimodal encodings faster, as the first layers of the transformer can be skipped: ```python joint_embedding = model.encode_multimodal( image_features=image_features, text_features=text_features, attention_mask=text_data['attention_mask'] ) ``` There are two options to calculate semantic compatibility between an image and a text: [Cosine Similarity](#cosine-similarity) and [Matching Score](#matching-score). ### Cosine Similarity ```python import torch.nn.functional as F similarity = F.cosine_similarity(image_embedding, text_embedding) ``` The `similarity` will belong to the `[-1, 1]` range, `1` meaning the absolute match. __Pros__: - Computationally cheap. - Only unimodal embeddings are required, unimodal encoding is faster than joint encoding. - Suitable for retrieval in large collections. __Cons__: - Takes into account only coarse-grained features. ### Matching Score Unlike cosine similarity, unimodal embedding are not enough. Joint embedding will be needed and the resulting `score` will belong to the `[0, 1]` range, `1` meaning the absolute match. ```python score = model.get_matching_scores(joint_embedding) ``` __Pros__: - Joint embedding captures fine-grained features. - Suitable for re-ranking - sorting retrieval result. __Cons__: - Resource-intensive. - Not suitable for retrieval in large collections.