本文主要介绍基于 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

Milvus 实战|基于 Milvus 的图文检索系统相关推荐

  1. Milvus 实战 | 基于 Milvus 的图像查重系统

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

  2. 手把手写深度学习(16):用CILP预训练模型搭建图文检索系统/以图搜图/关键词检索系统

    前言:CLIP is all yuo need!CLIP在text-to-image.图像检索.视频理解.图像编辑.自监督学习等领域都展示了极强的统治力,这篇博客手把手教大家搭建自己的图文检索系统,能 ...

  3. opencv图像配准_Milvus 实战 | 基于 Milvus 的图像查重系统

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

  4. 万方数据基于PaddleNLP的文献检索系统实践

    又是一年开学季,看着大批莘莘学子步入高校,同时又有大批学生即将面临毕业,这一年要饱受论文的洗礼.在学术论文领域,几乎每一位大学生都避不开论文检索.查重环节.想写出一篇高质量论文,前期大量的信息储备必不 ...

  5. python优秀源码新闻系统_[内附完整源码和文档] 基于python的新闻检索系统

    1 系统介绍 1.1 系统需求 新闻检索系统:定向采集不少于 4 个中文社会新闻网站或频道,实现这些网站新闻信息及评论信息的自动爬取.抽取.索引和检索.本项目未使用 lucene,Goose 等成熟开 ...

  6. [内附完整源码和文档] 基于python的新闻检索系统

    1 系统介绍 1.1 系统需求 新闻检索系统:定向采集不少于 4 个中文社会新闻网站或频道,实现这些网站新闻信息及评论信息的自动爬取.抽取.索引和检索.本项目未使用 lucene,Goose 等成熟开 ...

  7. 基于Web的搜索引擎检索系统(Java+Lucene+SqlServer)

    目 录 目 录 IV 1 绪论 1 1.1 项目背景 1 1.2 国内外发展现状及分类 2 1.3 本论文组织结构介绍 3 2 相关技术介绍 5 2.1什么是搜索引擎 5 2.2 sqlserver数 ...

  8. Milvus实战| 以图搜视频系统

    以图搜视频,顾名思义就是拿一张图片去视频底库里面搜索包含相似镜头的视频.以图搜视频中一个关键的步骤就是视频向量化,视频向量化即在视频中抽取关键帧,对每帧视频进行特征提取,将其转化为结构化的向量.至此, ...

  9. 基于内容的视频信息检索系统

    基于内容的视频信息检索系统 汪志强 (江西财经大学信息管理学院 09信息管理与信息系统2班) 摘 要: 本文从基于内容的视频信息检索技术的发展历史出发,对基于内容的视频检索系统的技术要点及主要的功能模 ...

最新文章

  1. Android导入工程提示Invalid project description
  2. k8s使用volume将ConfigMap作为文件或目录直接挂载_从零开始入门 K8s | 如何实现应用配置管理?...
  3. RDS for MySQL Mysqldump常见问题及处理
  4. mysql密码安全级别_Mysql数据库的安全性问题释疑
  5. scrapy框架异常--no more duplicates will be shown (see DUPEFILTER_DEBUG to show all duplicates)
  6. 上海地图全图可放大_好书·推荐丨第一次将近代上海行号与地图合并在路图中,你知道是哪本书吗?...
  7. activeti user guide 中文_【澳洲大岩石】最好季节发团!省掉800澳币!无比震撼特价 再次应约出发 震撼之旅!一生难忘!全程中文导游!省心放心澳洲青年旅行社...
  8. 公司组织框架以及人员信息同步到钉钉相关解决方案
  9. IJCAI阿里论文 | JUMP: 一种点击和停留时长的协同预估器...
  10. Zen Cart对空间或主机的要求
  11. 并发编程(6)基于锁的并发数据结构设计
  12. Java实现二分查找算法(非递归)
  13. stl文件用proe怎么打开_3D建模软件Proe怎么转换3d打印的stl文件?
  14. 众包专访:开源众包让我安心——开源中国众包使用记录
  15. 搞一个yyds的京东登录页面
  16. android 12.0 wifi开关控制功能实现
  17. SQLSERVER2000--验证码一直不能通过验证
  18. 关键链项目管理(一) - TOC, 约束理论
  19. linux内核配置nfs,【参赛手记】开启Digilent提供的Linux内核的NFS支持
  20. Arduino笔记实验(初级阶段)—Keypad小键盘

热门文章

  1. 手机APP测试(四)
  2. RTSP在线视频流资源地址
  3. 安装CPU版本的pytorch
  4. w10虚拟服务器,利用win10自带虚拟机功能轻松打造家用nas
  5. c# 操作剪切板,复制文本或文件
  6. 手机客户端登录流程及风险说明
  7. java easing_jQuery animate easing使用实例方法
  8. kms激活win10 cmd命令版本附win10镜像链接
  9. gg修改器怎么编写lua脚本
  10. 【HaaS Python适配】AliOS-Things HAAS-Python ESP32-C3开发板适配和编译