跨模态检索:带你领略图文检索的魅力

2024-02-15 17:10

本文主要是介绍跨模态检索:带你领略图文检索的魅力,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

跨模态检索:带你领略图文检索的魅力

引子

作为经常“百度一下”的众多网民中的一份子,我们经常使用百度,输入要搜索的关键词,来检索要想的文本信息,此时是使用文本来检索文本;有时我们又会使用百度图片检索的功能,上传图片来寻找相似的图片,此时是以图来检索图;但我们也经常使用文本来搜索相应的图片,此时我们输入信息的类型和获得的信息的类型就不同了,我们称之为“跨模态”。

简 介

来下个专业点的定义:跨模态检索就是寻找不同模态样本之间的关系,实现利用某一种模态样本,搜索近似语义的其他模态样本。比如:利用图像来检索相应的文本,或者利用文本来检索想要的图像。当然这里模态也不仅仅限于图像和文本,如语音,生理信号,视频都可以作为跨模态检索的组成成分。

我们知道,网络的发展,让我们多媒体数据种类急速增多,比如:文本,图像,视频等,每种数据可以看作时一种模态,在同一模态中进行检索相对是简单的。如何利用一种模态,对另一种模态进行检索,就比较复杂了。

方法

想要寻求解决的方法,首先要知晓其特点。对于跨模态检索,不同的模态之间呈现出底层特征异构,高层语义相关的特点。听起来好难理解,举个例子:我们现在有个网页的主题是“老虎“,网页中文本上描述是“猫科动物,身上有条纹,爱吃肉肉blablabla”;而网页上的图片直接给出了“老虎”。这两者从语义上讲,都在描述同一主题——老虎;但是从特征上讲,文本通过字典向量来描述,而图片可以通过SIFT特征、LBP特征等等来表示,从特征描述上讲两者的类型是完全不同的。

于是,跨模态检索的主要方法就是:寻找不同模态之间的关系,将不同模态映射到同一子空间中,在此空间中我们就可以度量不同模态间的相似性了。具体而言:

  1. 首先,我们有一些训练的实列,每个实例都是一个有着标签的image-text对;
  2. 然后,将这些实列划分为source set(即训练集)和target set(即测试集),每个set中有着不相关的image-text对,但都有着同样的类别(即训练集和测试集不存在相同的image-text对,但类别是相同的);
  3. 接着,在训练时,我们从source set中学习一个公共的语义空间;
  4. 进而,将该公共的语义空间应用到target set中,从而对target set中的实列产生公共的特征表示;
  5. 最后,利用公共的特征表示就可以比对两种模态的样本的相似程度,从而进行匹配。

实例

我们以ICMR2018的一篇文章“Modal-adversarial Semantic Learning Network for Extendable Cross-modal Retrieval” 为例来具体的看利用深度学习是如何实现跨模态检索的。

在上面的方法中,source set的类别包含target set中的类别,如图1中的(a)所示:

source set中的类别是:艺术,生物,运动,战争等等,包含target set中的类别(艺术,生物,运动,战争等等)。我们称解决此问题的方法为非可扩展的跨模态检索。但是实际中往往会出现这种尴尬的情况,source set的种类并不能完全覆盖target set中的种类。我们称解决此问题的方法为可扩展的跨模态检索方法,如图1中的(b)所示。

这里写图片描述

本文旨在解决可扩展的跨模态检索问题。提出的网络结构如图2所示:

这里写图片描述

网络的输入是成对的Image-Text。然后是编码器,其中隐藏层的Code Layer用于关联两个网络的分支,意在挖掘不同模态间的关系。换言之,对于成对的输入样例,两个子网络学到的特征应该是相似的,通过一个相似度损失(Similarity loss)来实现:

fcorr(vi,ti)=fv(vi;Θr)ft(ti;Θr)22 f c o r r ( v i , t i ) = ‖ f v ( v i ; Θ r ) − f t ( t i ; Θ r ) ‖ 2 2

则,对于所有source set样例有:
Lcorr=i=1Nsfcorr(vi,ti) L c o r r = ∑ i = 1 N s f c o r r ( v i , t i )

