關於OpenAI CLIP你需要知道的一切

關於OpenAI CLIP你需要知道的一切

OpenAI 的 CLIP(對比語言-圖像預訓練)是一種學習將圖像及其文字描述關聯起來的模型。通過分析其工作原理和如何實現 CLIP,你將全面了解 OpenAI CLIP。

簡介

2021 年 1 月,OpenAI 推出了 CLIP(對比語言-圖像預訓練),這是一種零樣本分類器,它利用對英語的理解來對圖像進行分類,無需在特定數據集上進行訓練。該模型將 GPT-3 等大規模 Transformer 的最新進展應用於視覺領域。

結果令人印象深刻。我們準備了一份 CLIP 教程和一個 CLIP Colab 筆記本,供你在自己的圖像上嘗試該模型。

什麼是 OpenAI CLIP

CLIP(英文全稱 Contrastive Language-Image Pre-training,對比語言-圖像預訓練)是一種從自然語言監督中學習的有效方法。2011 年在論文《Learning Transferable Visual Models From Natural Language Supervision》中提出,CLIP 是一個聯合圖像和文本嵌入模型。

CLIP 以自監督方式在 4 億個圖像-文本對上進行訓練,將文本和圖像映射到相同的嵌入空間。例如,一張狗的圖片和句子 “一張狗的圖片” 將具有非常相似的嵌入,並在向量空間中彼此靠近。這一能力意義重大,因為它可以實現多種應用,例如用描述搜索圖像數據庫,或者反向操作。

CLIP 的表現

訓練效率:CLIP 是最高效的模型之一,在 4 億張圖像上達到了 41% 的準確率。在相同圖像數量下,它優於其他模型,如詞袋預測(27%)和 Transformer 語言模型(16%)。這表明 CLIP 的訓練速度遠快於該領域的其他模型。

泛化能力:CLIP 在多種多樣的圖像風格上進行了訓練,使其靈活性遠超 ImageNet 等模型。需要注意的是,CLIP 對訓練過的圖像泛化良好,但對訓練領域之外的圖像可能效果不佳。以下是一些不同圖像風格的示例:

CLIP 的工作原理

架構

CLIP 模型由兩個主要部分組成:文本編碼器和圖像編碼器。文本編碼器使用 Transformer,這是一種自 2017 年以來徹底改變 NLP 的架構,因此它的加入並不令人意外。如需出色的視覺化解釋,請參閱以下部落格。

對於圖像編碼器,作者實驗了兩種不同的模型:ResNet-50 和 Vision Transformer (ViT)。基於卷積神經網絡 (CNN) 的 ResNet-50 是圖像分類領域最初的先進架構。ViT 是 Transformer 在圖像上的較新改編,它將每張圖像分割成一系列圖塊,並將其視為一系列 token。作者發現 ViT 的訓練速度更快。

最大的 ResNet 模型 RN50x64 在 592 個 V100 GPU 上訓練了 18 天,而最大的 Vision Transformer 在 256 個 V100 GPU 上只訓練了 12 天。

文本編碼器和圖像編碼器都是從頭開始訓練的。

我們從頭訓練 CLIP,沒有使用 ImageNet 權重初始化圖像編碼器,也沒有使用預訓練權重初始化文本編碼器。

訓練

作者最初嘗試訓練一個圖像標題模型,該模型預測給定圖像的確切標題或描述。

我們最初的方法類似於 VirTex,從頭開始聯合訓練圖像 CNN 和文本 Transformer,以預測圖像的標題。然而,我們在有效擴展這種方法時遇到了困難。

然而,他們發現在 4 億個(圖像、文本)對上訓練圖像標題模型是不可擴展的。相反,他們選擇了一種對比表徵學習方法。該方法的目標是學習一個嵌入空間,其中相似的樣本對彼此接近,而不相似的樣本對相距很遠。

在典型的對比學習設定中,模型會獲得 (錨點, 正樣本, 負樣本) 形式的示例。這裡,錨點是一類圖像,例如狗;正樣本是同一類的另一張圖像(另一隻狗);負樣本是不同類的圖像,例如鳥。圖像被嵌入後,模型被訓練以最小化同類嵌入之間的距離(距離(錨點, 正樣本)),並最大化不同類嵌入之間的距離(距離(錨點, 負樣本))。這促使模型對相同的物體產生非常相似的嵌入,而對不同的物體產生明顯不同的嵌入。

