跨模态语义关联对齐检索-图像文本匹配(Image-Text Matching)CVPR2022
论文链接:Negative-Aware Attention Framework for Image-Text Matching (基于负感知注意力的图文匹配,CVPR2022)
代码主页:https://github.com/CrossmodalGroup/NAAF
主要优势 (Highlights):
1)不额外添加任何学习参数前提下,在基础基线SCAN上取得显著性能提升,达到SOTA;
2)模型设计简单有效,只需要SCAN 的文本-图像(Text-to-Image)单方向计算,可以大幅减少基于注意力的匹配方法检索耗时。注意的是,本文设计的不匹配挖掘模块中的相关性和不相关性采样,只需要在训练中执行,因此,不额外增加任何推理计算负担。
3)显式的跨模态语义对齐相关性和不相关性学习。结合最优的相关性区分学习,构造一种联合的优化框架,实现更加精确的细粒度语义对齐。
一、前言
图像文本匹配任务定义:也称为跨模态图像文本检索,即通过某一种模态实例, 在另一模态中检索语义相关的实例。例如,给定一张图像,查询与之语义对应的文本,反之亦然。具体而言,对于任意输入的文本-图像对(Image-Text Pair),图文匹配的目的是衡量图像和文本之间的语义相似程度。
图1 图文匹配的输入和输出
核心挑战:图像文本跨模态语义关联致力于弥合视觉模态和语言模态之间的语义鸿沟,目的是实现异质模态(底层像素组成的图像和高层语义向量表示的文本)间的准确语义对齐,即挖掘和建立图像和文本的跨模态语义一致性关联对应关系。
现状分析:现有的图像文本图像文本匹配工作可以大致分为两类:1)全局关联:以整个文本和图像作为对象学习语义关联;2)局部关联:以细粒度的图像显著区域和文本单词作为对象学习语义关联。早期的工作属于全局关联,即将整个图像和文本通过相应的深度学习网络映射至一个潜在的公共子空间,在该空间中图像和文本的跨模态语义关联相似度可以被直接衡量,并且约束语义匹配的图文对相似度大于其余不匹配的图文对。然而,这种全局关联范式忽略了图像局部显著信息以及文本局部重要单词的细粒度交互,阻碍了图像文本语义关联精度的进一步提升。因此,基于细粒度图像区域和文本单词的局部关联受到广泛的关注和发展,并快速占据主导优势。对于现有的图像文本跨模态语义关联范式,核心思想是挖掘所有图像片段和文本片段之间的对齐关系。
图2 图文匹配的发展现状
交叉注意力网络SCAN通过区域和单词之间的相互关注机制来捕捉所有潜在的局部对齐,并激发出了一系列工作。跨模态交叉注意力旨在挖掘所有图像区域和文本单词之间的对齐关系,通过局部语义对齐来推理整体相关性。得益 于细粒度的模态信息交互,基于交叉注意力的方法取得显著的性能提升,并成为当前图像文本跨模态语义关联的主流范式。
图3 跨模态交叉注意力范式SCAN
动机:现有方法往往根据关联交互获取模态间的对齐语义。该过程的目的是 最大化图像和文本中的对齐语义相似度,并以此作为线索依据来计算图文匹配程度。具体的,在模态交互学习过程中,现有方法通常抑制非对齐线索的作用(通过一个 ReLU 函数抹除负关联分数),导致模型主要学习对齐语义的正面作用。然而,他们都忽略了图像-文本对中丰富的非对齐线索对于衡量 是否匹配也十分重要。因为当文本描述中出现图像里不存在的内容(非对齐的文本单词片段),那么这个 图像-文本对就是不匹配的。由此分析可知,非对齐的文本单词片段对于衡量图像-文本对是否匹配同样重要。最朴素的想法就是:我们可以充分的挖掘非对齐片段的负面作用,使原本检索在Top位置的错误匹配降低相似分值,从而尽可能的检索到正确的。如下图所示:
图4 负感知注意力动机分析
二、总体框架
图5 负感知注意力的总体框架图
Overview:负感知注意力网络包含两个主要模块:1)不匹配挖掘模块:通过建模匹配片段和不匹配片段的相似度分布,然后通过优化两个分布的最小错分概率求解最优的相似度区分阈值,从而尽可能的区分不匹配片段。2)正负双分支匹配模块:通过两种不同的掩码注意力机制,一方面关注匹配片段的相似度,另一方面精确计算不匹配片段的不相似度,联合利用前者的正面作用和后者的负面作用进行图像和文本之间的跨模态语义关联衡量。
亮点:①第一个联合利用匹配和不匹配片段的正面和负面作用,并显式挖掘不匹配片段的工作。②在训练过程中组成联合优化框架:前向优化:自适应地学习最优相关性阈值,获取更优的语义对齐;后向优化:由于最优阈值在参与注意力计算过程,因此在梯度反向传播优化时,会促使相关和不相关的相似度逐渐分离,从而学习更有区分性的图像文本特征嵌入。
下面,分别介绍两个模块的具体实现:
1)不匹配片段挖掘模块
在一个图像-文本对中包含大量的匹配和不匹配的片段,我们需要充分利用这两种类型的信息来实现更精确的检索性能。在实际匹配的过程中,计算出区域-单词对的相似度分数后,需要一个边界来决定它是匹配片段还是不匹配片段,现有的方法通常隐式地以固定值0作为区分边界。为了更准确地区分匹配片段和不匹配片段,我们对两者的相似度进行采样,然后显式地、自适应地建模两者的相似度分布,继而找到一个最优的区分边界,实现有效的不匹配片段挖掘。考虑到缺乏关于片段级的区域-单词是否匹配的先验信息,并且图像中含有大量背景区域,我们从文本的角度出发,设计了一种采样策略:对于一个匹配的文本,其中任意的单词一定可以在其匹配图像中找到至少一个匹配区域,我们视一个文本单词
另一方面,对于一个不匹配的图文对,文本中的不匹配单词与图像中的所有区域都不匹配,此时单词
并构造如下集合:
其中
其中,
图6 匹配和不匹配片段相似度分布建模
分别得到两个相似度分布建模后,可以用一个显式的边界
其中
对于该问题的最优解求解,我们首先搜索它的一阶导数的零点,并根据可行域的约束条件在
其中
有两点值得强调。 (1) 在训练过程中,关于显式的相关性边界,其首先从不匹配和匹配片段的相似度分布中学习,然后将被整合到注意力匹配过程中,以调整更具备区分性的相似度分布,从而创建一个迭代优化过程。这样,不配片段的分布将最大限度地与匹配片段的分布分开,其中不配片段可以产生更鲁棒的负面影响。因此,不匹配的片段也可以作为有意义的线索来准确测量图像-文本的相似性。(2) 在训练结束时,我们期望自适应学习边界能够同时保证最大挖掘不匹配片段,避免误判匹配片段导致性能下降。为了使学习边界收敛到具有更好挖掘精度的状态,我们给出调整初始惩罚参数满足的理论条件,或者更简单的实现为:
同时,我们强调对不匹配挖掘的显式界限阈值采样学习只需要在训练过程中执行,因为学习的界限(boundary)是跟随模型学习的嵌入空间(embedding space)自适应调整的,一旦训练结束,嵌入空间固定,因此界限也就固定。所以在模型的推理阶段,无需进行采样学习。
2)正负双分支匹配模块
在该模块中,我们同时考虑图像-文本对之间的匹配片段和不匹配片段,通过使用正面和负面两种不同的注意力掩码,分别从两个分支精确衡量它们的积极和消极作用。我们首先计算所有区域和单词对之间的语义相关度:
负注意力分支:依然从文本的角度出发,计算一个文本单词
由此,可以衡量出一个图像文本对中第个单词所带来的负面作用为:
其中
同时,我们可以考虑到单词在文本内的语义内关系,使语义相似的单词获得相同的匹配关系,在推理过程中(Inference/Testing stage),对每个单词的匹配程度进行一次模态内传播:
其中
正注意力分支:另一方面,衡量图文对的相似程度时,我们首先关注跨模态的共享语义,第
其中
另外,区域与单词间的相关度分数也反应了图文间的相似程度,得到由相关度权重加权的相似度分数
最终,图像文本对
三、试验效果
1)达到SOTA
2)可视化
最优阈值学习过程:
不匹配线索挖掘对比(蓝色为不匹配)
四、论文
If you found this useful, please cite the following paper:
Zhang K, Mao Z, Wang Q, et al. Negative-Aware Attention Framework for Image-Text Matching[C]//Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. 2022: 15661-15670.
@inproceedings{zhang2022negative, title={Negative-aware attention framework for image-text matching}, author={Zhang, Kun and Mao, Zhendong and Wang, Quan and Zhang, Yongdong}, booktitle={Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition}, pages={15661--15670}, year={2022} }
一个简洁的实现SCAN Attention过程的代码(与上无关,仅做记录):
def SCAN_attention(query, context, smooth, eps=1e-8): """ query: (n_context, queryL, d) context: (n_context, sourceL, d) """ attn_sims = torch.bmm(query, context.transpose(1, 2)) attn_pro = nn.LeakyReLU(0.1)(attn_sims) attn_pro = l2norm(attn_pro, 1) attn = F.softmax(attn_pro*smooth, dim=2) weightedContext = torch.bmm(attn, context) weightedContext = l2norm(weightedContext, dim=-1) return weightedContext
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 推荐几款开源且免费的 .NET MAUI 组件库
· 实操Deepseek接入个人知识库
· 易语言 —— 开山篇
· Trae初体验