通过优化该损失,可以减少不同模态对之间的差异。接下来我们看到了Class Embedding:将输入对的类别信息进行编码,输入网络,与Code Layer的输出特征进行拼接,构成新的特征,输入到后面的解码器中。该Class Embedding是本文解决可扩展跨模态检索问题的关键,受启发于零样本学习(Zero-shot Learning)。零样本学习的一个重要理论基础是:利用样本的高维的语义特征,使得训练得到的模型具有可迁移性。比如:一个物体的高维语义是“四条腿,喵喵叫,宠物的一种”,我们可以轻松地断定这是猫咪。实际上,作者的想法很类似与CVPR2017的一篇文章(Semantic Autoencoder for Zero-Shot Learning),使用Class Embedding作为高维的语义特征,对生成的低维的特征进行约束,使低维特征能够保留高维的语义特征。

前面拼接构成的新的特征,有两种类型,即从文本中构造的特征以及从图像中构造的特征,因为经过Code Layer层,该两种特征趋向于同一子空间,所以可以分别输入后面不同的解码器,进行重构。换言之,每个进行重构的解码器都有两种模态的输入。重构的损失为:

Lrec(vi,ti,Θr)=LI(vi,ti;Θr)+LT(vi,ti;Θr) L r e c ( v i , t i , Θ r ) = L I ( v i , t i ; Θ r ) + L T ( v i , t i ; Θ r )

其中,
LI(vi,ti;Θr)=viv^Ii22+tit^Ii22,LT(vi,ti;Θr)=viv^Ti22+tit^Ti22 L I ( v i , t i ; Θ r ) = ‖ v i − v ^ i I ‖ 2 2 + ‖ t i − t ^ i I ‖ 2 2 , L T ( v i , t i ; Θ r ) = ‖ v i − v ^ i T ‖ 2 2 + ‖ t i − t ^ i T ‖ 2 2

分别表示两个重构子网络对于两种模态的损失。实际上即约束重构的样本与原先的样本相似 ,使用欧式距离来衡量。

最后我们来看如图2所示网络结构中红色的部分。首先我们使用对抗学习的思想,引入一个简单的只有全连接层的识别器,使其无法区分输入的特征是属于哪一种模态的,从而进一步减少模态间的差异。在训练时,给每一个实例附上一个one-hot编码的标签来表示它属于哪一种模态。对抗损失为:

Ladv=1Nsi=1Nsfcross(zj,p(zj),Θa) L a d v = 1 N s ∑ i = 1 N s f c r o s s ( z j , p ( z j ) , Θ a )

其中 p() p ( ⋅ ) 表示标签指示器, fcross(x,p,θ) f c r o s s ( x , p , θ ) :是sigmoid交叉熵损失函数
fcross(x,p,θ)=p(x)log(p^(x,θ))+[1p(x)]log[1p^(x,θ)] f c r o s s ( x , p , θ ) = p ( x ) l o g ( p ^ ( x , θ ) ) + [ 1 − p ( x ) ] l o g [ 1 − p ^ ( x , θ ) ]

通过最大化该对抗损失即可进一步促使两种模特的低维特征无法区分,趋向于同一子空间。

然后对于Code Layer得到的低维特征,还是要保留语义的,即是可以用来进行分类的,与通常的多分类任务一样。使用一个带有softmax层的全连接层作为一个公共的分类层。其分类损失为:

Ldis=1Nsi=1Ns(fsoftmax(vi,yi;Θd)+fsoftmax(ti,yi;Θd))(5) (5) L d i s = 1 N s ∑ i = 1 N s ( f s o f t m a x ( v i , y i ; Θ d ) + f s o f t m a x ( t i , y i ; Θ d ) )

其中:
fsoftmax(x,y;θ)=k=1c1{y=k}log[p^(x,k,θ)](6) (6) f s o f t m a x ( x , y ; θ ) = ∑ k = 1 c 1 { y = k } l o g [ p ^ ( x , k , θ ) ]

博主觉得,如何将类别的属性信息进行编码嵌入网络是这篇文章的亮点。关于零样本学习,是个诱人深入学习的领域呢。

大家如果感兴趣可以结合论文进一步理解,传送门:
https://dl.acm.org/citation.cfm?id=3206033

这篇关于跨模态检索:带你领略图文检索的魅力的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/712001

相关文章

Window Server创建2台服务器的故障转移群集的图文教程

《WindowServer创建2台服务器的故障转移群集的图文教程》本文主要介绍了在WindowsServer系统上创建一个包含两台成员服务器的故障转移群集,文中通过图文示例介绍的非常详细,对大家的... 目录一、 准备条件二、在ServerB安装故障转移群集三、在ServerC安装故障转移群集,操作与Ser