對比學習的可視化。來源:https://www.v7labs.com/blog/contrastive-learning-guide

同樣的方法可以應用於文本,以及文本和圖像的組合。例如,在 CLIP 中,一個訓練樣本可以包含一個錨點(一張狗的圖片)、一個正樣本(標題 “一張狗的圖片”)和一個負樣本(標題 “一張鳥的圖片”)。

CLIP 使用多類別 N-pair 損失進一步推廣了這種方法,這是標準方法的一種擴展,涉及每個錨點的多個負樣本和正樣本。如論文所述:

給定一批 N 對 (圖像, 文本),CLIP 被訓練來預測批次中 N × N 個可能的 (圖像, 文本) 配對中哪些實際上發生了。為此,CLIP 通過聯合訓練圖像編碼器和文本編碼器來學習一個多模態嵌入空間,最大化批次中 N 個真實配對的圖像和文本嵌入之間的餘弦相似度,同時最小化 N² − N 個錯誤配對的嵌入之間的餘弦相似度。它在這些相似度分數上優化一個對稱的交叉熵損失。

提示工程與集成

隨著語言模型的興起,提示工程已成為從生成模型中獲得良好輸出的常見做法。考慮到 CLIP 中的文本編碼器是一個 Transformer 模型,作者發現提示工程對於獲得良好的零樣本性能至關重要。他們觀察到,在他們的預訓練數據集中,與圖像配對的文本是單個單詞(例如表示類別標籤的 “dog”)的情況相對少見。更常見的是,文本是一個完整的句子,例如圖像的標題或描述。因此,作者發現提示 “一張 {物體} 的照片” 是一個不錯的默認選擇,但在某些情況下,更專業的提示效果更好。例如,對於衛星圖像,“一張 {物體} 的衛星照片” 更有效。

作者還實驗了模型集成,這是一種將多個模型的預測組合起來產生最終輸出的技術。這種方法通常用於機器學習,以處理高方差和低偏差(過擬合)模型。對於 CLIP,集成是通過使用許多不同的提示來創建分類器而構建的。

提示工程和集成都顯著提高了 ImageNet 上的性能。

在 ImageNet 上,我們集成了 80 種不同的上下文提示,這比上面討論的單個默認提示提高了 3.5% 的額外性能。綜合考慮,提示工程和集成將 ImageNet 準確率提高了近 5%。

OpenAI CLIP 的應用

OpenAI CLIP 在圖像-文本分析中具有廣泛的應用和使用案例。CLIP 的一些關鍵應用和使用案例包括:

  • 圖像分類:CLIP 可以根據內容將圖像分類到不同的類別或類別中。它可以預測給定圖像最相關的類別標籤。
  • 圖像檢索:CLIP 可以根據給定的文本查詢檢索相關圖像。它可以找到與輸入文本語義相似的圖像。
  • 內容審核:CLIP 可用於自動檢測和審核圖像和文本中的不當或冒犯性內容。
  • 圖像標題生成:CLIP 可以根據圖像內容生成標題或描述。
  • 視覺問答:CLIP 可以根據圖像內容回答有關圖像的問題。

使用 Huggingface Transformers 實現 OpenAI CLIP

您可以使用 HuggingFace Transformers 庫,只需幾行代碼即可在本地機器上使用 CLIP!首先導入庫並加載預訓練模型。

import transformers

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

接下來,創建兩個列表:一個包含標題或描述,另一個包含圖像。圖像可以表示為 URL 或 PIL 圖像。

import PIL.Image

images = [PIL.Image(“for_example_a_dog_image.jpeg”)]
possible_classes = [“an image of a bird”, “an image of a dog”, “an image of a cat”]

調用處理器,它會對文本和圖像進行標記化,並準備好輸入模型。這個過程類似於標準的僅文本用例中調用 tokenizer。考慮到一批描述,會應用填充以確保它們具有相同長度以便存儲為張量,並使用截斷來限制任何長句子不超過最大序列長度(如前所述,為 76)。最後,將標記化的輸入傳遞給模型,模型再將它們送入文本和圖像編碼器。

