解读亚马逊云科技语义搜图检索方案

 图像检索(包括文搜图和图搜图)是各个行业中常见的一个应用场景。比如在电商场景中,基于以图搜图做相似商品查找;在云相册场景中,基于文搜图来找寻所需的图像素材。

 传统基于标签的图像检索方式,即先使用目标检测/图像分类产品(如亚马逊云科技Amazon Rekognation)产生图片标签,再存储标签并在检索时匹配标签,存在一些局限性。第一是该方法受限于产品本身支持的标签数量,比如Amazon Rekognation支持3000个左右的标签,对于标签之外的目标无法检测并检索。第二是标签检索对动词、数量、方位等信息不敏感。诸如“两个孩子在一栋房子前面奔跑”,会出现包含“孩子,房子”标签的图像,但容易忽略“两个,前面,奔跑”等信息。

 下文将将介绍两种基于语义的搜图检索方式以及部署方案,可以实际测试两种方式在特定应用场景下的搜索率以及搜索的准确性,并选择更加适合的方案使用。

 方案一:利用CLIP模型的文本编码器和图像编码器,将图像和文本放入同一维度的潜在向量空间中,找到与文本向量最相近的图像向量以实现基于语义的图像搜索。如下图所示,可以看到图像对应的Image embedding在向量空间的位置,不同文本会同样被编码至向量空间中,当图像和文字语义最相近时,其Image embedding和Text embedding的余弦距离最近。

 方案二:利用图生文模型(案例使用vit-gpt2-image-captioning模型,可替换)先对图像产生对应的文本描述,再将生成的图片描述文本与查询文本放入同一维度的潜在向量空间中,找到与查询文本向量最相近的描述文本向量所对应的图像,以实现基于语义的图像搜索。如下图所示,可以看到图像经过vit-gpt2-image-captioning模型后,产生“a black and white dog and a brown and white dog”的描述文本。对于语义最相近的文本,其Text embedding之间的余弦距离最近。

 CLIP模型介绍

 CLIP(Contrastive Language-Image Pre-Training)是由OpenAI于2021年推出的一种深度学习模型。它主要包含两个组成部分:一个用于图像编码的卷积神经网络(Convolutional Neural Network,CNN)和一个用于文本编码的Transformer模型。这两个编码器将图像和文本编码输入至相同的潜在向量空间中,并使得相似的图像和文本在潜在向量空间中的距离更近。

 vit-gpt2-image-captioning模型介绍

 vit-gpt2-image-captioning模型利用Vision Transformer(例如ViT、BEiT、DeiT、Swin)对图像进行编码,然后基于预训练的语言模型(例如RoBERTa、GPT2、BERT、DistilBERT)产生文本,从而实现“看图说话”的能力。

 OpenSearch k-NN介绍

 Amazon OpenSearch支持k-NN搜索,可让在向量空间中通过欧几里得距离或余弦距离查找点之间的“最近邻”。在语义搜图检索方案中,主要包括两个阶段:

  • 构建k-NN index——在此阶段,将产生的图像向量,或描述文本向量,保存到OpenSearch服务中的k-NN index中。k-NN的基本概念是相似数据点存在于嵌入空间中非常接近的位置。例如,文本“一朵红花”、文本“红玫瑰”和“红玫瑰”图像语义相似,因此这些文本和图像在潜在向量空间的位置是彼此接近的。

  • 查询k-NN index——在此阶段,通过实时机器学习模型对查询文本或者图像进行编码,形成向量。随后使用该文本向量来查询存储在OpenSearch服务中的k-NN index,k-NN index从潜在向量空间返回相似的向量。例如,如果您的查询文本是“一朵红花”,它将返回红玫瑰图像的向量作为类似的项目。

 方案架构

 整体方案架构及介绍如下:

  • 通过预训练的CLIP模型和vit-gpt2-image-captioning模型创建一个用来进行批量和实时推理的SageMaker模型。

  • 使用SageMaker批量转换作业生成图像Embedding或图像描述文本Embedding。

  • 使用SageMaker实时推理(或无服务器推理)来将图像和文本进行实时编码,产生图像Embedding或图像描述文本Embedding。

  • 使用Amazon Simple Storage Service(Amazon S3)作为主要存储服务,存储原始图像以及SageMaker批量转换作业产生的Embedding文件。

  • 使用OpenSearch服务来存储向量并查找相关的向量。

  • 使用一个查询函数来编排查询编码并执行k-NN搜索。

 该方案具有以下优势:

  • 灵活构建。可以非常方便的替换CLIP模型或vit-gpt2-image-captioning模型至其他模型,只需要在SageMaker上创建相关模型并部署终端节点即可;也可以替换OpenSearch使用其他的向量数据库。

  • 可快速构建大规模生产应用。该方案基于SageMaker,OpenSearch,S3等服务构建,生产应用时无需过多担心资源限制及拓展,帮助您在快速进行场景测试后进入大规模生产应用。

 结语

 综上所诉,探究了基于CLIP模型和图生文模型的语义搜图检索方案,适用于以图搜图做相似商品查找、基于文搜图来找寻所需的图像素材等众多场景。并且此方案具有灵活构建的特性,并可以快速构建大规模生产应用的优势,有助于客户提高生产效率。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/95752.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

信息系统项目管理师(第四版)教材精读思维导图-第七章项目立项管理

请参阅我的另一篇文章,综合介绍软考高项: 信息系统项目管理师(软考高项)备考总结_计算机技术与软件专业技术_铭记北宸的博客-CSDN博客 本章思维导图PDF格式 本章思维导图XMind源文件 ​ 目录 7.1 项目建议与立项申请 7.2 项目可…

无门槛访问ChatGPT升级版-数据指北AI

大家好,我是脚丫先生 (o^^o) 给小伙伴们介绍ChatGPT升级版不需要任何门槛,不需要单独搞账号,只要邮箱登录的方式,即可访问平台,以用户体验为首要,让所有人都能无门槛的使用目前市面上最强大的AI智能聊天&a…

飞凌嵌入式受邀参加「RISC-V芯片应用交流会」并发表主题演讲

8月23日下午,在第三届RISC-V中国峰会现场,由赛昉科技主办的「RISC-V芯片应用交流会」吸引了诸多行业伙伴和专家到场参与。此次会议旨在分享赛昉科技高性能RISC-V芯片的软件生态、应用产品、解决方案等全面进展,共同探讨RISC-V芯片的未来发展和…

基于硬件隔离增强risc-v调试安全2_安全提议

安全之安全(security)博客目录导读 2023 RISC-V中国峰会 安全相关议题汇总 说明:本文参考RISC-V 2023中国峰会如下议题,版权归原作者所有。

Git操作

Git 操作方法 Git 是一个分布式版本控制系统,用于管理项目的源代码。 gitee新建仓库提示如下 具体介绍看下面 1. 创建仓库 初始化本地仓库 使用以下命令在本地目录中初始化一个新的 Git 仓库: git init克隆远程仓库 使用以下命令克隆一个远程仓库…

动态维护直径 || 动态维护树上路径 || 涉及LCA点转序列 || 对欧拉环游序用数据结构维护:1192B

https://www.luogu.com.cn/problem/CF1192B 对于直径的求法,常用dp或两次dfs,但如果要动态维护似乎都不太方面,那么可以维护树上路径最大值。 树上路径为: d e p u d e p v − 2 d e p l c a ( u , v ) dep_udep_v-2\times de…

Mybatis参数(parameterType)

在此之前,我们已经介绍了Mybatis的一些基本用法,包括了Mybatis查询数据、结果映射(resultMap)等。本篇我们主要介绍Mybatis在查询数据时如何传递参数。 一、准备工作 这里我们直接使用脚本初始化数据库中的数据 -- 如果数据库不…

Java网络爬虫——jsoup快速上手,爬取京东数据。同时解决‘京东安全’防爬问题

Java网络爬虫——jsoup快速上手,爬取京东数据。同时解决‘京东安全’防爬问题 介绍 网络爬虫,就是在浏览器上,代替人类爬取数据,Java网络爬虫就是通过Java编写爬虫代码,代替人类从网络上爬取信息数据。程序员通过设定…

