Streszczenie
OpenCLIP to otwarta reimplementacja CLIP (Radford 2021), która umożliwia systematyczne badanie praw skalowania dla contrastive learning. Autorzy trenują modele CLIP różnych rozmiarów (ViT-B/32 do ViT-G/14) na zbiorach LAION-400M i LAION-2B, dokumentując jak rozmiar modelu i ilość danych wpływają na jakość reprezentacji. W przeciwieństwie do oryginalnego CLIP (OpenAI, zamknięte wagi), wszystkie checkpointy OpenCLIP są publicznie dostępne.
Kluczowe odkrycie: modele CLIP trenowane na danych LAION wykazują przewidywalne prawa skalowania — zarówno dla zadań klasyfikacji zero-shot jak i retrieval. ViT-H/14 na LAION-2B osiąga 78.0% ImageNet zero-shot top-1 i 73.4% MS-COCO R@5, przewyższając oryginalne ViT-L/14 OpenAI (75.3%, 65.1%). Dla zadań retrieval (bliższych logo matching niż klasyfikacja) modele LAION skalują się szczególnie dobrze.
OpenCLIP jest używany w wielu downstream systemach: PhishIntention, KnowPhish, LogoSENSE. Jako open-source stanowi podstawę dla fine-tuningu na domenowych zadaniach (np. logo matching dla brand protection). Repozytoria checkpointów dostępne przez HuggingFace Hub.
Kluczowe Wnioski
- ViT-H/14 LAION-2B: 78.0% ImageNet zero-shot (vs 75.3% oryginalny CLIP ViT-L/14)
- Retrieval MS-COCO R@5: H/14 = 73.4% vs L/14 = 71.1% (+2.3pp) — istotne dla logo matching
- Prawa skalowania są przewidywalne: log-liniowa zależność między compute a jakością
- LAION-2B (2.32B par) > LAION-400M przy tym samym rozmiarze modelu
- Wszystkie wagi open-source:
open_clip.create_model_and_transforms("ViT-H-14", pretrained="laion2b_s32b_b79k") - Modele skalują się lepiej na retrieval niż klasyfikację przy wzroście rozmiaru
Metodologia
Systematyczna ewaluacja: trenowanie ViT-{B/32, B/16, L/14, H/14, G/14} na LAION-{400M, 2B} z identycznymi hiperparametrami poza rozmiarem modelu. Pomiar na 38 benchmarkach zero-shot, w tym ImageNet warianty (IN-V2, IN-R, IN-Sketch, ObjectNet) i COCO/Flickr retrieval. Analiza compute-optimal frontier — dla danego budżetu FLOPs jaki model/dane daje najlepszy wynik.
Główne Koncepcje
- Contrastive loss: CLIP minimalizuje odległość embeddingów dopasowanych par (obraz, tekst) i maksymalizuje dla niedopasowanych; OpenCLIP używa identycznej funkcji straty
- LAION-400M / LAION-2B: otwarte zbiory par obraz-tekst z internetu, filtrowane przez CLIP ViT-B/32 (CLIP filtering — samoreferencyjne!)
- Scaling laws: empiryczne prawa opisujące jak jakość rośnie z compute/danymi/parametrami
- Retrieval R@k: odsetek zapytań gdzie właściwy obraz jest w top-k — bezpośrednio odpowiada Recall@k w naszym logo matching
Wyniki
| Model | Dane | ImageNet | COCO R@5 |
|---|---|---|---|
| ViT-B/32 | LAION-400M | 62.9% | 59.4% |
| ViT-L/14 | LAION-400M | 72.8% | 68.4% |
| ViT-L/14 | LAION-2B | 75.3% | 71.1% |
| ViT-H/14 | LAION-2B | 78.0% | 73.4% |
| ViT-G/14 | LAION-2B | 80.1% | 74.9% |
Przydatne Cytaty
- “We find that CLIP models follow similar scaling laws as those seen in language models, and demonstrate that compute-optimal models improve both zero-shot transfer and linear probe performance.” (Abstract)
- “We release all model weights, training code, and evaluation code at https://github.com/mlfoundations/open_clip” (Introduction)
- “OpenCLIP models trained on LAION-2B exhibit strong scaling behavior for retrieval tasks, outperforming OpenAI’s ViT-L/14 on MS-COCO retrieval by a significant margin.” (Section 4)
Datasety
- LAION-400M — 407M par obraz-tekst (trening i ewaluacja)
- LAION-2B — 2.32B par obraz-tekst (trening)
Powiązane Tematy
- CLIP (Radford 2021) — oryginalny model, OpenCLIP jest jego otwartą reimplementacją
- SigLIP (Zhai 2023) — alternatywna funkcja straty (sigmoid vs softmax)
- EVA-CLIP (Sun 2023) — dalsze skalowanie z MIM pre-training
- DINOv2 (Oquab 2023) — self-supervised alternatywa bez text supervision
- LogoSENSE (Bozkir 2023) — downstream logo detection używający OpenCLIP embeddingów
Notatki
Kluczowy dla EXP-2b: porównanie ViT-B/32 (nasz baseline) z L/14 i H/14 na logo matching. Modele dostępne przez open_clip package. Dla EXP-2b: załadować L/14 i H/14 checkpoint z LAION-2B i powtórzyć pipeline eval_clip.py.