使用 Hugging Face Datasets 與 Transformers 的影像相似度

Hugging Face 提供了一份技術指南,說明如何使用 TransformersDatasets 套件建構影像相似度系統。此系統讓使用者能在給定查詢影像的情況下,從候選影像集合中找出最相似的影像,這是諸如逆向影像搜尋等資訊檢索系統的核心功能。

透過嵌入定義影像相似度

影像相似度是透過將高維像素資料轉換為稱為嵌入的密集表示來實現的。此過程將影像空間(例如 224 x 224 x 3 像素)壓縮至較低維度的向量空間(例如 768 維),從而大幅降低檢索時的計算時間。

為了判斷兩張影像之間的相似度,系統會計算它們各自嵌入之間的 餘弦相似度指標。餘弦相似度分數越接近,表示影像在向量空間中越相似。

使用影像編碼器計算嵌入

要產生這些嵌入,需要一個作為影像編碼器的視覺模型。Hugging Face 建議使用 AutoModel 類別,從 Hugging Face Hub 載入相容的檢查點。

模型選擇

在提供的範例中,系統使用 nateraw/vit-base-beans,這是一個在 beans 資料集上微調的 Vision Transformer (ViT) 模型。指南強調了幾個關鍵的技術選擇:

  • AutoModel vs AutoModelForImageClassification:使用 AutoModel 是因為目標是取得密集表示(嵌入),而非離散的類別標籤。
  • Domain-Specific Fine-tuning:使用在特定資料集(如 beans)上微調的模型,通常能比使用在 ImageNet-1k 上訓練的通用模型取得更好的理解與檢索效能。
  • Self-Supervised Learning:指南指出,透過自監督預訓練取得的檢查點同樣能帶來令人印象深刻的檢索效能。

替代模型

雖然範例使用 ViT,但系統可以擴展至 Transformers 套件中其他可用的視覺模型,包括:

  • Swin Transformer
  • ConvNeXT
  • RegNet

影像相似度工作流程

尋找相似影像的過程遵循四步驟的管線:

  1. Candidate Embedding Extraction:從候選影像子集提取嵌入,並儲存於矩陣中。
  2. Query Embedding Extraction:將查詢影像透過相同的影像編碼器處理,以產生其嵌入。
  3. Similarity Scoring:系統遍歷候選嵌入矩陣,計算查詢嵌入與每個候選之間的餘弦相似度。
  4. Ranking:依相似度分數排序結果,返回前 k 個標識符,以取得最相似的影像。

為了有效實作此流程,使用 datasets 套件中的 map() 函式,對候選資料集平行計算嵌入。

大規模資料集的擴展

對於涉及數百萬影像的大規模生產環境,儲存原始 768 維嵌入會造成記憶體與計算瓶頸。Hugging Face 建議兩種主要的優化方式:

降維

在不失去語意意涵的前提下降低嵌入的維度,可在速度與檢索品質之間取得平衡。建議使用 random projectionlocality-sensitive hashing (LSH) 等技術來達成此目的。

FAISS 整合

為了高效能的相似度搜尋,datasets 套件提供了與 FAISS(Facebook AI Similarity Search)的直接整合。此整合簡化了索引流程:

  • add_faiss_index():此方法在資料集內的特定嵌入欄位上建立密集索引。
  • get_nearest_examples():此方法可根據查詢嵌入有效地取得最近的範例。

此整合消除了手動遍歷嵌入矩陣的需求,使系統能在保持低延遲的同時,擴展至大規模資料集。

Sources