如何使用MetaCLIP?

如何使用MetaCLIP?

人工智慧一直在不斷髮展,而 Open AI 的 CLIP 因其效能和架構而一直是一項突出的技術。該模型還擁有多模態能力,使其能夠推動 OWL-ViT 和 DALL-E 等其他模型的發展。Facebook 的研究人員利用 CLIP 資料整理概念建立了 MetaCLIP。該模型對 MetaAI 進行了升級,納入了零鏡頭影象分的各種特徵。與 CLIP 相比,它還使資料整理過程更加透明。 因此,讓我們來討論一下該模型在零鏡頭分類和其他特徵(如影象相似性)方面的工作原理。我們還將強調與 CLIP 相比,MetaCLIP 的動態和效能。

學習目標

  • 瞭解 MetaCLIP 在 CLIP 架構的基礎上向前邁進了一步。
  • 瞭解 MetaCLIP 的效能基準。
  • 深入瞭解該模型的架構。
  • 在 MetaCLIP 上執行推理,進行零鏡頭影象分類和影象相似性檢查。
  • 強調 MetaCLIP 的侷限性和一些實際應用。

什麼是MetaCLIP?

MetaAI 開發了 MetaCLIP,該模型採用了一種全新的語言影象預訓練方法。它以資料整理為重點來執行任務,擁有超過 4 億個影象-文字對,該模型以極高的準確率提供了出色的研究成果。

該模型利用“揭開 CLIP 資料的神祕面紗”一文中介紹的 CLIP 概念,從後設資料中獲取資料。MetaCLIP 還具有各種應用功能。該模型允許您根據形狀、顏色等特徵對影象進行聚類。您還可以對兩幅影象進行比較,並將文字與影象進行匹配。

瞭解MetaCLIP:比CLIP更進一步

要理解 MetaCLIP 的特殊性,您需要了解 CLIP 發展的基本要素。首先,CLIP 是一個傑出的模型,因為它將零鏡頭分類引入了計算機視覺領域。但這一模型的一個引人入勝之處在於,其基礎和結構來自於其精細的資料整理過程。

然而,CLIP 的資料來源無法訪問,這使得資料整理過程充滿了不確定性。這就是 MetaCLIP 介入的原因,它提供了一種使用後設資料但藉助 CLIP 概念的更可行的方法。不過,MetaCLIP 改進並共享了資料收集過程。

效能基準

與 CLIP 的資料相比,MetaCLIP 在各種基準測試中提供的資料更加精確,資料來源和流程更加完善。例如,在一個包含 4 億個影象-文字對的資料集上,該模型的零鏡頭分類準確率達到了 70%。這一數字略微超過 CLIP,達到 68%。

當擴充套件到 10 億個資料點時,準確率甚至提高到 72%。在不同規模的 VT 模型上,MetaCLIP 的準確率甚至高達 80%。

模型架構

如前所述,該模型(CLIP)的基礎是資料集而不是架構。但由於關於 CLIP 資料來源的資訊很少,MetaCLIP 決定採用後設資料策劃資料集的方法,其原則如下;

  • 研究人員使用了一個全新的資料集,其中包含來自不同線上資料庫的超過 4 億個文字-圖片對。
  • MetaCLIP 還確保後設資料文字條目具有連結,並與其對應的文字內容具有清晰的對映關係。
  • 後設資料還為資料整理過程建立了正式演算法,以提高可擴充套件性並降低空間複雜性。
  • 該模型還使用了一種特定的匹配技術來彌合非結構化文字和結構化後設資料之間的差距。
  • 利用清晰的地圖和文字內容,還為每個條目新增了主題。這有助於確保資料分佈均衡,並可進行預訓練。

CLIP架構

Source: HuggingFace

如何使用MetaCLIP?

MetaCLIP 在各種任務中表現出色,從零鏡頭影象分類到影象相似性檢測。雖然該模型還有其他使用方法,包括影象檢索(提示)和聚類,但我們將重點介紹零鏡頭影象分類。

步驟 1:匯入必要的庫

本程式碼從 transformers 庫中匯入管道函式,該函式用於將預先訓練好的模型應用於各種人工智慧任務。它還從 PIL (Pillow) 庫中匯入了影象模組,用於處理影象處理任務,如開啟和修改影象。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
from transformers import pipeline
from PIL import Image
from transformers import pipeline from PIL import Image
from transformers import pipeline
from PIL import Image

步驟 2:載入影象

雖然您可以使用影象 URL 載入零拍攝分類所需的影象,但對於本地裝置上的影象,使用影象路徑是一種有效的替代方法。因此,“Image.open”功能有助於使用 PIL 庫開啟影象,併為進一步處理做好準備。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
image_path = "/content/Bald doctor.jpeg"
image = Image.open(image_path)
image_path = "/content/Bald doctor.jpeg" image = Image.open(image_path)
image_path = "/content/Bald doctor.jpeg"
image = Image.open(image_path)

禿頭醫生

步驟 3:初始化模型

現在我們將初始化模型。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
pipe = pipeline("zero-shot-image-classification", model="facebook/metaclip-b16-fullcc2.5b")
pipe = pipeline("zero-shot-image-classification", model="facebook/metaclip-b16-fullcc2.5b")
 pipe = pipeline("zero-shot-image-classification", model="facebook/metaclip-b16-fullcc2.5b")

步驟 4:定義標籤

下一步是設定候選標籤,即模型可以對輸入影象進行分類的可能類別。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
# Define candidate labels
candidate_labels = ["doctor", "scientist", "businessman", "teacher", "artist"]
# Define candidate labels candidate_labels = ["doctor", "scientist", "businessman", "teacher", "artist"]
 # Define candidate labels
candidate_labels = ["doctor", "scientist", "businessman", "teacher", "artist"]

該模型將處理影象,並根據標籤分數給出結果。因此,你可以得到以下標籤的預測得分:醫生、科學家、商人、教師或藝術家。由於該模型具有文字-影象匹配功能,因此它可以提供哪些標籤與影象匹配的百分比。

步驟 5:列印輸出

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
result = pipe(image, candidate_labels=candidate_labels)
result = pipe(image, candidate_labels=candidate_labels)
 result = pipe(image, candidate_labels=candidate_labels)

這裡的函式(管道)將訪問影象併為每個標籤分配一個概率分值。因此,您將得到每個標籤的結果及其相關的置信度得分。

輸出:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
print(result)
print(result)
 print(result)

影象識別得分和分類

輸出結果顯示,與其他標籤相比,“醫生”的置信度得分最高(0.99106)。

使用MetaCLIP進行影象-文字相似性分析

該模型的另一個神奇之處在於,它能通過給出置信度分數,幾乎準確地定義兩張圖片的相似度。下面我將說明如何使用 MetaCLIP 比較兩張影象:

匯入庫

雖然 MetaCLIP 已存在於環境中,但我們仍可匯入必要的庫,就像在零鏡頭分類中一樣。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
from transformers import pipeline
from PIL import Image
from transformers import pipeline from PIL import Image
from transformers import pipeline
from PIL import Image

初始化MetaCLIP模型

接下來,我們將初始化負責影象相似性任務的 MetaCLIP 模型。影象輸入是這一過程的另一個重要步驟。載入和處理要檢查相似性的影象的步驟如下所示:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
pipe = pipeline("zero-shot-image-classification", model="facebook/metaclip-b16-fullcc2.5b")
pipe = pipeline("zero-shot-image-classification", model="facebook/metaclip-b16-fullcc2.5b")
 pipe = pipeline("zero-shot-image-classification", model="facebook/metaclip-b16-fullcc2.5b")

影象處理

我們需要載入要檢查相似性的兩幅影象。這需要從指定路徑開啟影象。image.open “函式使用 PIL 庫來完成這一過程。因此,我們有了 image1,其中包含檔案路徑為“/content/Alphine Loop Apple Band.jpg”的第一張圖片。

Image2 儲存檔案路徑中的第二張圖片:“/content/Apple Watch Reset.jpg”。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
image1 = Image.open("/content/Alphine Loop Apple Band.jpg")
image2 = Image.open("/content/Apple Watch Reset.jpg")
image1 = Image.open("/content/Alphine Loop Apple Band.jpg") image2 = Image.open("/content/Apple Watch Reset.jpg")
image1 = Image.open("/content/Alphine Loop Apple Band.jpg")
image2 = Image.open("/content/Apple Watch Reset.jpg")

我們輸入影象路徑來載入要處理的影象。下面是圖片:

智慧手錶

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
description1 = "An orange apple watch" # Example for image1
description2 = "An apple watch with a black band" # Example for image2
description1 = "An orange apple watch" # Example for image1 description2 = "An apple watch with a black band" # Example for image2
description1 = "An orange apple watch"  # Example for image1
description2 = "An apple watch with a black band"       # Example for image2

由於 MetaCLIP 是一個文字-影象匹配模型,因此請用文字形式描述每張影象。然後,就可以檢查影象 1 和影象 2 如何相互匹配了。

結果

這段程式碼使用 MetaCLIP 管道的零鏡頭分類方法對兩幅影象進行交叉相似性檢查。第一張影象(image1)使用第二張影象(description2)的文字描述進行分類,反之亦然(image2 使用 description1)。由此得出的置信度分數(result1 和 result2)表示每張影象與另一張影象的描述的匹配程度。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
result1 = pipe(image1, candidate_labels=[description2])
result2 = pipe(image2, candidate_labels=[description1])
result1 = pipe(image1, candidate_labels=[description2]) result2 = pipe(image2, candidate_labels=[description1])
result1 = pipe(image1, candidate_labels=[description2])
result2 = pipe(image2, candidate_labels=[description1])

列印結果最後,通過“列印”顯示相似度得分。第一行顯示影象 1 與影象 2 描述的匹配程度,反之亦然。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
print("Similarity Score (Image1 → Image2):", result1)
print("Similarity Score (Image2 → Image1):", result2)
print("Similarity Score (Image1 → Image2):", result1) print("Similarity Score (Image2 → Image1):", result2)
print("Similarity Score (Image1 → Image2):", result1)
print("Similarity Score (Image2 → Image1):", result2)

如果兩個分數都很高,則認為影象相似;如果兩個分數都很低,則認為影象不同。然而,如下圖所示,相似性是顯而易見的。(分數 = 1.0)

影象相似得分

您可以通過連結檢視 Colab 上的程式碼檔案 。

MetaCLIP的應用

該模型在各行各業的應用方式多種多樣。其中包括

  • MetaCLIP 可幫助建立用於影象搜尋的人工智慧系統。MetaCLIP 的影象聚類能力意味著它可以對具有特定屬性的影象進行分組,並在與文字匹配時進行識別。
  • 影象標題和生成是 CLIP 模型的另一項應用。MetaCLIP 可以使用文字提示生成影象。
  • 該模型還可用於影象組合,因為您可以使用文字提示合併不同影象中的元素。

MetaCLIP的侷限性

現在讓我們探討一下 MetaCLIP 的侷限性:

  • 潛在偏差:MetaCLIP 會從其線上訓練資料中繼承偏差,從而導致公平性問題。
  • 資料依賴性:該模型的效能在很大程度上依賴於後設資料整理的質量和多樣性。
  • 計算成本:訓練和推理需要大量資源,因此較小規模的應用無法使用。
  • 可解釋性有限:零鏡頭分類的決策過程缺乏充分的可解釋性。
  • 倫理問題:與資料隱私和負責任地使用人工智慧相關的問題仍然是一個挑戰。

小結

MetaCLIP 提高了資料整理的透明度,完善了影象-文字配對,是 CLIP 的重大進步。它在零鏡頭分類和影象相似性任務中的卓越表現,展示了它在各種人工智慧應用中的潛力。MetaCLIP 採用結構良好的後設資料方法,提高了可擴充套件性和準確性,同時解決了 CLIP 的一些資料限制。

然而,有關資料來源和潛在偏見的倫理問題仍然是一個挑戰。儘管如此,MetaCLIP 的創新架構和高準確性使其成為推進多模態人工智慧應用的強大工具。

  • MetaCLIP 帶來的資料透明度是一個突出因素。它利用基於後設資料的資料集(包含 4 億多個影象-文字對)改進了資料整理過程。
  • MetaCLIP 在零鏡頭影象分類方面的表現是該模型效能基準的另一個重要收穫。
  • MetaCLIP 可用於影象搜尋、聚類、標題,甚至文字到影象的生成。

Resources

評論留言