当前位置: 首页 > news >正文

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

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

 传统基于标签的图像检索方式,即先使用目标检测/图像分类产品(如亚马逊云科技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模型和图生文模型的语义搜图检索方案,适用于以图搜图做相似商品查找、基于文搜图来找寻所需的图像素材等众多场景。并且此方案具有灵活构建的特性,并可以快速构建大规模生产应用的优势,有助于客户提高生产效率。

相关文章:

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

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

git基本使用

1、创建仓库,提交代码 Git 全局设置: git config --global user.name "许歌" //全局绑定用户名 git config --global user.email "12075507xu-ge111user.noreply.gitee.com" //全局绑定邮箱创建 git 仓库: mkdir t…...

为C# Console应用化个妆

说到Windows的cmd,刻板印象就是黑底白字的命令行界面。跟Linux花花绿绿的界面比,似乎单调了许多。但其实C#开发的Console应用也可以摆脱单调非黑即白的UI。 最近遇到个需求,要在一堆纯文本文件里找指定的关键字(后续还要人肉判断…...

VUE环境下 CSS3+JS 实现发牌 翻牌

创建牌容器&#xff08;关键点&#xff1a;overflow&#xff1a;hidden&#xff09;&#xff1a; <div class"popup-box"></div> .popup-box {position: absolute;width: 100vw;height: 100vh;top: 0px;left: 0;overflow: hidden; } 创建每一张牌《固…...

WSL Opencv with_ffmpeg conan1.60.0

我是ubuntu18. self.options[“opencv”].with_ffmpeg True 关键是gcc版本需要conan支持&#xff0c;比如我的是&#xff1a; compilergcc compiler.version7.5 此外还需要安装系统所需库&#xff1a; https://qq742971636.blog.csdn.net/article/details/132559789 甚至来…...

Android中正确使用Handler的姿势

在Android中&#xff0c;Handler是一种用于在不同线程之间传递消息和任务的机制。以下是在Android中正确使用Handler的一些姿势&#xff1a; 1. 在主线程中创建Handler对象 在Android中&#xff0c;只有主线程&#xff08;也称为UI线程&#xff09;可以更新UI。因此&#xff…...

webSocket前后端交互pc端版

前端代码 <!--* Author: 第一好帅宝* Date: 2023-08-29 16:12:26* LastEditTime: 2023-08-29 16:54:50* FilePath: \websocket\ceshi.html --> <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name&…...

Java-day13(枚举与注解)

枚举与注解 枚举 1.自定义枚举 如果枚举只有单个成员&#xff0c;则可以作为单例模式的实现方式 public class test{ public static void main(String[] args) { Season spring Season.spring;System.out.println(spring);spring.show();System.out.println(…...

vue PDF或Word转换为HTML并保留原有样式

方法一 要将PDF或Word转换为HTML并保留原有样式&#xff0c;可以使用pdfjs-dist和mammoth.js这两个库。首先需要安装这两个库&#xff1a; npm install pdfjs-dist mammoth.js然后在Vue项目中使用这两个库进行转换&#xff1a; import * as pdfjsLib from pdfjs-dist; impor…...

华硕笔记本摄像头倒置怎么办?华硕笔记本摄像头上下颠倒怎么调整

笔记本电脑相较于台式电脑&#xff0c;更易携带&#xff0c;解决了很大一部分人的使用需求。但是笔记本电脑也存在很多不足&#xff0c;比如华硕笔记本电脑就经常会出现摄像头倒置的错误&#xff0c;出现这种问题要如何修复呢&#xff1f;下面就来看看详细的调整方法。 华硕笔记…...

本地套接字通信

1.本地套接字 本地套接字的作用&#xff1a;本地的进程间通信 有关系的进程间的通信 没有关系的进程间的通信 本地套接字实现流程和网络套接字类似&#xff0c;一般采用TCP的通信流程 2.本地套接字通信的流程 - tcp // 服务器端 1.创建监听的套接字int lfd socket(AF_U…...

数据结构(Java实现)-优先级队列(堆)

队列是一种先进先出(FIFO)的数据结构&#xff0c;但有些情况下&#xff0c;操作的数据可能带有优先级&#xff0c;一般出队 列在这种情况下&#xff0c;数据结构应该提供两个最基本的操作&#xff0c;一个是返回最高优先级对象&#xff0c;一个是添加新的对象。 这种数据结构就…...

算法通关村第8关【黄金】| 寻找祖先问题

思路&#xff1a;递归三部曲 第一步&#xff1a;确定参数和返回值 题目要求找到指定的结点&#xff0c;就需要返回结点。 题目又涉及到p,q就需要传入p,q&#xff0c;需要遍历传入root 第二步&#xff1a;确定终止条件 当遍历到结点为空说明到底没找到返回空 或者遍历到p,…...

栈和队列(详解)

一、栈 1.1、栈的基本概念 1.1.1、栈的定义 栈&#xff08;Stack&#xff09;&#xff1a;是只允许在一端进行插入或删除的线性表。首先栈是一种线性表&#xff0c;但限定这种线性表只能在某一端进行插入和删除操作。 栈顶&#xff08;Top&#xff09;&#xff1a;线性表允许…...

iOS开发Swift-3-UI与按钮Button-摇骰子App

1.创建新项目Dice 2.图标 删去AppIcon&#xff0c;将解压后的AppIcon.appiconset文件拖入Assets包。 3.将素材点数1-6通过网页制作成2x&#xff0c;3x版本并拖入Asset。 4.设置对应的UI。 5.拖入Button组件并设置style。 6.Ctrl加拖拽将Button拖拽到ViewController里&#xff0…...

1、[春秋云镜]CVE-2022-32991

文章目录 一、相关信息二、解题思路&#xff08;手注&#xff09;三、通关思路&#xff08;sqlmap&#xff09; 一、相关信息 靶场提示&#xff1a;该CMS的welcome.php中存在SQL注入攻击。 NVD关于漏洞的描述&#xff1a; 注入点不仅在eid处&#xff01;&#xff01;&#xff…...

pdf如何删除其中一页?了解一下这几种删除方法

pdf如何删除其中一页&#xff1f;随着电子文档的广泛应用&#xff0c;PDF已成为最常见的文档格式之一。然而&#xff0c;有时候你可能会发现&#xff0c;你的PDF文档中包含了一些多余的页面&#xff0c;或者你需要删除其中的某一页。那么&#xff0c;该如何删除PDF中的页面呢&a…...

PO设计模式是selenium自动化测试中最佳的设计模式之一

Page Object Model&#xff1a;PO设计模式是selenium自动化测试中最佳的设计模式之一&#xff0c;主要体现在对界面交互细节的封装&#xff0c;也就是在实际测试中只关注业务流程就OK了传统的设计中&#xff0c;在新增测试用例之后&#xff0c;代码会有以下几个问题&#xff1a…...

yolov8使用C++推理的流程及注意事项

1.下载yolov8项目源码GitHub - ultralytics/ultralytics: NEW - YOLOv8 &#x1f680; in PyTorch > ONNX > OpenVINO > CoreML > TFLite 2.下载opencvReleases - OpenCV,建议版本>4.7.0,选择下载源码&#xff0c; windows版本由于使用的编译器与我们所使用的m…...

深度思考计算机网络面经之二

HTTP2和1.1的区别 HTTP 2.0 和 HTTP 1.1 相比有哪些优势呢&#xff1f; HTTP1.1的队头阻塞问题 服务器必须按照请求接收的顺序来响应&#xff0c;为什么 是因为传统的1.1中没有特定字段来区分一个请求属于哪个&#xff0c;只能按照请求的物理顺序返回&#xff0c; HTTP2解…...

老年人跌倒智能识别算法 opencv

老年人跌倒智能识别算法通过opencvpython深度学习算法框架模型&#xff0c;老年人跌倒智能识别算法能够及时发现老年人跌倒情况&#xff0c;提供快速的援助和救援措施&#xff0c;保障老年人的安全。Python是一种由Guido van Rossum开发的通用编程语言&#xff0c;它很快就变得…...

ros2官方文档(基于humble版本)学习笔记

ros2官方文档&#xff08;基于humble版本&#xff09;学习笔记&#xff08;一&#xff09; 一、安装ROS2二、按教程学习1.CLI 工具配置环境 由于市面上专门讲ROS2开发的书籍不多&#xff0c;近期看完了《ROS机器人开发实践》其中大部分内容还是基于ROS1写的&#xff0c;涉及top…...

可拖动表格

支持行拖动&#xff0c;列拖动 插件&#xff1a;sortablejs UI: elementUI <template><div><hr style"margin: 30px 0;"><div><!-- 数据里面要有主键id&#xff0c; 否则拖拽异常 --><h2 style"margin-bottom: 30px&qu…...

C++语法基础

这里写目录标题 基础语法第一个程序变量常量的定义关键字标识符命名 &#xff08;变量命名&#xff09;sizeof的使用实型&#xff08;浮点型&#xff09;字符型转义字符字符串的定义 一级目录二级目录二级目录二级目录 一级目录二级目录二级目录二级目录 基础语法 第一个程序 …...

Windi CSS和Tailwind CSS以及UnoCSS

最近合作在写一个vue3ts的项目&#xff0c;看到其他人用了一种写法&#xff0c;我觉得很奇怪&#xff0c;之前没见过&#xff0c;他是这样写的 <div class"news flex-1 h-40px flex"></div>我不理解的是为什么这样写就会让这个div的高度就是40px,好多代码…...

c++ opencv将彩色图像按连通域区分

要将彩色图像按连通域区分&#xff0c;您可以使用 OpenCV 中的 cv::connectedComponents 函数。 下面是一个简单的示例代码&#xff0c;说明如何使用 cv::connectedComponents 函数来检测并标记图像中的连通域&#xff1a; #include <opencv2/opencv.hpp> #include <…...

〖程序员的自我修养 - 认知剖析篇⑩〗- 学习编程的高效率方法

人之所以会觉得迷茫,本质上是欠缺对自己的一个控制力、识别庞杂信息、去伪存真的独立思考与认知能力。 说明:该文属于 程序员的自我修养 专栏,购买任意白宝书体系化专栏可加入易编程社区,早鸟价订阅模式除外。福利:加入社区的小伙伴们,除了可以获取博主所有付费专栏的阅读…...

前端基础1——HTML标记语言

文章目录 一、基本了解二、HTML常用标签2.1 文本格式化标签2.2 列表标签2.3 超链接标签2.4 图片标签2.5 表格标签2.6 表单标签2.6.1 提交表单2.6.2 下拉表单2.6.3 按钮标签 2.7 布局标签 一、基本了解 网页组成&#xff08;index.html页面&#xff09;&#xff1a; HTML标记语言…...

2.1: Dubbo的基本应用-负载均衡,集群容错,服务降级

负载均衡 官网地址&#xff1a; http://dubbo.apache.org/zh/docs/v2.7/user/examples/loadbalance/ 如果在消费端和服务端都配置了负载均衡策略&#xff0c; 以消费端为准。 这其中比较难理解的就是最少活跃调用数是如何进行统计的&#xff1f; 讲道理&#xff0c; 最少活跃数…...

正则常见问题及解决方案

使用正则处理问题的基本思路。有一些方法比较固定&#xff0c;比如将问题分解成多个小问题&#xff0c;每个小问题见招拆招&#xff1a;某个位置上可能有多个字符的话&#xff0c;就⽤字符组。某个位置上有多个字符串的话&#xff0c;就⽤多选结构。出现的次数不确定的话&#…...