CLIP(Contrastive Language–Image Pretraining)是 OpenAI 開發的一種多模態模型,它將圖像和文本嵌入到同一向量空間,從而實現了多樣化的應用場景。CLIP 的核心思想是通過對比學習(contrastive learning)方法,在預訓練階段學習到圖像和文本之間的關聯性。具體來說,CLIP 使用一個文本編碼器(如 Transformer)和一個圖像編碼器(如 Vision Transformer 或 ResNet),分別將文本和圖像轉換為嵌入向量,並通過計算兩者的餘弦相似度進行匹配。
CLIP 支持的應用包括圖文檢索、零樣本分類和圖像描述生成等。例如,通過輸入一張圖片和多段文本描述,CLIP 可以識別哪段文字最符合該圖片。與傳統方法不同,CLIP 不需要為特定任務進行訓練,僅依靠預訓練即可實現高效的跨模態理解。這使其成為處理多模態數據的強大工具。
transformers
是由 Hugging Face 提供的 Python 庫,專注於自然語言處理(NLP)和多模態處理(如圖文結合)的預訓練模型。該庫支持多種模型架構,如 BERT、GPT、CLIP 等,並提供簡單的接口來下載、使用和微調這些模型。因此使用方法就是調用 openai 放在Hugging Face上的clip 權重即可執行,第一次執行載入模型會下載clip 主模型,之後就能在本地端直接使用
Step1:安裝環境
- pip install transformers torch
Step2:載入模型與處理器
- .
from transformers import CLIPProcessor, CLIPModel
# 載入 CLIP 模型與處理器
model = CLIPModel.from_pretrained("openai/clip-vit-base-patch32")
processor = CLIPProcessor.from_pretrained("openai/clip-vit-base-patch32") - 模型選擇
- openai/clip-vit-base-patch32
- openai/clip-vit-large-patch14
- openai/clip-vit-base-patch16
- openai/clip-vit-large-patch14–336
- patrickjohncyh/fashion-clip
- laion/CLIP-ViT-H-14-laion2B-s32B-b79K
- laion/CLIP-ViT-B-32-laion2B-s34B-b79K
- CIDAS/clipseg-rd64-refined
- flaviagiammarino/pubmed-clip-vit-base-patch32
- laion/CLIP-ViT-L-14-DataComp.XL-s13B-b90K
- 模型放置地點
- ls ~/.cache/huggingface/hub/
- .
Step3: 處理數據
- 數據的形式可以是單個也可以是一個 list 的形式
- .
from PIL import Image
# 加載圖像
image = Image.open("example.jpg")
# 定義文字描述
text = ["A cat on a sofa", "A dog in the park"]
inputs = processor(images=image, text=text, return_tensors="pt", padding=True)
Step4: 輸入模型得到模型輸出
- .
outputs = model(**inputs)
- outputs
- ‘image_embeds’→輸出是一個N*512的向量,看圖片輸入幾張輸出就有幾維
- ‘text_embeds’→輸出是一個N*512的向量,看text輸入幾段輸出就有幾維
- ‘logits_per_image’→分別對應到每一張影像所對應的text的相近程度,矩陣中的每個值 \(\text{logits}[i][j]\) 代表第 \(i\) 張圖片與第 \(j\) 段文字之間的相似性分數
- ‘logits_per_text’→分別對應到每一段文字所對應的圖片相近程度,矩陣中的每個值 \(\text{logits}[i][j]\) 代表第 \(i\) 段文字與第 \(j\) 張圖片之間的相似性分數
- .
參考資料
跨越文本與圖像的橋樑:深入解析 CLIP 模型
Subscribe
Login
0 Comments
Oldest