找回密码
 会员注册
查看: 23|回复: 0

基于Milvus快速实践以图搜图

[复制链接]

2万

主题

0

回帖

6万

积分

超级版主

积分
64454
发表于 2024-10-11 23:44:38 | 显示全部楼层 |阅读模式
背景图片检索在生活中应用广泛,常见的图片检索包括基于文本内容搜索和基于图片内容搜索。基于文本内容搜索图片是通过给图片打标签,然后通过搜索标签来实现对图片的搜索;而基于图片内容搜索即以图搜图,用户通过输入图片在海量的图片库中快速找到同款或者相似图片,这种搜索方式被广泛应用于电商、设计、媒体咨询、智能监控以及搜索引擎等热门领域。本文基于Milvus和图片特征提取模型VGG,借助SQL快速搭建了一套以图搜图端到端解决方案,为本地化进行海量图片相似度量实施工作提供可能。系统概览图为基于Milvus的以图搜图系统架构,webclient通过一组web interface接收用户请求并发送给webserver,webserver接到webclient发来的http请求后进行处理并返回处理结果。webserver由图片特征提取模型VGG和向量搜索引擎Milvus组成,VGG模型负责将图片转换成向量,Milvus负责存储向量并进行相似向量检索。SQLite负责存储原始图片数据,Milvus存储向量后生成的唯一向量id与原始图片数据建立关联关系,在图像检索时通过向量id找到对应的原始图片信息。VGG模型VGG于2014年由牛津大学视觉几何组(Visual Geometry Group)提出,其突出贡献是证明了增加网络的深度能够在一定程度上影响网络最终的性能。VGG模型在多个迁移学习任务中的表现要优于GoogLeNet,从图像中提取CNN特征,VGG模型是首选算法。VGGNet探索了CNN的深度及其性能之间的关系,通过反复堆叠3*3的小型卷积核和2*2的最大池化层,VGGNet成功地构筑了16-19层深的CNN。本文使用VGG16模型 ,技术实现上使用 Keras+TensorFlow:。Milvus 向量数据库Milvus是一款开源的向量数据库,赋能AI应用和向量相似度搜索。Milvus为海量向量搜索场景而设计,它不但集成了业界成熟的向量搜索技术如 Faiss和SPTAG,Milvus也实现了高效的NSG图索引。同时,Milvus团队针对Faiss IVF索引进行了深度优化,实现了CPU与多GPU的融合计算,并完成单机环境下SIFT1b十亿级向量搜索任务。具有使用方便、实用可靠、易于扩展、稳定高效和搜索迅速等特点。图是Milvus在整个系统链路中的位置及应用场景。数据进入系统大致分为两类:一类是需要比对的数据,另一类是需要真正去做查询的数据。这些数据通过Encoder(如神经网络或深度学习模型)生成vector向量,然后这个向量就会写入或通过Milvus去做查询。所有的写入过程在Milvus中都会转化成文件,存储在对象存储上面;而在查询过程中基本是纯内存操作,利用内存索引去找到距离比较近的向量,再对这些向量去做读盘的retrived操作,获取原始数据。API调用过程在整个以图搜图系统中,webserver对外提供5个api调用: train、process、count、search、delete,基本包含了系统的全部基础功能。train apitrain api为图片加载接口,通过post请求接收图片的路径并传入系统。在预处理阶段,即图片检索之前,需要将图片库加载进数据库Milvus,由于Milvus仅支持向量数据的检索,需要将图片转化为特征向量,先通过 train api加载图片库路径,再通过调用VGG模型的vgg_extract_feat()实现特征提取,获取特征向量;然后通过insert_vectors()的接口导入Milvus数据库。特征向量存入Milvus数据库后,Milvus会为每个向量分配一个唯一id,并将此id反射存储到源数据库SQL中,与源图片建立关联关系。在后续图片检索时,通过特征向量id查找对应图片的特征向量。process apiprocess api为get请求,提供查看图片加载的进度。调用可以看到train api运行过程中已经加载进Milvus库的图片数及总图片数。count apicount api为post请求,提供查看当前Milvus库的向量总条数,一条向量即表示一张图片。search apisearch api为post请求,在图片相似检索时调用。待搜索图片传入系统后,先通过VGG模型的vgg_extract_feat(img_path)转化为特征向量,然后调用search_vectors()在Milvus库中进行向量相似检索,返回top_k结果。通过search接口拿到前top k相似结果的向量 ids,通过与SQL库中保存的向量id进行比对获取与源图片的对应关系。delete apidelete api为post请求,用于删除Milvus库里面的表,清空之前导入的向量数据。系统部署基于Milvus搭建的以图搜图系统,通过容器化服务进行部署,主要包含Milvus docker部署、webserver docker部署和webclient docker 部署三部分(详情可参见附录)。部署完成后,浏览器输入ip:port(如localhost:8001)即可访问。下图是抽取 PASCAL VOC 图片集部分图片(约10000张图片,涵盖人物、动物、交通等20多个目录)为例的以图搜图系统界面,输入查询图片“飞机”得到的搜索结果,通过调整top_k参数,右侧结果栏即可更直观的展示相似结果信息。结语本文介绍了基于Milvus搭建以图搜图系统过程,能让测试人员不必掌握tensorflow, pytorch等深度学习框架,及opencv之类的视觉算法库即可快速感知图片的相似情况并给出更直观的判断,从而降低测试门槛。另外,基于云AI而生的Milvus特征向量库,也为后续基于kubernete的部署提供了可能。附录启动 Milvus Docker启动 Server Docker启动 Client Docker
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2024-12-27 00:59 , Processed in 0.664489 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表