CLIP(Contrastive Language-Image Pretraining) 是由 OpenAI 提出的一個多模態模型,旨在學習視覺和語言的聯合表示,能夠通過圖像和文本之間的對比學習來實現圖像和文本之間的緊密聯系。CLIP 模型可以通過自然語言描述理解和處理圖像,解決了傳統視覺模型無法直接處理文本描述的問題。它將視覺信息和語言信息結合在一個共享的潛在空間中,使得模型能夠進行跨模態的檢索、生成和理解。
論文原文:Learning Transferable Visual Models From Natural Language Supervision
1. CLIP模型結構
????????CLIP 的關鍵思想是通過訓練兩個編碼器(圖像和文本編碼器)使得相對應的圖像和文本在同一潛在空間中盡可能接近,而不相關的圖像和文本盡可能遠離。文本經過Text Encoder得到文本的向量表示,圖片經過Image Encoder得到圖片的向量表示,分別通過線性投射層,投射到共同的多模態線性空間里,即一個共享的公共子空間,在這個線性空間里面, 通過對比學習的方法,最大化正確圖像-文本對在該子空間內的相似度,并最小化錯誤圖像-文本對的相似度,從而優化出一個能夠有效捕捉跨模態語義關系的公共子空間。拉近配對文本的圖片和向量,而讓不配對的文本和圖片向量盡可能地遠。CLIP 是一個基于對比學習的框架,通常包括以下兩部分:
- 圖像編碼器(Image Encoder):圖像編碼器通常使用卷積神經網絡(CNN)或視覺Transformer(ViT)作為基礎網絡架構,負責提取圖像的特征表示。圖像編碼器的輸出是圖像的潛在空間表示。
- 文本編碼器(Text Encoder):文本編碼器通常使用Transformer架構,負責將文本(如描述圖像的自然語言)轉換為相應的潛在表示。文本編碼器的輸出是文本的潛在空間表示。
????????CLIP 一個最重要的能力就是可以實現 zero-shot 分類,在之前的分類模型中(如ResNet),訓練1000個類別,預測就是這1000個類別的概率,無法拓展,新增類別還得重新訓練重新標注太麻煩了。CLIP就把圖像數據做成預訓練模型,直接實現零樣本分類,有新的類別來了,也不需要進行再次訓練,利用文本的監督信號訓練一個遷移能力強的視覺模型。具體步驟如下:
- 加載模型和準備數據:加載預訓練的 CLIP 模型的圖像和文本特征編碼器,準備要分類的圖像和自然語言描述的類別標簽,如 A photo of a {object}(將其中的 object 替換成所有的類別標簽,如 dog)。
- 編碼圖像和文本:使用 CLIP 模型的圖像和文本特征編碼器將圖像和標簽文本編碼為向量。
- 計算相似度并分類:計算圖像向量與所有標簽文本嵌入之間的余弦相似度,選擇相似度最高的標簽作為結果。
?2. 訓練過程
????????CLIP 的訓練目標是最大化圖像和文本對之間的相似性,同時最小化不相關的圖像和文本對之間的相似性。為了實現這一目標,CLIP使用了對比損失(Contrastive Loss),具體來說,它通過以下方式進行訓練:
- 對于每一對圖像和文本(例如,圖像及其描述,利用prompt進行零樣本訓練),CLIP模型計算圖像編碼器和文本編碼器輸出的向量之間的余弦相似度。
- 在訓練過程中,CLIP通過最大化正確圖像和文本對之間的相似性(即正確圖像和其描述的文本)來優化模型。
- 訓練時,CLIP將來自不同圖像和文本的相似度進行對比,確保相似的圖像-文本對在潛在空間中接近,而不相關的圖像-文本對則被拉遠。
? ? ? ? 假設一個批次中有64個文本圖像對,此時我們會同時獲得64個圖片和64個文本,首先我們從64個文本圖像對中取出一個文本圖像對,成對的文本圖像對是天然的正樣本,它們是配對的。而對于這個樣本的文本來講,其它63個圖像都為負樣本,它們是不配對的;而對于這個樣本的圖像來講,其它63個文本都為負樣本,它們是不配對的。在這個批次中,64個文本圖像對,可以獲得的圖像embedding和文本embedding為:
visual_embedding ?? ?[64, embedding_size]
text_embedding?? ??? ?[64, embedding_size]
????????我們使用visual_embedding 叉乘 text_embedding,得到一個[64, 64]的矩陣,那么對角線上的值便是成對特征內積得到的,如果visual_embedding和對應的text_embedding越相似,那么它的值便越大。我們選取[64, 64]矩陣中的第一行,代表第1個圖片與64個文本的相似程度,其中第1個文本是正樣本,我們將這一行的標簽設置為1,那么我們就可以使用交叉熵進行訓練,盡量把第1個圖片和第一個文本的內積變得更大,那么它們就越相似。每一行都做同樣的工作,那么[64, 64]的矩陣,它的標簽就是[1,2,3,4,5,6……,64],在計算機中,標簽從0開始,所以實際標簽為[0,1,2,3,4,5……,63]。這樣的一種學習方式也是一種無監督學習方法——對比學習,通過構造正負樣本對來學習數據的有效表示。正樣本對是圖像和它的文本描述,而負樣本對是任意不相關的圖像和文本。模型通過計算圖像和文本的相似性來訓練,學習如何將視覺和語言信息映射到一個共同的潛在空間中。
? ? ? ? 在CLIP模型訓練,batchsize設置為32768,由于CLIP的數據量足夠大,圖片編碼器和文本編碼器都沒有進行預訓練,圖片唯一做的數據增強就是隨即裁剪。
3. 模型推理過程?
????????CLIP在圖像分類中并不依賴固定的標簽集,而是可以接受任意文字描述作為標簽,從而實現開放標簽分類。模型可以根據輸入的文本描述對圖像進行分類,這在現實應用中更具靈活性,也更符合人類的推理習慣。在推理時,首先輸入一句話進行文本encoder編碼,然后把文本embedding之后進行圖片映射。
????????給定一張圖片,如何利用預訓練好的網絡去做分類呢?給網絡一堆分類標簽,比如cat, dog, bird,利用文本編碼器得到向量表示。然后分別計算這些標簽與圖片的余弦相似度;最終相似度最高的標簽即是預測的分類結果。但相比于單純地給定分類標簽,給定一個句子的分類效果更好,這也就是prompt engineering,如一種句子模板?A photo of a ...
,后面填入分類標簽。這種句子模板叫做提示prompt。預訓練時模型看到的大多是句子,如果在推理時突然變成單詞,效果肯定會下降。
? ? ? ? 在推理過程中,從前的分類網絡類別數量是固定的,最后一層是跟著 softmax 的全連接層進行不同類別的概率預測;如果要更改類別數量,就要更換最后一層,并且預測的內容是固定的,不能超過訓練集的類別范圍。但對于 CLIP 來說,提供給網絡的分類標簽不僅數量不固定,內容也是自由的。如果提供兩個標簽,那就是一個二分類;如果提供1000個標簽,那就是1000分類問題。標簽內容可以是常規的分類標簽,也可以是一些冷門的分類標簽,擺脫了事先定好的分類標簽。
????????CLIP 在 16 個數據集上優于 ResNet50,但在衛星圖像分類、淋巴轉移檢測和合成場景計數等復雜任務中表現較差。這表明 CLIP 預訓練的特征編碼器并不能在所有任務中都表現出色,特別是在與訓練數據分布差異較大的領域仍有明顯不足。
總結
CLIP 是一個非常強大的多模態學習模型,通過對比學習方法將圖像和文本映射到一個共享的潛在空間中,能夠在無需特定訓練的情況下進行跨模態檢索、生成和理解。其跨領域的能力使得它在許多視覺和語言任務中都能表現出色,具有廣泛的應用前景。
參考資料:
大模型技術之 CLIP (Contrastive Language-Image Pre-training) 簡介 - 知乎?
多模態模型學習1——CLIP對比學習 語言-圖像預訓練模型_clip模型-CSDN博客
多模態模型之CLIP詳解 - 知乎
跟李沐讀論文系列——CLIP - 知乎