Learning Transferable Visual Models From Natural Language Supervision (CLIP)
Metadane
- Autorzy: Alec Radford, Jong Wook Kim, Chris Hallacy, Aditya Ramesh, Gabriel Goh, Sandhini Agarwal, Girish Sastry, Amanda Askell, Pamela Mishkin, Jack Clark, Gretchen Krueger, Ilya Sutskever
- Rok: 2021
- Źródło: ICML 2021 (arXiv 2103.00020)
- DOI: arXiv:2103.00020
- Status: read
- Cytowania: ~30,000
- Kategoria: Computer Vision / NLP / Multimodal
- Tagi: clip contrastive-learning zero-shot multimodal vision-language openai icml high-citations foundational project:bank-brand-phishing-detection
Streszczenie
CLIP (Contrastive Language-Image Pretraining) trenuje visual encoder i text encoder wspólnie na 400 milionach par obraz-tekst z internetu, używając contrastive loss. Rezultat: przestrzeń wspólna image-text embedding gdzie podobne obrazy i teksty są blisko siebie.
Killer feature dla naszego projektu: zero-shot classification. Nowa marka = dodaj tekst "Revolut geometric logo black" do knowledge base. Nie trzeba trenować modelu. CLIP natychmiast potrafi dopasować logo Revolut do tej opisu — bez żadnych przykładów logo.
Kluczowe Wnioski
- Zero-shot ImageNet: 76.2% top-1 (bez fine-tuningu na ImageNet!)
- Kontrastywny trening: cos_sim(image_enc(x), text_enc(t)) → 1 dla par, → -1 dla niepasujących
- Robustność na dystrybucje: CLIP generaluje znacznie lepiej niż CNN trenowane na ImageNet
- Encoder opcje: ResNet-50/101, ViT-B/32, ViT-B/16, ViT-L/14 (najlepszy)
- Promptowanie:
"a photo of [brand] logo"vs"[brand] corporate logo"— prompt engineering istotny
Architektura i zastosowanie
import clip
model, preprocess = clip.load("ViT-B/32")
# Financial Brand Knowledge Base — zero-shot
brand_descriptions = [
"PayPal blue and white payment logo",
"Revolut geometric black and white logo",
"PKO BP blue Polish bank logo",
"Mastercard red and yellow circles logo",
# ... 150+ marek
]
text_tokens = clip.tokenize(brand_descriptions)
text_embeddings = model.encode_text(text_tokens) # pre-compute, store
# Inference: logo crop → match to brands
logo_crop = preprocess(logo_image)
image_embedding = model.encode_image(logo_crop.unsqueeze(0))
similarities = (image_embedding @ text_embeddings.T).softmax(dim=-1)
top_brand = brand_descriptions[similarities.argmax()]Adversarial robustness CLIP vs ResNet
CLIP jest znacznie trudniejszy do ataku niż triplet-ResNet:
- Atak musi jednocześnie fool visual encoder I semantic alignment z text encoder
- Przestrzeń perturbacji skutecznie mniejsza: logo musi wyglądać jak inna marka ZARÓWNO wizualnie jak i semantycznie
- Empirycznie: Zhao et al. 2023 pokazali że adversarial examples transferują się gorzej na CLIP niż ResNet
Wkład badawczy: “Po raz pierwszy pokazujemy, że CLIP-based brand matching jest naturalnie odporny na GAN adversarial logos (Lee 2023) i diffusion logos (Hao 2024) bez dodatkowego adversarial training.”
Metodologia
Trening kontrastywny na WIT (WebImageText) — 400M par (obraz, tekst alt-text) z internetu. Image encoder: ViT lub ResNet. Text encoder: Transformer. Loss: InfoNCE (softmax contrastive), temperatura t jako parametr uczony. Batch size: 32,768. Trening: 32 epochy, 256 GPU V100.
Główne Koncepcje
- Contrastive loss (InfoNCE): maksymalizacja cos_sim dla par, minimalizacja dla niepasujących w batchu
- Zero-shot transfer: klasyfikacja przez porównanie image embedding z text embeddingami klas
- Prompt engineering: “a photo of a [CLASS]” jako domyślny template; ensembling wielu promptów poprawia jakość
- WIT-400M: prywatny dataset OpenAI (otwarcie odtworzony jako MetaCLIP)
Wyniki
| Model | ImageNet 0-shot | ImageNet 0-shot w/ ensemble |
|---|---|---|
| ResNet-50 | 59.6% | 63.3% |
| ViT-B/32 | 63.4% | 66.6% |
| ViT-B/16 | 68.3% | 70.4% |
| ViT-L/14 | 75.3% | 76.2% |
| ViT-L/14@336 | 76.2% | 79.0% |
Przydatne Cytaty
- “CLIP is trained to predict which of the N × N possible (image, text) pairings across a batch actually occurred.” (Section 2)
- “CLIP matches the performance of the original ResNet-50 on ImageNet zero-shot without using any of the 1.28 million training examples.” (Abstract)
- “Natural language is used to reference learned visual concepts (or describe new ones) enabling zero-shot transfer of the model to downstream tasks.” (Abstract)
Datasety
- WIT-400M (prywatny, OpenAI) — odtworzony open-source jako MetaCLIP-400M (metaclip-400m.md)
Powiązane Tematy
- OpenCLIP (Cherti 2023) — open-source reimplementacja z LAION
- MetaCLIP (Xu 2023) — open-source odtworzenie WIT-400M
- SigLIP (Zhai 2023) — alternatywna funkcja straty (sigmoid vs softmax)
- LLM2CLIP (Wang 2024) — wzmocnienie text encodera przez LLM
- DINOv2 (Oquab 2023) — self-supervised alternatywa bez text supervision
- ViT (Dosovitskiy 2021) — CLIP używa ViT jako image encoder
- PhishIntention (Liu 2022) — używa ResNet+triplet → nasz system zastępuje CLIP
Notatki
CLIP to główna innowacja w module M2 odróżniająca nasz system od PhishIntention/KnowPhish. Uzasadnienie: (1) zero-shot coverage dla nowych marek fintech bez retrainingu, (2) naturalna odporność na visual adversarial attacks, (3) 30k cytowań = powszechnie znana metoda, nie wymaga szczegółowego opisu architektury — wystarczy referencja + opis zastosowania.