| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> 论文阅读—Similarity Reasoning and Filtration for Image-Text Matching -> 正文阅读 |
|
[人工智能]论文阅读—Similarity Reasoning and Filtration for Image-Text Matching |
Similarity Reasoning and Filtration for Image-Text Matching
介绍作者还是为了实现更为细粒度的对齐。虽然此前使用全局对齐或者局部对齐的方式已经取得了一些成效,但是作者认为,当下的模型方法还是存在三点问题:
那么,为了解决上述三点问题,作者提出了一种相似图推理和注意过滤网络。具体来说:
注意的是,这里不是说先用SGR再用SAF,也就是这两个模块没有先后顺序,作者进行实验的时候也是分模块进行的实验 方法整体的模型结构如上所示,可以看到,经过特征提取后,就进行全局对齐和局部对齐,然后将对齐的结果分别进入SGR和SAF模块进行相似度的计算,这两个模块是独立的。那么下面也将分成四个部分进行说明重点说明。 特征提取图特征提取使用Faster RCNN提取图特征,添加一个全连接层转成d维向量,得到每个区域的表示 V = { v 1 , . . . , v k } V=\{v_{1},...,v_{k}\} V={v1?,...,vk?},这里和SCAN是一致的。 然后,在每个区域上执行自注意力机制,该机制采用平均特征 q v ˉ = 1 K ∑ i = 1 K v i \bar{q_{v}}=\frac{1}{K}\sum_{i=1}^{K}v_{i} qv?ˉ?=K1?∑i=1K?vi?作为查询并汇总所有区域以获得全局表示 v ˉ \bar{v} vˉ。代码对应部分如下:
文本特征提取使用GRU提取文本特征,得到表示
T
=
{
t
1
,
.
.
.
,
t
L
}
T=\{t_{1},...,t_{L}\}
T={t1?,...,tL?},按照同样的方式,得到文本的全局表示。这一部分在代码中体现在 相似性表示学习向量相似函数 之前说过,作者没有使用余弦距离或欧几里得距离来计算相似性标量,而是用的一个相似向量来表示不同模态之间的相似关联程度。那么在这里,作者就是用的如下函数: 这一部分在代码的
全局相似表示 利用上面的公式得到 s g = s ( v ˉ , t ˉ ; W g ) s^{g}=s(\bar{v},\bar{t};W_{g}) sg=s(vˉ,tˉ;Wg?),那么这里的 W g W_{g} Wg?就用于学习全局相似表示 局部相似表示 和SCAN一致,注意力权重计算为: α i j = e x p ( λ c ^ i j ) ∑ i = 1 K e x p ( λ c ^ i j ) \alpha _{ij}=\frac{exp(\lambda \hat{c}_{ij})}{\sum_{i=1}^{K}exp(\lambda \hat{c}_{ij})} αij?=∑i=1K?exp(λc^ij?)exp(λc^ij?)?, c i j c_{ij} cij?表示区域特征 v i v_{i} vi?和词特征 t j t_{j} tj?之间的余弦距离,也就是相似程度,这里用的是标量, c ^ i j \hat{c}_{ij} c^ij?为标准化后的结果。由此得到生成的视觉特征(第j个单词对整幅图像的贡献程度) a j v = ∑ i = 1 K α i j v i a_{j}^{v}=\sum_{i=1}^{K}\alpha_{ij}v_{i} ajv?=∑i=1K?αij?vi? 这样,得到 a j v a_{j}^{v} ajv?和 t j t_{j} tj?之间(即第j个单词和整个图像之间的相关性)的局部相似表示为: s j l = s ( a j v , t j ; W t ) s_{j}^{l}=s(a_{j}^{v},t_{j};W_{t}) sjl?=s(ajv?,tj?;Wt?) 这一部分在代码中,直接用了SCAN的代码部分:
需要注意的是,这里只有特定单词和对应图像区域之间的关联,并不像SCAN一样还存在特定区域和单词之间的关联 SGR(相似图推理)将所有单词的局部相似度表示和文本的全局相似度表示作为图节点 N = { s 1 l , . . , s L l , s g } N=\{s_{1}^{l},..,s_{L}^{l},s^{g}\} N={s1l?,..,sLl?,sg},这里的节点都是m维向量(代码中m取256),代码中如下:
使用以下公式计算节点
s
q
s_{q}
sq?和
s
p
s_{p}
sp?之间的边: 这样,就可以利用构造好的节点和边,通过不断更新来进行相似图推理: 其中 s p 0 s_{p}^{0} sp0?和 s q 0 s_{q}^{0} sq0?为步骤n=0时候的从 N N N中提取出来的节点(即初始节点), W r n , W i n n , W o u t n W_{r}^{n},W_{in}^{n},W_{out}^{n} Wrn?,Winn?,Woutn?为每一步中的学习出来的参数,每一步结束后, s p n s_{p}^{n} spn?都会被 s p n + 1 s_{p}^{n+1} spn+1?取代 对相似度进行N步迭代推理,并以最后一步全局节点的输出作为推理的相似度表示,然后将其送入一个全连接层来推断最终的相似度分数 在代码中,N取3,具体如下:
SAF(相似注意过滤)对每一个节点
s
p
s_{p}
sp?计算一个聚合权重 然后,使用公式 s f = ∑ s p ∈ N β p s p s_{f}=\sum_{s_{p}\in N}\beta _{p}s_{p} sf?=∑sp?∈N?βp?sp?将所有的相似性特征聚合起来,可以看到,通过这样的方式,使得诸如"the","be"等无意义的对齐的系数会变得很小,最终等同于被过滤掉。 最终使用一个完全连接层来预测输入图像和句子之间的最终相似度,这里就是一个标量了。 相关代码如下:
损失函数L r ( v , t ) = [ γ ? S r ( v , t ) + S r ( v , t ? ) ] + [ γ ? S r ( v , t ) + S r ( v ? , t ) ] + L_{r}(v,t)=[\gamma -S_{r}(v,t)+S_{r}(v,t^{-})]_{+}[\gamma -S_{r}(v,t)+S_{r}(v^{-},t)]_{+} Lr?(v,t)=[γ?Sr?(v,t)+Sr?(v,t?)]+?[γ?Sr?(v,t)+Sr?(v?,t)]+? 其中 ( v , t ) (v,t) (v,t)为一个(图像,文本)对, t ? t^{-} t?和 v ? v^{-} v?为最大负样本, γ \gamma γ为边缘参数, S r S_{r} Sr?为SGR或者SAF预测的相似函数。这一部分和SCAN基本一致 实验结果单独看两个模块的相似结果: 在这里面,可以看到,对于SAF来说,诸如on、the、a之类的冠词等的权重非常低,这一类词就被过滤掉了 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 16:39:36- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |