【Milvus的以图搜图】

news/2024/11/16 18:40:50/

0. 介绍

Milvus官方在bootcamp项目中给开发者提供多种解决方案,包含常见的以图搜图、人脸检索、DNA相似性检索、视频检索等等,具体可以参考bootcamp项目。

本文主要就bootcamp中以图搜图reverse_image_search的代码介绍如何运行该样例,进而了解如何打造自己的图像搜索engine。

 参考连接:

  • https://github.com/milvus-io/bootcamp/tree/master/solutions/reverse_image_search
  • https://fastapi.tiangolo.com/zh/
  • 搭建自己的Milvus以图搜图服务_在平凡生活中挣扎的博客-CSDN博客
  • 虹软人脸识别SDK接入Milvus实现海量人脸快速检索_Memory2414的博客-CSDN博客
  • 【pymysql的基本使用】_hello_dear_you的博客-CSDN博客
  • 【Milvus的安装和使用】_hello_dear_you的博客-CSDN博客

1. 启动Milvus和MySQL容器

在Milvus的系列文章,【Milvus的安装和使用】和【pymysql的基本使用】两篇文章介绍了如何安装Milvus、pymvilus的基本使用,以及如何通过pymysql库来操作MySQL。

在这一部分,主要是确认Milvus和MySQL容器处于启动状态下,以及两个容器的基本信息。首先,在milvus的docker-compose.yml文件的同级目录下,通过如下命令插入milvus容器的状态。

# 启动
docker-compose up -d# 查看
docker-compose ps -a# 停止
docker-compose down

 大致的过程如下图所示:

 然后确认MySQL容器的状态,具体过程如下图所示:

 此外,需要在MySQL中建立一个milvus的db来存放后续实验的数据内容。

2. 项目内容

本文此次以reverse_image_search的quick_deploy工程进行讲解,milvus中以图搜图的例子主要思路如下图所示。

 整个过程可以如下两个阶段:

  • 构建数据样本库阶段
  1. 准备用于构建样本库的图像数据;
  2. 使用目标分类网络ResNet50提取图像特征信息;
  3. 将每个图像的特征embedding信息插入到Milvus中,同时将Milvus对每个图像生成index和对应的图像名信息存储到MySQL数据库中;
  • 目标样本检索阶段
  1. 输入目标样本文件名;
  2. 目标样本经过目标分类网络提取特征得到对应embedding信息;
  3. 执行搜索;
  4. milvus返回与该样本相似的topK个图像名;

接下来,主要介绍一些需要用户配置的参数以及相关的一些改进。

2.1 特征提取网络修改

在该项目的server端的encode.py文件是图像特征提取的实现,通过towhee库调用resnet50网络提取图像特征,部分代码如下图所示:

 由于本人没有用过towhee库,所以基于pytorch重写了特征提取的过程,同时支持single图像和batch图像推理,在构建样本库使用batch推理可以极大节省时间。部分代码如下图所示。

 2.2 配置信息

以图搜图项目中,主要是milvus和MySQL容器的相关参数需要配置,具体如下图所示:

 首先分析一下miluvs的相关参数:

  • MILVUS_HOST和MILVUS_PORT:miluvs容器的IP地址和端口
  • VECTOR_DIMENSION:特征提取网络输出的维度,在pytorch中,resnet50的输出为1000维
  • DEFAULT_TABLE:默认存放特征embedding数据的collection名称

  • TOP_K:即检索时,输出前K个相似的图像名

然后,MySQL相关参数含义如下:

  • MYSQL_HOST和MYSQL_PORT:MySQL的IP地址和端口
  • MYSQL_USER和MYSQL_PWD:用户名和密码

  • MYSQL_DB:存放数据的database名称

3. 运行服务端

在配置好上述参数和确认milvus和MySQL容器处于启动状态之后,此时就可以来启动项目的服务端。以图搜图使用fastapi库来构建服务端,启动服务的命令如下:

uvicorn main:app --reload

对于fastapi库的内容本人不是特别熟悉,如果想要了解具体了解fastapi可以参考其官方文档。

