iOS 应用程序 Queryable 的开源代码利用OpenAI 的 CLIP Apple 的 MobileCLIP 模型可在“照片”相册中进行离线搜索。与 iOS Photos 应用程序中内置的基于类别的搜索模型不同,Queryable 允许您使用自然语言语句(例如a brown dog sitting on a bench
)来搜索您的相册。由于它是离线的,您的相册隐私不会受到任何公司的损害,包括苹果或谷歌。
博客 |应用商店 |网站 |故事| 故事
流程如下:
更多详情请参考我的博客:在iPhone上运行CLIP搜索照片。
[2024-09-01]:现在支持Apple的MobileCLIP。
您可以从 Google Drive 下载导出的TextEncoder_mobileCLIP_s2.mlmodelc
和ImageEncoder_mobileCLIP_s2.mlmodelc
。目前我们使用s2
模型作为默认模型,它平衡了效率和精度。
@greyovo开发的Android版本(代码),支持英文和中文。请参阅#12 中的详细信息。
从 Google Drive 下载TextEncoder_mobileCLIP_s2.mlmodelc
和ImageEncoder_mobileCLIP_s2.mlmodelc
。克隆这个存储库,将下载的模型放在CoreMLModels/
路径下并运行 Xcode,它应该可以工作。
如果您只想运行 Queryable,则可以跳过此步骤,直接使用从 Google Drive 导出的模型。如果您希望实现支持您自己的母语的 Queryable,或者进行一些模型量化/加速工作,这里有一些指南。
诀窍是在架构级别将TextEncoder
和ImageEncoder
分开,然后单独加载模型权重。可查询使用OpenAI ViT-B/32 Apple的MobileCLIP模型,我编写了一个Jupyter笔记本来演示如何分离、加载和导出OpenAI的CLIP Core ML模型(如果您想要MobileCLIP的导出脚本,请查看#issuecomment-2328024269)。 ImageEncoder的Core ML的导出结果存在一定程度的精度误差,可能需要更合适的归一化参数。
clip-vit-base-patch32
的脚本。这显着降低了图像编码器的精度误差。有关更多详细信息,请参阅#18。 免责声明:我不是专业的 iOS 工程师,请原谅我糟糕的 Swift 代码。您可能只关注模型的加载、计算、存储和排序。
你可以将Queryable应用到你自己的产品中,但我不建议简单地修改外观并在App Store上架。如果您有兴趣优化某些方面(例如#4, #5 ,#6,#10,#11, #12 ),请随时提交 PR(拉取请求)。
感谢您的贡献:)
如果您有任何问题/建议,以下是一些联系方式:Discord |推特 | Reddit:r/Queryable。
麻省理工学院许可证
版权所有 (c) 2023 科方