项目介绍:CLIP-ImageSearch-NCNN
项目概述
CLIP-ImageSearch-NCNN是一个将自然语言与图像进行匹配的工具,旨在优化手机相册中的图片搜索功能。它可以通过在后台自动提取每张图片的特征,从而实现快速的搜索结果展示。同时,项目还可以显示每个图片与搜索内容的匹配概率,并按照概率从高到低返回结果。
项目的动机
项目的灵感来源于作者在开发GPT模型时的经验。在开发过程中,作者意识到CLIP与GPT具备相似的灵活性,因此萌生了将CLIP应用于图像搜索的想法。作者特别关注了一个名为“natural-language-image-search”的项目,该项目能够通过输入自然语言来搜索图像,这正是CLIP-ImageSearch-NCNN的核心功能。
技术和实现
该项目使用ncnn框架部署了CLIP模型,实现了自然语言图像检索功能。目标是提供在x86和Android端都可以使用的demo。目前,所有的模型文件和可执行程序均已上传至Github,供用户下载和使用。
使用指南
Android端
- 下载并运行提供的APK。
- 点击“扫描相册”,扫描手机中的图片。
- 选择一个时间段进行特征抽取,过程与图片数量成正比。
- 在搜索框中输入英文描述,点击“搜”。
- 程序将自动显示最匹配的结果。
x86端
- 运行提供的EXE文件。
- 点击“1.选择图库”选择待搜索的图片文件夹。
- 点击“2.抽取图库特征”以提取图片特征。
- 输入描述性英文句子。
- 点击“4.搜”以查看匹配结果。
项目结构
android
文件夹:包含APK程序的源代码。x86
文件夹:包括基于QT开发的EXE程序的源代码。gallery
文件夹:一个小型图库供测试使用。resources
文件夹:README的资源文件。
工作原理
项目通过以下步骤实现图像搜索:
- 使用CLIP的
encode_image
提取图片特征,建立图库特征向量。 - 使用CLIP的
encode_text
提取文本特征,建立文本特征向量。 - 计算两个特征向量的相似度,返回最高匹配概率的图片。
- 支持多种玩法,例如以字搜图、以图搜字等。
构建图库所有图片的特征向量是项目中最耗时的部分,项目使用“RN50”模型进行特征提取。
项目成果
- PyTorch模型的梳理与导出。
- 实现了x86和Android端的演示程序,用户可以通过百度网盘下载相关的二进制文件并进行编译和运行。
参考项目
- ncnn
- CLIP
- natural-language-image-search
CLIP-ImageSearch-NCNN在逐步更新中,作者希望通过这个项目进一步提升自然语言图像搜索的效率和用户体验,并期待更多用户的关注和支持。