clip-retrieval 是一个用于轻松计算 CLIP 嵌入并基于这些嵌入构建检索系统的开源项目。它旨在让用户能够快速搭建语义搜索系统,支持文本和图像的多模态检索。
用途
clip-retrieval 的核心用途是构建基于 CLIP 嵌入的语义搜索系统。它可以将图像和文本转换为 CLIP 嵌入向量,然后建立高效的索引,从而实现以文搜图、以图搜图、按嵌入查询等功能。该项目特别适合需要处理大规模图像-文本数据集的场景,例如为机器学习准备数据、构建多模态检索应用等。
主要能力
- 嵌入计算:clip inference 组件可以快速计算图像和文本的 CLIP 嵌入,在 3080 显卡上速度可达 1500 样本/秒。支持多种 CLIP 模型,包括 open_clip 和 Hugging Face 模型,也支持多语言 CLIP(MCLIP)。
- 索引构建:clip index 使用 autofaiss 从嵌入中构建高效的 FAISS 索引,可扩展到数亿样本。
- 数据过滤:clip filter 允许使用 CLIP 索引按查询过滤数据,例如提取与“cat”最匹配的 100 张图片。
- 后端服务:clip back 提供一个简单的 Flask 服务来托管索引,支持内存映射、HDF5/Arrow 缓存、安全模型、暴力检测、美学评分等选项。
- 前端界面:clip front 是一个简单的 UI,用于查询后端,可在 clip-retrieval ui 查看。
- 端到端流程:clip end2end 运行 img2dataset、推理、索引、后端和前端,简化整个流程。
- 远程查询:ClipClient 允许通过 Python 远程查询 clip-retrieval 后端,支持指定索引名称、美学分数、多语言、模态、返回数量、去重、安全模型等参数。
- 分布式推理:支持多节点、多 GPU 的分布式推理,也支持 SLURM 集群。
- 存储支持:支持从 HDFS 和 S3 加载/写入 webdataset 格式的数据。
- DeepSparse 支持:可通过 DeepSparse 在 CPU 上进行快速稀疏模型推理。
使用方式
安装:pip install clip-retrieval
计算嵌入
使用 clip-retrieval inference --input_dataset image_folder --output_folder embeddings_folder 命令,输入可以是包含图片的文件夹(可附带同名文本文件),输出包含图像嵌入、文本嵌入和元数据的 numpy 文件及 parquet 文件。
构建索引
使用 clip-retrieval index --embeddings_folder embeddings_folder --index_folder index_folder 命令,可配置内存使用、子文件夹、元数据复制、线程数等参数。输出包含图像索引、文本索引和元数据文件夹。
过滤数据
使用 clip-retrieval filter --query "cat" --output_folder "cat/" --indice_folder "indice_folder" 命令,可复制最佳匹配的图片到输出文件夹。
启动后端
使用 clip-retrieval back --indice_folder indice_folder 命令,可配置 JIT、CLIP 模型、多语言选项、返回列、内存映射、HDF5/Arrow 缓存、安全模型、暴力检测、美学嵌入等。
端到端
使用 clip-retrieval end2end 命令,可自动运行 img2dataset、推理、索引、后端和前端。
远程查询
通过 ClipClient 初始化时指定 backend_url、indice_name 等参数,然后调用查询方法。
分布式推理
参考 docs/distributed_clip_inference.md 教程。
HDFS/S3 支持
通过 --input_dataset "pipe:hdfs dfs -cat ..." 或 --input_dataset "pipe:aws s3 cp ..." 等方式加载,输出可指定 hdfs:// 或 s3:// 路径。
适用场景
- 构建大规模图像-文本语义搜索系统。
- 为机器学习数据集预处理和增强,例如为图像生成文本锚点。
- 在数百万级数据集中进行快速相似性搜索。
- 多语言图像检索。
- 需要安全过滤(NSFW、暴力)的检索应用。
- 学术研究或工业级多模态检索原型开发。
限制
- 项目文档未明确说明具体的收费模式、价格或商业授权信息,暂未提供。
- 性能数据基于特定硬件(3080 显卡),实际性能可能因硬件配置而异。
- 大规模索引需要足够的内存和存储资源,索引内存使用可配置但会影响召回率。
- 部分高级功能(如安全模型、暴力检测)需要额外安装依赖。
- 项目未提供关于平台兼容性的详细说明,暂未提供。