专栏首页Reinvent Data ScienceMilvus 实战|基于 Milvus 的图文检索系统

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

本文主要介绍基于 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 环境,并训练模型。训练好的模型会自动保存。

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. 查看模型训练情况(包含训练损失, 训练集检索情况, 测试集检索情况)并视情况调整参数。

tensorboard --logdir ./runs/ --port 8888   

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

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 查找对应的目标图片信息。

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

本文分享自微信公众号 - ZILLIZ(Zilliztech),作者:贾晶晶

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-05-11

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Milvus 实战 | 基于 Milvus 的食谱检索系统

    现在,社交媒体、电商网站以及短视频应用源源不断地产生大量多模态数据。这些数据包含了自然语言、视觉信号、声音信号等多种类型。由于单一模式的数据分析已经不能满足日益...

    Zilliz RDS
  • 拥抱云原生,Milvus v2.0 发布现场回顾 | 附Meetup讲师PPT和视频

    继今年 3 月发布 Milvus 1.0 版本,时隔 3 个月,Milvus 2.0 应云而生。

    Zilliz RDS
  • 海量数据中搜索精华价值:Milvus助力头部企业打造前沿AI搜索

    在今天这个大数据无处不在的时代,如何高效精确地对海量数据进行处理和分析,是摆在各行业头部企业与软件开发团队面前的重大挑战。传统的结构化、半结构化数据领域有着较为...

    深度学习与Python
  • Milvus 到底有多少种玩法?这份攻略合集请收好!

    Milvus 是一款开源的向量相似度搜索引擎,支持使用多种 AI 模型将非结构化数据向量化,并为向量数据提供搜索服务。Milvus 集成了 Faiss、Anno...

    Zilliz RDS
  • AI 搜房,贝壳找房的Milvus实践

    贝壳作为一家房产服务互联网平台,如何在海量房源中选出能够快速成交的房源是对平台和经纪人来说都是一件非常重要同时具有挑战的事情,但是针对房型图,户型信息等一系列非...

    Zilliz RDS
  • 基于 Milvus 的以图搜图系统 2.0

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

    Zilliz RDS
  • Milvus 与 ONNX 格式的多种模型结合应用

    开放神经网络交换(Open Neural Network Exchange,简称 ONNX)是一个开放的生态系统,它提供了基于人工智能模型的一种开源格式。自 2...

    Zilliz RDS
  • Milvus 实战 | 基于 Milvus 的 CORD-19 论文检索引擎

    论文检索是指根据用户输入的信息从大量的论文集合中查找出相关文本的一种技术。论文检索作为信息检索的一种,常用于搜索引擎、数字图书馆等领域,是信息检索技术的一个重要...

    Zilliz RDS
  • Milvus 实战|生物多因子认证系列 (二):人脸识别

    视觉 AI 作为一个已经发展成熟的技术领域,具有丰富的应用场景和商业化价值,全球 40% 的 AI 企业都集中在视觉 AI 领域。近年来,视觉 AI 除了在智能...

    Zilliz RDS
  • Milvus开源向量搜索引擎,轻松搭建以图搜图系统

    当您听到“以图搜图”时,是否首先想到了百度、Google 等搜索引擎的以图搜图功能呢?事实上,您完全可以搭建一个属于自己的以图搜图系统:自己建立图片库;自己选择...

    Zilliz RDS
  • 基于 Milvus 的音频检索系统

    人可以通过听觉感知位置、运动、音调、音量、旋律并获取信息。日常生活中,音频是一种重要的多媒体数据,我们会收听电台节目、欣赏在线音乐等。

    Zilliz RDS
  • 重磅!Milvus 论文入选数据库顶会 SIGMOD’21

    近日,介绍开源向量数据库系统 Milvus 的技术论文 “Milvus: A Purpose-Built Vector Data Management Syst...

    Zilliz RDS
  • Milvus 实战 | 基于 Milvus 的图像查重系统

    由于巨大的利益,论文造假屡见不鲜,在部分国家或地区甚至形成了论文造假的产业链。目前大部分论文查重系统只能检查论文文字,不能检查图片。因此,论文图片查重已然成为了...

    Zilliz RDS
  • 基于 Milvus 的钓鱼网站检测

    在海量信息中,不乏非法分子利用网络骗取用户信任并从中获利,钓鱼网站就是其中之一。“钓鱼”网站的网址、网页内容、布局等与真实网站极其相似,没有安全意识的网民容易因...

    Zilliz RDS
  • Milvus 在趋势科技的实践

    趋势科技(TrendMicro)是一家全球领先的信息安全软件公司,专为全球软件厂商及个人用户提供安全解决方案。本文作者目前负责构建移动安全 APP 和开发基础设...

    Zilliz RDS
  • 基于 Milvus 的跨模态行人检索

    近年来,由于跨模态数据的快速增长,跨模态检索备受关注。它以一种类型的数据作为查询,来检索另一种类型的相关数据。例如,用户可以用一段文字来检索相关的图片或视频。由...

    Zilliz RDS
  • Milvus 在唯品会搜索推荐的实践

    随着互联网数据规模的爆炸式增长,当前主流电商平台的商品品类及数量越来越多,用户却越来越难以便捷地找到自己需要的产品。

    Zilliz RDS
  • Milvus 赋能 AI 药物研发

    新药研发领域长期以来都以耗时长、成本高、风险大、回报率低而著称,一款新药的平均研发成本已经高达 26 亿美元,而平均耗时需要十年。尽管付出了如此高昂的研发成本和...

    Zilliz RDS
  • 基于 Google Colab 的 Milvus 使用教程

    Milvus 是一款开源的向量相似度搜索引擎,集成了 Faiss、NMSLIB、Annoy 等广泛应用的向量索引库,并提供了一整套简单直观的 API。Milvu...

    Zilliz RDS

扫码关注云+社区

领取腾讯云代金券