C# 添加现有的窗体的时候,为何窗体的控件不显示了?

背景 有的项目中一些功能是可以复用的,将原始项目中的窗体文件添加到新项目时,发现有一些问题。添加完之后,打开的窗体发现没有显示任何控件,窗体的大小还变小了? 原始的添加操作 将Form1.cs Form1.resx Form1.Desi…

ES6中的箭头函数(arrow function)与普通函数的不同之处

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 语法简洁⭐ 没有自己的this⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅!这个专栏是为那些对Web开发感兴趣、…

C语言_初识C语言指针

文章目录 前言一、指针 ... 一个内存单元多大比较合适?二、地址或者编号如何产生?三、指针变量的大小 前言 内存是电脑上特别重要的存储器,计算机中程序的运行都是在内存中进行的。 所以为了有效的使用内存,就把内存划分成一个个…

Java 中数据结构HashSet的用法

Java HashSet HashSet 基于 HashMap 来实现的,是一个不允许有重复元素的集合。 HashSet 允许有 null 值。 HashSet 是无序的,即不会记录插入的顺序。 HashSet 不是线程安全的, 如果多个线程尝试同时修改 HashSet,则最终结果是…

美团 Flink 资源调度优化实践

摘要:本文整理自美团数据平台计算引擎组工程师冯斐,在 Flink Forward Asia 2022 生产实践专场的分享。本篇内容主要分为四个部分: 相关背景和问题解决思路分析资源调度优化实践后续规划 点击查看原文视频 & 演讲PPT 一、相关背景和问题 在…

Java eight 解读流(Stream)、文件(File)、IO和异常处理的使用方法

目录 Java 流(Stream)、文件(File)和IO读取控制台输入读写文件FileInputStreamFileOutputStream Java目录 Java 异常处理 Java 流(Stream)、文件(File)和IO java.io 包几乎包含了所有操作输入、输出需要的类。所有这些流类代表了输入源和输出目标。 Java.io 包中的流支持很多种…

Go操作各大消息队列教程(RabbitMQ、Kafka)

Go操作各大消息队列教程 1 RabbitMQ 1.1 概念 ①基本名词 当前市面上mq的产品很多,比如RabbitMQ、Kafka、ActiveMQ、ZeroMQ和阿里巴巴捐献给Apache的RocketMQ。甚至连redis这种NoSQL都支持MQ的功能。 Broker:表示消息队列服务实体Virtual Host&#x…

Java生成二维码(前后端分离项目实战)

📍 本文代码已放置 github:Mr-Write/SpringbootDemo: 各种demo案例 (github.com) 文章目录 1.ZXing1.1 概念1.2 ZXing 相关依赖1.3 zxing常用API🍀 EncodeHintType(编码提示类型)🍀 MultiFormatWriter&…

Android Activity启动过程一:从Intent到Activity创建

关于作者:CSDN内容合伙人、技术专家, 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 ,擅长java后端、移动开发、人工智能等,希望大家多多支持。 目录 一、概览二、应用内启动源码流程 (startActivity)2.1 startActivit…

财务数据分析?奥威BI数据可视化工具很擅长

BI数据可视化工具通常是可以用户各行各业,用于不同主题的数据可视化分析,但面对财务数据分析这块难啃的骨头,能够好好地完成的,还真不多。接下来要介绍的这款BI数据可视化工具不仅拥有内存行列计算模型这样的智能财务指标计算功能…

我们的第一个 Qt 窗口程序

Qt 入门实战教程(目录) Windows Qt 5.12.10下载与安装 为何使用Qt Creator开发QT 本文介绍用Qt自带的集成开发工具Qt Creator创建Qt默认的窗口程序。 本文不需要你另外安装Visual Studio 2022这样的集成开发环境,也不需要你再在Visual St…

精准高效农业作业,植保无人机显身手

中国作为农业大国,拥有约18亿亩的农田,每年都需要进行种子喷洒和农药施用等农业作业,对于普通农户来说,这是一项耗时耗力的工程,同时,人工喷洒农药极易造成农药慢性中毒,对农民的身体健康产生极…