【Milvus的以图搜图】
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中以图搜图的例子主要思路如下图所示。
整个过程可以如下两个阶段:
- 构建数据样本库阶段
- 准备用于构建样本库的图像数据;
- 使用目标分类网络ResNet50提取图像特征信息;
- 将每个图像的特征embedding信息插入到Milvus中,同时将Milvus对每个图像生成index和对应的图像名信息存储到MySQL数据库中;
- 目标样本检索阶段
- 输入目标样本文件名;
- 目标样本经过目标分类网络提取特征得到对应embedding信息;
- 执行搜索;
- 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的以图搜图】相关推荐
- 使用Milvus搭建以图搜图服务
使用Milvus搭建以图搜图服务 介绍 安装Milvus Java调用Milvus插入.查询 引入Maven依赖 创建Milvus客户端 实现Milvus插入向量数据 实现Milvus 查询向量 结尾 ...
- 基于 Milvus 的以图搜图系统 2.0
Milvus 以图搜图 1.0 版本自发布以来便受到广大用户的欢迎.近日,Zilliz 推出了 Milvus 以图搜图系统 2.0 版.本文将介绍 Milvus 以图搜图系统 2.0 版的主要更新内容 ...
- 零基础实战行人重识别ReID项目-基于Milvus的以图搜图
目录 第一阶段,ReID的基本概念 1.1 ReID定义 1.2 技术难点 1.3 常用数据集 1.4 评价指标 1.5 实现思路 1.6 具体方案 第二阶段:复现算法 2.1 PCB的骨干网络 2. ...
- python+milvus实现一个以图搜图系统
目录 引言 说明 准备数据 训练数据 安装minlvus(docker-compose方式) python集成milvus+towhee python后端启动方式 启动前端 查询数据 引言 当您听到& ...
- Torch、Java、Milvus快速搭建以图搜图系统
Torch.Java.Milvus快速搭建以图搜图系统 1 原理概述 以图搜图大致原理(口水话版) 以图搜图,即通过一张图片去匹配数据库中的图片,找到最相似的N张图.在我们普通的搜索系统中,文字匹配的 ...
- 7 招教你轻松搭建以图搜图系统!
作者 | 小龙 责编 | 胡巍巍 当您听到"以图搜图"时,是否首先想到了百度.Google 等搜索引擎的以图搜图功能呢?事实上,您完全可以搭建一个属于自己的以图搜图系统:自己建立图 ...
- 以图搜图服务快速搭建
以图搜图服务快速搭建 电商公司,管理的商品少则几千,多则上百万.如何帮助用户从多如牛毛的商品中找到类似的商品就成了问题. 以图搜图就可以很好的帮助解决这个问题,通过 Towhee(resnet50 模 ...
- ES 如何实现向量搜索【以图搜图/语义搜索】
ES 如何实现向量搜索 在 ES 的使用过程中,通过设置分词器可以灵活地按照文本字面实现搜索和查询.但是在某些场景下,向量搜索非常有必要,比如 CV 方面的以图搜图和 NLP 领域的语义搜索.较新的 ...
- 搭建自己的以图搜图系统(二):深入优化搭建生产级别的图搜系统
概述 本文是"搭建自己的以图搜图系统"系列的第二篇,在第一篇内容中我们了解了如何利用"机器学习框架 Towhee ¹"和"向量数据库 Milvus ² ...
最新文章
- 请问如何更改dedecms“文件保存目录”的字符限制 ?
- ct读片软件_伦琴影领影像诊断中心:这六大MRI读片技巧,影像医生必须掌握
- MyBatis多表查询之XML和注解实现(resultMap结果集映射配置数据库字段与实体类属性一一映射)
- python字典视图
- git 重新关联远程仓库地址
- Linus 在圣诞节想提前放假做了这些解释,哈哈哈
- 最短路径——迪杰斯特拉算法——图的数据结构
- python爬虫中文乱码_解决Python爬虫处理文件时候中文名称出现乱码问题
- MYSQL数据库实验三多表查询_数据库之 MySQL --- 数据处理 之多表查询 (三)
- 终极解密输入网址按回车到底发生了什么
- python函数传值还是地址_python中给函数传参是传值还是传引用
- 外贸网站需要ERP系统吗?
- 如何使用svn客户端
- tp5可以请求到linux根目录么,TP5 获取项目根目录路径
- C++基础——对函数模板的类型推导的补充
- 记:从百度空间搬家到博客园--写博客要写的舒服
- 声谱图(spectrogram)、FBank(Mel_spectrogram)和 MFCC(Mel倒谱)到底用哪个作为NN输入?
- jQuery php 多条件筛选,jquery筛选
- P2360 地下城主
- java8 joda_Joda Time和Java8时差
热门文章
- 吃鸡是python写的吗_用Python来P图,分析怎么吃鸡?只有想不到,没有做不到
- 达州中学高考2021成绩查询,2020达州高考成绩揭晓,恭喜恭喜!另附成绩统计表...
- 举些例子看看一个程序员的水平究竟可以差到什么程度?
- oracle人民币大写转换
- WiFi DFS(动态频率选择)
- !function(){}() 什么意思
- PXC+haproxy+keepalived环境搭建
- php 图片印章_在线生成实用又方便 (图片印章)
- EDVR和FastDVD
- centos图像界面和dos界面之间切换