CoolFace
Modelpublic

apple/MobileCLIP-S2

sourceHugging Faceapple-amlrupdated 2y agoView on Hugging Face
17likes124downloads
Model Card

MobileCLIP: Fast Image-Text Models through Multi-Modal Reinforced Training

MobileCLIP was introduced in MobileCLIP: Fast Image-Text Models through Multi-Modal Reinforced Training (CVPR 2024), by Pavan Kumar Anasosalu Vasu, Hadi Pouransari, Fartash Faghri, Raviteja Vemulapalli, Oncel Tuzel.

This repository contains the MobileCLIP-S2 checkpoint.

[image]

Highlights

  • Our smallest variant MobileCLIP-S0 obtains similar zero-shot performance as OpenAI's ViT-B/16 model while being 4.8x faster and 2.8x smaller.
  • MobileCLIP-S2 obtains better avg zero-shot performance than SigLIP's ViT-B/16 model while being 2.3x faster and 2.1x smaller, and trained with 3x less seen samples.
  • MobileCLIP-B(LT) attains zero-shot ImageNet performance of 77.2% which is significantly better than recent works like DFN and SigLIP with similar architectures or even OpenAI's ViT-L/14@336.

Checkpoints

Model# Seen <BR>Samples (B)# Params (M) <BR> (img + txt)Latency (ms) <BR> (img + txt)IN-1k Zero-Shot <BR> Top-1 Acc. (%)Avg. Perf. (%) <BR> on 38 datasets
MobileCLIP-S01311.4 + 42.41.5 + 1.667.858.1
MobileCLIP-S11321.5 + 63.42.5 + 3.372.661.3
MobileCLIP-S21335.7 + 63.43.6 + 3.374.463.7
MobileCLIP-B1386.3 + 63.410.4 + 3.376.865.2
MobileCLIP-B (LT)3686.3 + 63.410.4 + 3.377.265.8

How to Use

First, download the desired checkpoint visiting one of the links in the table above, then click the Files and versions tab, and download the PyTorch checkpoint. For programmatic downloading, if you have huggingface_hub installed, you can also run:

huggingface-cli download pcuenq/MobileCLIP-S2

Then, install `ml-mobileclip` by following the instructions in the repo. It uses an API similar to `open_clip`'s. You can run inference with a code snippet like the following:

py
import torch
from PIL import Image
import mobileclip

model, _, preprocess = mobileclip.create_model_and_transforms('mobileclip_s2', pretrained='/path/to/mobileclip_s2.pt')
tokenizer = mobileclip.get_tokenizer('mobileclip_s2')

image = preprocess(Image.open("docs/fig_accuracy_latency.png").convert('RGB')).unsqueeze(0)
text = tokenizer(["a diagram", "a dog", "a cat"])

with torch.no_grad(), torch.cuda.amp.autocast():
    image_features = model.encode_image(image)
    text_features = model.encode_text(text)
    image_features /= image_features.norm(dim=-1, keepdim=True)
    text_features /= text_features.norm(dim=-1, keepdim=True)

    text_probs = (100.0 * image_features @ text_features.T).softmax(dim=-1)

print("Label probs:", text_probs)