运行上述命令,看到如下截图信息即可表示,服务启动成功。 

 如同所提示的一样,此时可以在浏览器中输入地址127.0.0.1:8000,可以看到如下页面内容。

 然后输入FastAPI - Swagger UIicon-default.png?t=M85Bhttp://127.0.0.1:8000/docs

 即可看到,该服务定义的一些接口,大致的含义,已经在图上描述出来。

 接下来对其中重要接口调用功能和使用方法进行介绍。

3.1 构建样本检索库

img/load条目的作用是输入collection名称和图像路径从而构建样本检索库,通过点击/img/load条目,然后点击try it out,输入相应的collection名称和图像路径,最后点击execute。然后图像路径下的图像会经过resnet50提取特征,得到embedding,最后插入到指定的collection中。具体过程如下图所示。

3.2 加载数据

/embedding/load条目的作用是将collection中的数据加载到memory中,输入collection名称即可。

3.3 执行检索

 /img/search条目的作用是执行目标样本的搜索,需要输入collection名称,选择目标样本的路径和topK的值。

 该操作会返回topK个相似的图像路径,如下图所示。

 

4. 运行客户端

milvus提供了一个以图搜图项目对应的客户端,通过如下命令拉取客户端的镜像。

docker pull milvusbootcamp/img-search-client:1.0

 然后,通过如下命令启动客户端容器。

#!/bin/bash# Modify API_URL to the IP address and port of the server.
export API_URL='http://127.0.0.1:8000'
docker run -d -p 8001:80 \
-e API_URL=${API_URL} \
milvusbootcamp/img-search-client:1.0

 在浏览器中输入127.0.0.1:8001,进入到客户端,如下图所示:

到这里就完成milvus以图搜图实例如何运行的描述,替换图像样本库路径就能打造属于自己的以图搜图工具。在milvus的reverse_image_search中除了本文所说的使用目标分类网络来提取特征之外,还有一种以目标检测+分类的object_detection样例。同样也可以将特征提取网络替换为人脸识别模型,这样就可以打造属于自己的人脸搜索引擎✌。


http://www.ppmy.cn/news/181892.html

相关文章

搜索图片、文字出处网站

https://33.agilestudio.cn/ http://dialogue.moe/ www.yandex.com https://saucenao.com/ https://trace.moe/

在线识图搜索引擎

Google 图片 https://images.google.com.hk/?gws_rdcr百度识图, “鉴”你所见 image.baidu.com/TinEye Reverse Image Search 专业识图搜索引擎搜狗图片-上网从搜狗开始 10个识图网站 知识就是力量。 1. 定义 2012 年 5 月, 搜索引擎巨头谷歌在其搜索页面首次引…

基于内容的图像检索引擎(以图搜图)

基于内容的图像检索引擎(以图搜图) 本文介绍一些基于内容的图像检索技术(Content-Based Image Retrieval,CBIR)的搜索引擎(即以图搜图),这类搜索引擎基本上代表了图像检索和识别的主…

这款超强搜索神器,我爱了!

公众号关注 “五分钟学算法” 设为 “星标”,带你了解技术圈内新鲜事 2019 年 11 月 7 日,微信群里突然炸了,大家似乎都在讨论一个叫做 Magi 的搜索引擎,据说搜索结果和现在的搜索引擎很不一样,能够输出以结构化知识呈…

以图搜图

以图搜图,查找类似图片 点击搜图,上传图片,会找出与之相似的图片(google搜图,百度搜图),图片相似度越高就越排在前面。 根据Neal Krawetz博士的解释,实现相似图片搜索的关键技术叫…

高清图片搜索引擎

原文地址:https://www.zhihu.com/question/20772002/answer/90933402 为了让你永久告别百度图片,我来总结一下高清图片搜索神站: 1.Zerospace - 高品質的 CC0 免費圖片 搜索框内写着大大的“搜索您想要的CC0图片”。那么问题来了:…

手机铃声图片下载

手机铃声下载说明: 1. 铃音格式:大部分手机支持midi ,有的支持mmf、pmd、wmv、amr等;其中pmd格式为CDMA手机支持类型,和弦手机大部分支持mmf格式铃声。 2. 铃音的下载路径:绝对路径 比如http:/…

小试“以图搜图”

毕业设计做的User-based Recommend System,其中涉及到了“余弦相似度”这个概念。 阮一峰大牛的博客介绍了以图搜图的原理(这里就不赘言),并给除了Python实现的代码 ,这个程序对于我来说,有的地方感觉稍显复杂&#x…