当前位置: 首页 > 科技观察

使用深度学习为您的图片构建一个强大的图像搜索引擎

时间:2023-03-13 02:28:35 科技观察

几天前,我很想回顾一张记忆犹新的旧照片,但我不知道在哪里可以找到它...因为拍完照片后我换了两次手机和一次笔记本电脑,我很确定我通过Messenger将它发送给了某人,但是谁呢?搜索我所有的图像并通过简单的描述性查询找到它会多么方便!…计算机视觉的最新进展提高了图像嵌入(密集向量表示)的相关性,并且现在可以使用最近的裁剪模型轻松实现对我的本地图像进行类似Google的图像搜索。无需深入研究细节(有关更多信息,请参阅博客文章和论文:https://openai.com/blog/clip/),Clip是一种神经网络,旨在通过自然语言监督学习图像特征。基本上,它使用互联网上带有相关说明的公共图像,将文本嵌入到类似Bert的语言模型中,并将图像嵌入到视觉转换器中。请注意,所使用的技术可以应用于其他NLP和CV模型架构。使用多个图像/文本嵌入对,可以通过批量负对比训练微调视觉和文本嵌入模型,类似于在信息检索的NLP领域中可以做的事情。基本上,目标是让图像嵌入与其关联的文本嵌入对应(点积),并且与其他图像的所有标题(1)不同。剪辑通常用于“零样本”分类;给定图像和标题列表,它会推断出图像的最佳标题是什么。在上面的示例(2)中,与“飞机的照片”、“鸟的照片”、“汽车的照片”相比,“狗的照片”是最好的标题。...我对图像搜索引擎(不是新的)的想法是颠覆这一点,而不是根据图像对字幕进行分类,他们根据文本查询对图像进行分类。该过程如下所示:查找给定目录中的所有图像使用预训练的剪辑视觉转换器计算每个图像的嵌入,并将它们与图像路径一起存储以供将来参考。https://openai.com/blog/clip/在运行时,使用剪辑到文本转换器将用户查询转换为文本嵌入。计算文本嵌入与所有存储的图像嵌入的点积,根据获得的分数对所有图像进行排序,并返回排名前N的图像的路径。这个过程连同一些附加功能在我的Github存储库中实现:https://github.com/ManuelFay/ImageSearcher。https://github.com/ManuelFay/ImageSearcher在索引阶段,代码使用oslibrary查找给定目录和子目录中的所有图像,使用Converter和Pickle库嵌入和存储矢量化表示。在运行时,加载pickled嵌入,与嵌入查询匹配,并返回排名第n的图像。提供了一个Flask/GunicornAPI来支持高效地使用具有外部接口的搜索引擎。还提供了一个简单的Google图像搜索,类似于使用Vue.js构建的Web界面。示例为了获得大量图片,我从Facebook下载了我的Messenger个人资料,并获得了过去几年我发送和接收的大约10,000张图片。搜索引擎允许非常描述性的查询。排名靠前的图像首先列出。请注意,这些图像都是从我本地收集的大约10,000张图像中提供的,因此选项有限。元查询也是可能的。在这里,我们要求无人机提供照片:这是一个快速的下午项目,但切割模型的精度给我留下了深刻的印象。要自行测试,请使用https://github.com/ManuelFay/ImageSearcher中的代码。欢迎对改进和附加功能做出贡献!https://github.com/ManuelFay/ImageSearcher