前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Milvus 实战|基于 Milvus 的图文检索系统

Milvus 实战|基于 Milvus 的图文检索系统

作者头像
Zilliz RDS
发布2021-05-17 10:49:00
2.2K2
发布2021-05-17 10:49:00
举报
文章被收录于专栏:Reinvent Data Science

本文主要介绍基于 Milvus 搭建的多模态图文检索系统。检索流程为:

1. 通过 TIRG(Text Image Residual Gating)模型将图片特征和文本特征转化为多模态特征向量。

2. 结合开源向量数据库 Milvus 对目标图像特征向量和多模态特征向量进行相似度检索。

关键技术

图像检索的关键在于图像的查询方式。不同于一般的图像检索系统,本文中的基于 Milvus 搭建的图文检索系统需要用户先输入一张图像和一段相关的图像约束文本后再进行图像查询。用户查询图像时除了输入图片,还能输入期望的图像大小、位置、颜色、形状变化等图像约束文本,图文检索系统会相应地返回满足约束条件的图像结果。对于相同的查询图像,不同的图像约束文本会得到不同的图像检索结果。

TIRG

基于 Milvus 图文检索系统使用的深度学习模型 TIRG (Text Image Residual Gating) 模型源于 2019 年收录在 CVPR(Conference on Computer Vision and Pattern Recognition )的一篇文章 《Composing Text and Image for Image Retrieval - An Empirical Odyssey》。

TIRG 模型是一种融合了文本特征和图像特征的深度学习模型,其整体实现流程如下:

1. 使用 CNN 模型 ResNet-17 提取给定查询图像的特征。

2. 使用 LSTM (Long Short Term Memory networks)模型提取图像约束文本的特征。

3. 使用门控机制(gated feature)和残差网络(residual feature)结合图像特征和文本特征。

TIRG 模型门控机制能够利用图像约束文本修改原始图像特征。更多 TIRG 模型详情,请见论文《Composing Text and Image for Image Retrieval 》[1]。

Milvus

Milvus 是一款开源的向量相似度搜索引擎,可与多种 AI 模型相结合。Milvus 提供向量化的非结构数据检索服务,目前广泛应用于图像处理、计算机视觉、自然语言处理、语音识别、推荐系统以及新药研发等领域。

Milvus 适用于多种场景,与深度学习相融合的架构如下图所示:

采用 Milvus 的数据处理流程包括以下几个步骤:

1. 与深度学习模型相结合,将非结构化数据转化为特征向量。

2. 将特征向量存储到 Milvus 并建立索引。  

3. 返回向量相似性搜索结果。  

系统介绍

本文中的图文检索系统基于 Milvus 结合 TIRG 模型和 MySQL 数据库搭建而成。

具体实现过程如下图所示:

1. 插入目标图像的特征向量:

将数据集中所有目标图像的特征向量存储至 Milvus 中。Milvus 对特征向量建立索引,并生成对应的 ID。将 ID 和对应特征向量存储于 MySQL 中。

⚠️ 目标图像指的是满足文本约束的相似图像

2. 生成多模态特征向量:

查询图像时,用户需要输入一张图片和一段特定的图像约束文本。使用深度学习模型 CNN 和 LSTM 分别提取图片特征和文本特征,通过 TIRG 模型将图片和文本特征结合成多模态特征向量。

3. 特征向量间的相似度检索:

Milvus 对多模态特征向量和 Milvus 库中目标图像的特征向量进行相似度计算,返回最为相似的图片 ID 。根据此 ID 可以在 MySQL 中获得对应的相似图像,将最终检索结果返回给用户。

系统搭建

通过以下关键步骤,我们将结合 TIRG 模型与 Milvus 搭建一个跨模态的图文检索系统。具体步骤,详见 GitHub 项目(https://github.com/milvus-io/bootcamp/blob/1.0/solutions/ctirg/Readme.md)。

本项目提供以下三个数据集,可任选其一也可采用全部数据集:

  • Fashion200k[2]
  • MIT-States[3]
  • 新合成的数据集 CSS (本项目中仅使用了本数据集)

1. 下载 TIRG 模型,部署 Python 环境,并训练模型。训练好的模型会自动保存。

代码语言:javascript
复制
git clone https://github.com/google/tirg.git   
pip install -r requirement   
python main.py --dataset=css3d --dataset_path=./CSSDataset --num_iters=160000 \ --model=tirg --loss=soft_triplet --comment=css3d_tirg  

2. 查看模型训练情况(包含训练损失, 训练集检索情况, 测试集检索情况)并视情况调整参数。

代码语言:javascript
复制
tensorboard --logdir ./runs/ --port 8888   

3. 将所有目标图像向量导入 Milvus 中并生成对应的 ID。ID 和对应特征向量存储于 MySQL 中。

代码语言:javascript
复制
status, _ = insert_vectors(index_client, milvus_table, vectors, ids)   
load_images_to_mysql(conn,cursor,milvus_table,ids,Image_path) 

4. 通过多模态向量在 Milvus 中对目标图像向量进行相似度检索并返回相似图片的 ID。在 MySQL 数据库中使用该 ID 查找对应的目标图片信息。

代码语言:javascript
复制
sql = "select * from " + imgs_table + " where milvus_id=" + str_ids + ";"   
results = cursor.execute(sql).fetchall()  

总结

本文中基于 Milvus 搭建的图文检索系统是计算机视觉领域中的新兴研究热点和发展方向。未来,Zilliz 还将不断改进此图文检索系统,提高检索的准确率。

Milvus 向量相似度检索引擎可以兼容各种深度学习平台,搜索十亿向量仅需毫秒响应时间。Milvus 可以运用于图像检索和产品搜索 (Image retrieval and product search)、视觉问答(Visual Question Answering)、成分学习(Compositional Learning)等场景。更多应用场景,详见 Milvus 应用场景(https://milvus.io/cn/scenarios)。

欢迎任何对 Milvus 感兴趣的小伙伴加入我们一起解锁更多的应用场景和更有趣的玩法!

参考文献

[1] Composing Text and Image for Image Retrieval - An Empirical CVPR 2019.

[2] X. Han, Z. Wu, P. X. Huang, X. Zhang, M. Zhu, Y. Li, Y. Zhao, and L. S. Davis. Automatic spatially-aware fashion concept discovery. In ICCV, 2017

[3] P. Isola, J. J. Lim, and E. H. Adelson. Discovering states and transformations in image collections. In CVPR, 2015

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-05-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 ZILLIZ 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 关键技术
  • 系统介绍
  • 系统搭建
  • 总结
    • 参考文献
    相关产品与服务
    智能推荐平台
    智能推荐平台(Intelligent Recommendation Platform,IRP)是集生态、技术、场景于一体,采用业界领先的AI学习技术和智能推荐算法,基于腾讯多年在超大型场景中积累的最佳实践方法论,助力客户业务实现增长的企业级应用产品。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档