with torch.no_grad():
inputs = processor(text=descriptions, images=images, return_tensors=“pt”, padding=True, truncation=True)
outputs = model(**inputs)

現在,我們可以使用兩個不同的函數來獲取點積矩陣。使用 logits\_per\_image 獲取形狀為 [num_of_images, num_of_text] 的點積矩陣,使用 logits\_per\_text 獲取形狀為 [num_of_text, num_of_images] 的矩陣。

dot_products_per_image = outputs.logits_per_image
dot_products_per_text = outputs.logits_per_text

最後,如果需要,我們可以對這些矩陣應用 softmax 函數,以獲得每張圖像的概率分佈。

probabilities = dot_products_per_image.softmax(dim=1)

使用 OpenAI CLIP 的限制

雖然論文探討了許多實驗和結果,但重要的是要認識到 CLIP 有幾個限制。

首先,由於前面提到的設計決策,CLIP 不是一個生成模型,無法執行圖像標題生成等任務。然而,其他生成式 AI 可以比 OpenAI CLIP 做更多的工作。例如:

novita.ai LLM 執行圖像標題生成

其他生成式 AI(如 novita.ai)可以通過應用相應的 API 來彌補 CLIP 的不足。

作者指出,CLIP 離最先進水平仍有差距,僅能與頂部加了線性層的 ResNet 相媲美。它在某些任務上泛化能力較差;例如,在簡單的 MNIST 手寫數字識別數據集上僅達到 88% 的準確率,這可能是因為其訓練數據中沒有類似的圖像,而 CLIP 在解決這個問題方面做得很少。

CLIP 是基於來自互聯網的未經過濾和整理的圖像-文本對訓練的,這導致模型學習了許多社會偏見。這些擔憂類似於當前大型語言模型 (LLM) 面臨的問題,而 RLFHF(穩健低頻攻擊框架)和直接偏好優化等技術試圖緩解這些問題。

此外,在原始實現中,Transformer 文本編碼器的最大序列長度被限制為 76。這種限制源於數據集主要由圖像和短標題組成。因此,使用現成的預訓練模型在處理較長文本時可能表現不佳,因為超過 76 個 token 的內容會被截斷,而該模型是用短文本訓練的。

使用 CLIP 進行圖像-文本分析的未來方向

OpenAI CLIP 的成功為圖像-文本分析的未來開闢了新的可能性。研究人員和開發人員正在不斷探索這一領域的創新應用和進展。

一個未來方向是將 CLIP 與其他模態(如音頻和視頻)集成,以實現多模態分析。這將使 CLIP 能夠理解和分析複雜的多媒體數據,從而獲得更全面、更準確的結果。

此外,自監督學習和無監督表徵學習的進展可以進一步增強 CLIP 的性能和泛化能力。這些進展可以在醫療保健、機器人和多媒體內容分析等多個領域釋放 CLIP 的新潛力。

使用 CLIP 進行圖像-文本分析的未來充滿希望,持續的研究和開發將不斷推動這一令人興奮領域的邊界。

結論

OpenAI 的 CLIP 標誌著圖像-文本分析領域的一次重大飛躍,它利用大規模 Transformer 和對比學習,基於自然語言描述對圖像進行分類。其多功能性使得許多創新應用成為可能,儘管它也面臨一些限制,例如在訓練領域之外的任務上表現不佳、文本序列長度上限以及從未經篩選的訓練數據中繼承的社會偏見。

提示工程和集成等技術已提高了其性能,而未來在整合其他模態(如音頻和視頻)以及自監督和無監督學習方面的進展,有望進一步增強 CLIP 的能力。該領域持續的研究和開發表明,更全面、更準確的多媒體分析前景光明。

novita.ai 是一個一站式平台,提供無限創意,讓您訪問 100 多個 API。從圖像生成、語言處理到音頻增強和視頻操作,採用廉價的按量付費模式,讓您擺脫 GPU 維護的煩惱,同時構建自己的產品。立即免費試用。

推薦閱讀

LLM 和 GPT 的區別是什麼

2024 年 LLM 排行榜預測揭曉

Novita AI LLM 推理引擎:最大吞吐量和最便宜的推理服務