使用 Hugging Face 数据集进行图像搜索

Hugging Face 已演示了使用 datasets 库、OpenAI 的 CLIP 模型和 FAISS 库构建图像搜索应用的工作流程。此方法允许用户通过将文本提示和图像编码到共享嵌入空间来执行语义图像检索。

使用 datasets 进行高效图像数据处理

datasets 库提供了专用的 Image 特性类型,简化了图像数据的摄入和处理。此特性支持多种输入格式,包括绝对文件路径、包含字节和路径的字典、NumPy 数组和 PIL 图像对象。

为了简化数据集创建,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 上的数据集中,确保数据集在不同会话之间保持便携且可访问,而无需重新下载原始源文件。

使用 CLIP 和 FAISS 实现语义搜索

要启用图像搜索,图像必须转换为捕获语义意义的密集向量(嵌入)。

使用 CLIP 生成嵌入

Hugging Face 使用 sentence_transformers 库实现 clip-ViT-B-32 模型。CLIP(对比语言-图像预训练)旨在学习图像和文本的联合表示,这意味着文本提示和对应的图像将被映射到向量空间中的相似位置。

使用 FAISS 进行高效检索

一旦嵌入生成并作为列添加到数据集中,datasets 库的 add_faiss_index 方法将用于创建 FAISS(Facebook AI 相似性搜索)索引。此索引允许在大规模密集向量集合上进行高性能相似性搜索。

使用 get_nearest_examples 方法,系统可以采用文本提示,使用相同的 CLIP 模型对其进行编码,并检索其嵌入在向量空间中与提示嵌入最近的图像。

部署注意事项和伦理约束

虽然可以使用 Gradio 应用将此功能包装成可搜索的演示,但 Hugging Face 强调了部署基于 CLIP 的搜索工具时的重大注意事项:

  • 模型范围: CLIP 模型卡指出,目前部署的使用案例——无论是商业还是其他——均超出范围。未部署的使用案例在没有针对固定类别分类法进行彻底的领域内测试之前不被推荐。
  • 性能变异性: CLIP 的性能在不同类别分类法之间可能会显著变化,使得无约束的部署可能带来潜在危害。
  • 数据集偏差: 使用历史数据集(例如 19 世纪的书籍插图)时,存在图像可能反映殖民态度或对某些群体的负面描述的风险。将此类数据与任意文本提示结合可能导致问题输出。

Sources

相关