使用 Hugging Face datasets 進行圖像搜尋

Hugging Face 展示了一種使用 datasets 函式庫、OpenAI 的 CLIP 模型以及 FAISS 函式庫來構建圖像搜尋應用程式的工作流程。這種方法允許使用者透過將文字提示(text prompts)與圖像同時編碼到共享的嵌入空間(embedding space)中,來執行語義圖像檢索。

使用 datasets 高效處理圖像數據

datasets 函式庫提供了一個專用的 Image 特徵類型,簡化了圖像數據的攝取與處理。此功能支援多種輸入格式,包括絕對檔案路徑、包含位元組(bytes)與路徑的字典、NumPy arrays 以及 PIL image objects。

為了簡化資料集建立過程,ImageFolder 載入器允許直接載入以標準資料夾結構組織的圖像資料集。例如,大英圖書館的 "Digitised Books - Images identified as Embellishments. c. 1510 - c. 1900" 資料集可以透過 load_dataset("imagefolder", ...) 直接從 zip 檔案中載入。

利用 Hugging Face Hub 提升工作流程的可移植性

push_to_hub 方法讓開發者能夠將處理過的資料集上傳到 Hugging Face Hub。這項功能對於在不同運算環境之間遷移工作負載至關重要——例如,在本地筆記型電腦上開始資料準備工作,然後在 Google Colab 上執行 GPU 加速的嵌入生成。

透過設定 embed_external_files=True(預設行為),圖像會被直接嵌入到 Hub 上的資料集中,確保資料集在不同工作階段(sessions)之間保持可移植性與可存取性,而無需重新下載原始來源檔案。

使用 CLIP 與 FAISS 實作語義搜尋

為了實現圖像搜尋,必須將圖像轉換為捕捉語義含義的稠密向量(embeddings)。

使用 CLIP 生成嵌入

Hugging Face 利用 sentence_transformers 函式庫來實作 clip-ViT-B-32 模型。CLIP (Contrastive Language-Image Pre-training) 旨在學習圖像與文字的聯合表示法,這意味著文字提示與對應的圖像將會被映射到向量空間中相似的位置。

使用 FAISS 進行高效檢索

一旦生成了嵌入並將其作為一欄添加到資料集中,就會使用 datasets 函式庫的 add_faiss_index 方法來建立 FAISS (Facebook AI Similarity Search) 索引。此索引允許在大型稠密向量集合中進行高效能的相似度搜尋。

透過使用 get_nearest_examples 方法,系統可以接收一個文字提示,使用相同的 CLIP 模型對其進行編碼,並檢索出其嵌入向量在向量空間中與該提示嵌入向量最接近的圖像。

部署考慮因素與倫理限制

雖然可以使用 Gradio app 來將此功能封裝成一個可搜尋的演示版(demo),但 Hugging Face 特別強調了關於部署基於 CLIP 的搜尋工具時需注意的重要警示:

  • 模型範圍: CLIP 模型卡片(model card)指定了目前部署的使用案例——無論是商業用途或其他用途——皆不在範圍內。若未針對固定類別分類法(class taxonomy)進行徹底的領域內測試,不建議進行非部署型的使用案例。
  • 性能變異性: CLIP 的性能在不同類別分類法之間可能會顯著變異,這使得不受限制的部署可能具有潛在危害。
  • 資料集偏差: 當使用歷史資料集(例如 19 世紀的書籍插圖)時,存在圖像反映殖民態度或對特定群體的負面呈現之風險。將此類數據與任意文字提示結合使用,可能會導致有問題的輸出結果。

Sources

相關