社群計算機視覺課程文件

對比語言-影像預訓練(CLIP)

Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

對比語言-影像預訓練(CLIP)

簡介

CLIP是一種能夠透過自然語言監督來理解視覺概念的神經網路。它透過同時訓練一個文字編碼器和一個影像編碼器來運作,專注於一個涉及將字幕與相應影像匹配的預訓練任務。這種架構使得CLIP能夠無縫適應各種視覺分類基準。它只需接收要識別的視覺類別的名稱,就展示出類似於GPT-2和GPT-3模型中觀察到的“零樣本”學習能力。

對比預訓練

給定一批影像-文字對,CLIP計算該批次中所有可能的(影像,文字)候選對之間的密集餘弦相似度矩陣。其核心思想是最大化正確對(下圖中藍色所示)的相似度,並最小化不正確對(影像中灰色所示)的相似度。為此,他們優化了這些相似度分數上的對稱交叉熵損失。

CLIP contrastive pre-training 圖片來自OpenAI

簡單來說,我們希望影像與其對應字幕之間的相似度儘可能高,而影像與其他字幕之間的相似度應該很小。我們將此邏輯也應用於字幕,因此我們希望最大化字幕與其對應影像的相似度,並最小化與其他所有影像之間的相似度。

文字編碼器和影像編碼器

CLIP的設計特點是影像和文字各自擁有獨立的編碼器,這使得它們的選擇非常靈活。使用者可以將標準的影像編碼器(如Vision Transformer)替換為ResNet等替代方案,或者選擇不同的文字編碼器,從而增強適應性和實驗性。當然,如果更換其中一個編碼器,您將需要重新訓練模型,因為您的嵌入分佈會發生變化。

用例

CLIP可用於各種應用。以下是一些值得注意的用例:

  • 零樣本影像分類;
  • 相似度搜索;
  • 擴散模型條件化。

用法

對於實際應用,通常使用影像和預定義類別作為輸入。所提供的Python示例演示瞭如何使用transformers庫執行CLIP。在此示例中,我們希望對下圖進行零樣本分類,判斷是還是

A photo of cats

from PIL import Image
import requests

from transformers import CLIPProcessor, CLIPModel

model = CLIPModel.from_pretrained("openai/clip-vit-base-patch32")
processor = CLIPProcessor.from_pretrained("openai/clip-vit-base-patch32")

url = "http://images.cocodataset.org/val2017/000000039769.jpg"
image = Image.open(requests.get(url, stream=True).raw)

inputs = processor(
    text=["a photo of a cat", "a photo of a dog"],
    images=image,
    return_tensors="pt",
    padding=True,
)

outputs = model(**inputs)
logits_per_image = outputs.logits_per_image
probs = logits_per_image.softmax(dim=1)

執行此程式碼後,我們得到以下機率:

  • “a photo of a cat”(一張貓的照片):99.49%
  • “a photo of a dog”(一張狗的照片):0.51%

侷限性

儘管CLIP在零樣本分類方面表現出色,但它不太可能超越專門的、經過微調的模型。此外,它的泛化能力受到一定限制,特別是在涉及訓練期間未遇到的資料或示例的場景中。該論文還表明,CLIP的有效性和偏差受到類別選擇的影響,正如在使用Fairface資料集進行的測試中所展示的。在性別和種族分類中發現了顯著差異,性別準確率超過96%,種族準確率約為93%。

結論

總而言之,OpenAI的CLIP模型徹底改變了多模態領域。CLIP的獨特之處在於其零樣本學習能力,使其能夠將影像分類到其未明確訓練過的類別中。這種卓越的泛化能力源於其創新的訓練方法,即學習將影像與文字字幕進行匹配。

參考文獻

< > 在 GitHub 上更新

© . This site is unofficial and not affiliated with Hugging Face, Inc.