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 UIhttp://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样例。同样也可以将特征提取网络替换为人脸识别模型,这样就可以打造属于自己的人脸搜索引擎✌。

【Milvus的以图搜图】相关推荐

  1. 使用Milvus搭建以图搜图服务

    使用Milvus搭建以图搜图服务 介绍 安装Milvus Java调用Milvus插入.查询 引入Maven依赖 创建Milvus客户端 实现Milvus插入向量数据 实现Milvus 查询向量 结尾 ...

  2. 基于 Milvus 的以图搜图系统 2.0

    Milvus 以图搜图 1.0 版本自发布以来便受到广大用户的欢迎.近日,Zilliz 推出了 Milvus 以图搜图系统 2.0 版.本文将介绍 Milvus 以图搜图系统 2.0 版的主要更新内容 ...

  3. 零基础实战行人重识别ReID项目-基于Milvus的以图搜图

    目录 第一阶段,ReID的基本概念 1.1 ReID定义 1.2 技术难点 1.3 常用数据集 1.4 评价指标 1.5 实现思路 1.6 具体方案 第二阶段:复现算法 2.1 PCB的骨干网络 2. ...

  4. python+milvus实现一个以图搜图系统

    目录 引言 说明 准备数据 训练数据 安装minlvus(docker-compose方式) python集成milvus+towhee python后端启动方式 启动前端 查询数据 引言 当您听到& ...

  5. Torch、Java、Milvus快速搭建以图搜图系统

    Torch.Java.Milvus快速搭建以图搜图系统 1 原理概述 以图搜图大致原理(口水话版) 以图搜图,即通过一张图片去匹配数据库中的图片,找到最相似的N张图.在我们普通的搜索系统中,文字匹配的 ...

  6. 7 招教你轻松搭建以图搜图系统!

    作者 | 小龙 责编 | 胡巍巍 当您听到"以图搜图"时,是否首先想到了百度.Google 等搜索引擎的以图搜图功能呢?事实上,您完全可以搭建一个属于自己的以图搜图系统:自己建立图 ...

  7. 以图搜图服务快速搭建

    以图搜图服务快速搭建 电商公司,管理的商品少则几千,多则上百万.如何帮助用户从多如牛毛的商品中找到类似的商品就成了问题. 以图搜图就可以很好的帮助解决这个问题,通过 Towhee(resnet50 模 ...

  8. ES 如何实现向量搜索【以图搜图/语义搜索】

    ES 如何实现向量搜索 在 ES 的使用过程中,通过设置分词器可以灵活地按照文本字面实现搜索和查询.但是在某些场景下,向量搜索非常有必要,比如 CV 方面的以图搜图和 NLP 领域的语义搜索.较新的 ...

  9. 搭建自己的以图搜图系统(二):深入优化搭建生产级别的图搜系统

    概述 本文是"搭建自己的以图搜图系统"系列的第二篇,在第一篇内容中我们了解了如何利用"机器学习框架 Towhee ¹"和"向量数据库 Milvus ² ...

最新文章

  1. 请问如何更改dedecms“文件保存目录”的字符限制 ?
  2. ct读片软件_伦琴影领影像诊断中心:这六大MRI读片技巧,影像医生必须掌握
  3. MyBatis多表查询之XML和注解实现(resultMap结果集映射配置数据库字段与实体类属性一一映射)
  4. python字典视图
  5. git 重新关联远程仓库地址
  6. Linus 在圣诞节想提前放假做了这些解释,哈哈哈
  7. 最短路径——迪杰斯特拉算法——图的数据结构
  8. python爬虫中文乱码_解决Python爬虫处理文件时候中文名称出现乱码问题
  9. MYSQL数据库实验三多表查询_数据库之 MySQL --- 数据处理 之多表查询 (三)
  10. 终极解密输入网址按回车到底发生了什么
  11. python函数传值还是地址_python中给函数传参是传值还是传引用
  12. 外贸网站需要ERP系统吗?
  13. 如何使用svn客户端
  14. tp5可以请求到linux根目录么,TP5 获取项目根目录路径
  15. C++基础——对函数模板的类型推导的补充
  16. 记:从百度空间搬家到博客园--写博客要写的舒服
  17. 声谱图(spectrogram)、FBank(Mel_spectrogram)和 MFCC(Mel倒谱)到底用哪个作为NN输入?
  18. jQuery php 多条件筛选,jquery筛选
  19. P2360 地下城主
  20. java8 joda_Joda Time和Java8时差

热门文章

  1. 吃鸡是python写的吗_用Python来P图,分析怎么吃鸡?只有想不到,没有做不到
  2. 达州中学高考2021成绩查询,2020达州高考成绩揭晓,恭喜恭喜!另附成绩统计表...
  3. 举些例子看看一个程序员的水平究竟可以差到什么程度?
  4. oracle人民币大写转换
  5. WiFi DFS(动态频率选择)
  6. !function(){}() 什么意思
  7. PXC+haproxy+keepalived环境搭建
  8. php 图片印章_在线生成实用又方便 (图片印章)
  9. EDVR和FastDVD
  10. centos图像界面和dos界面之间切换