windos server2022的配置故障转移服务的图文教程

《windosserver2022的配置故障转移服务的图文教程》本文主要介绍了windosserver2022的配置故障转移服务的图文教程,以确保服务和应用程序的连续性和可用性,文中通过图文介绍的非... 目录准备环境:步骤故障转移群集是 Windows Server 2022 中提供的一种功能,用于在多个

LinuxMint怎么安装? Linux Mint22下载安装图文教程

《LinuxMint怎么安装?LinuxMint22下载安装图文教程》LinuxMint22发布以后,有很多新功能,很多朋友想要下载并安装,该怎么操作呢?下面我们就来看看详细安装指南... linux Mint 是一款基于 Ubuntu 的流行发行版,凭借其现代、精致、易于使用的特性,深受小伙伴们所喜爱。对

手把手教你idea中创建一个javaweb(webapp)项目详细图文教程

《手把手教你idea中创建一个javaweb(webapp)项目详细图文教程》:本文主要介绍如何使用IntelliJIDEA创建一个Maven项目,并配置Tomcat服务器进行运行,过程包括创建... 1.启动idea2.创建项目模板点击项目-新建项目-选择maven,显示如下页面输入项目名称,选择

SigLIP——采用sigmoid损失的图文预训练方式

SigLIP——采用sigmoid损失的图文预训练方式 FesianXu 20240825 at Wechat Search Team 前言 CLIP中的infoNCE损失是一种对比性损失,在SigLIP这个工作中,作者提出采用非对比性的sigmoid损失,能够更高效地进行图文预训练,本文进行介绍。如有谬误请见谅并联系指出,本文遵守CC 4.0 BY-SA版权协议,转载请联系作者并注

CentOS 7 x64下安装MySql5.7图文详解

参考: https://dev.mysql.com/doc/mysql-yum-repo-quick-guide/en/ http://www.jianshu.com/p/7cccdaa2d177 http://www.linuxidc.com/Linux/2016-09/135288.htm 最近搞了台阿里云服务器,搭载的是CentOS 7系统,这里记录下mysql5.7的安装流程 查

LLM系列 | 38:解读阿里开源语音多模态模型Qwen2-Audio

引言 模型概述 模型架构 训练方法 性能评估 实战演示 总结 引言 金山挂月窥禅径,沙鸟听经恋法门。 小伙伴们好,我是微信公众号《小窗幽记机器学习》的小编:卖铁观音的小男孩,今天这篇小作文主要是介绍阿里巴巴的语音多模态大模型Qwen2-Audio。近日,阿里巴巴Qwen团队发布了最新的大规模音频-语言模型Qwen2-Audio及其技术报告。该模型在音频理解和多模态交互

Jenkins+Svn+Vue自动化构建部署前端项目(保姆级图文教程)

目录 介绍 准备工作 配置jenkins 构建部署任务 常见问题 介绍 在平常开发前端vue项目时,我们通常需要将vue项目进行打包构建,将打包好的dist目录下的静态文件上传到服务器上,但是这种繁琐的操作是比较浪费时间的,可以使用jenkins进行自动化构建部署前端vue 准备工作 准备vue项目,服务器,linux,ubuntu,centos等都可以,服务器上已经

Spring Boot 注解探秘:HTTP 请求的魅力之旅

在SpringBoot应用开发中,处理Http请求是一项基础且重要的任务。Spring Boot通过提供一系列丰富的注解极大地简化了这一过程,使得定义请求处理器和路由变得更加直观与便捷。这些注解不仅帮助开发者清晰地定义不同类型的HTTP请求如何被处理,同时也提升了代码的可读性和维护性。 一、@RequestMapping @RequestMapping用于将特定的HTTP请求映射到特定的方法上

利用PL/SQL工具连接Oracle数据库的时候,报错:ORA-12638: 身份证明检索失败的解决办法

找到相对应的安装目录:比如:E:\oracle\product\10.2.0\client_1\NETWORK\ADMIN 在里面找到:SQLNET.AUTHENTICATION_SERVICES= (NTS) 将其更改为:SQLNET.AUTHENTICATION_SERVICES= (BEQ,NONE) 或者注释掉:#SQLNET.AUTHENTICATION_SERVICES= (N