自下而上和自上而下的注意力模型《Bottom-Up and Top-Down Attention for Image Captioning and Visual Question Answering》

2023-05-16

本文有点长,请耐心阅读,定会有收货。如有不足,欢迎交流, 另附:论文下载地址

一、文献摘要介绍

Top-down visual attention mechanisms have been used extensively in image captioning and visual question answering (VQA) to enable deeper image understanding through fifine-grained analysis and even multiple steps of reasoning. In this work, we propose a combined bottom-up and top-down attention mechanism that enables attention to be calculated at the level of objects and other salient image regions. This is the natural basis for attention to be considered. Within our approach, the bottom-up mechanism (based on Faster R-CNN) proposes image regions, each with an associated feature vector, while the top-down mechanism determines feature weightings. Applying this approach to image captioning, our results on the MSCOCO test server establish a new state-of-the-art for the task, achieving CIDEr / SPICE / BLEU-4 scores of 117.9, 21.5 and 36.9, respectively. Demonstrating the broad applicability of the method, applying the same approach to VQA we obtain fifirst place in the 2017 VQA Challenge.

作者认为自上而下的视觉注意力机制已经广泛的应用于图像描述和视觉问答中,以通过细粒度分析,甚至推理多个步骤实现对图像的更深入理解。因此作者提出了一种自下而上和自上而下的组合注意力机制,使注意力可以在对象和其他显著图像区域的水平上进行计算。自下而上的机制(基于 Faster R-CNN)提出了图像区域,每个区域都具有关联的特征向量,而自上而下的机制决定了特征权重,作者还在2017年VQA挑战赛中获得了第一名,下面就让我们来剖析一下该框架吧。

 

二、网络框架介绍

2.1Bottom-Up Attention Model

          给定一个图像 I ,我们的图像描述模型和VQA 模型都将一组可变大小的 k 个图像特征作为输入,以使每个图像特征都进行编码图像的主要区域。空间特征V可以定义自下而上的注意力模型的输出,也可以按照标准实践定义为CNN的空间输出层。

          空间特征V的定义是通用的。但是,在这项工作中,作者根据边界框定义了空间区域,并使用Faster R-CNN实现了自下而上的注意力模型,Faster R-CNN是一种对象检测模型,旨在识别属于某些类的对象实例,并使用边界框定位它们。其他区域推荐网络也可以作为一种关注机制进行培训。

Faster R-CNN检测对象分两个阶段。第一个阶段,称为区域推荐网络(Region Proposal Network,RPN),用来预测对象推荐。一个小网络在CNN的中间特征上滑动(作用是把每个滑动窗口映射到一个低维特征)。在每个空间位置,该网络都会为多个比例和纵横比的锚框预测与类无关的客观评分和边界框优化。使用贪婪非最大抑制和交并比(IoU)阈值,将顶部的推荐作为第二阶段的输入。在第二阶段,使用兴趣区域(RoI)合并为每个Box建议提取一个小的特征图(例如14×14)。 然后将这些特征图一起批处理,作为对CNN最终层的输入。 该模型的最终输出包括在类别标签上的softmax分布以及每个框提议的特定于类别的边界框优化。

        在这项工作中,作者结合使用了Faster R-CNN和ResNet-101CNN。为了生成用于图像描述或VQA图像特征\large V的输出集,我们获取模型的最终输出,并使用IoU阈值对每个对象类别执行非最大抑制。对于每个选定区域 \large i\large V_i 被定义为该区域的平均池化卷积特征,因此图像特征向量的维D为2048。以此方式使用,Faster R-CNN有效地起到了“硬”注意力机制,这是因为仅从大量可能的配置中选择了相对较少的图像边界框特征。

为了对自下而上的注意力模型进行预训练,我们首先用预训练好的ResNet-101初始化Faster R-CNN,以便在ImageNet上进行分类,然后我们对视觉基因组数据进行训练。帮助学习良好的特征表示,我们还添加了一个额外的训练输出,用于预测属性类(除对象类之外)。为了预测区域 \large i 的属性,我们将平均池化卷积特征与已学习的地面真实对象类嵌入在一起,并将其输入到附加输出层中,该输出层定义每个属性类上的\large softmax分布以及"无属性类别"。

原始的Faster R-CNN多任务损失函数包含四个组件,分别针对RPN和最终对象类建议在分类和边界框回归输出上定义。 我们保留了这些组件,并添加了一个额外的多类损失组件来训练属性预测器。下图,我们提供了模型输出的一些示例。

2.2  Captioning Model

给定一组图像特征V,作者提出的图像描述模型使用现有的部分输出序列作为上下文,使用"软"自上而下的注意力机制在描述生成过程中对每个特征进行加权。描述模型标准实现是由两个LSTM层组成,使用以下表示法在单个时间步上引用LSTM操作:

其中,\large x_t 是LSTM的输入向量,\large h_t 是LSTM的输出向量。在这里,为了符号上的方便,省略了记忆单元的传播。整个描述模型如下图所示。

          1.Top-Down Attention LSTM

          在图像描述模型中,我们将第一个LSTM层描述为自上而下视觉注意力模型,第二个LSTM层描述为一个语言模型,在随后的方程式中用上标来指示每一层。在每个时间步长上注意力LSTM的输入向量均由语言LSTM的先前输出组成,并与均值池化图像特征以及先前生成的单词的编码连接,由下式给出:

其中,是词汇表  的词嵌入矩阵,是时间步 t处输入单词的 one-hot 编码。这些输入分别为注意力LSTM提供了有关语言LSTM的状态,图像的整体内容以及到目前为止生成的部分图像描述输出的最大上下文信息。 嵌入单词是从随机初始化中学习而无需预训练的。

给定注意力LSTM的输出 h^1_t ,在每个时间步t 处,我们为k个图像特征v_i 中的每一个都生成一个归一化注意力权重\large a_i_,_t,如下

其中,是学习参数。用所有输入特征的凸组合计算语言LSTM输入的注意力图像特征,如下所示:

2.Language  LSTM

语言模型LSTM的输入包含注意力图像特征注意力LSTM的输出,由下式给出:

        用符号指代单词序列,在每个时间步t ,可能的输出词的条件分布有下式给出:

其中,是可学习权重和偏差。在完全输出序列上的分布计算,为条件分布的乘积:

  3.目标函数

          给定一个目标地面真实序列 和 带有参数的图像描述模型,我们最小化以下交叉熵损失:

另外文章还用到了SCST中的强化学习方法来对CIDEr分数进行优化:

梯度可以被近似为:

其中是强化学习中samlpe得到的caption,是通过贪婪解码当前模型的基线分数。

 

2.3  VQA Model

给定一组空间图像特征V,作者提出的VQA模型还使用"软"自上而下的注意力机制来加权每个特征,用问题表示作为上下文,模型如下图所示。

该模型实现了众所周知的问题和图像的联合多模嵌入,并对一组候选答案的分数进行了回归的预测。

网络内的学习非线性变换采用门控双曲正切(gated tanh)激活来实现的。我们的每个"门控 tanh"层都实现了一个函数\large f_a

,参数 定义如下:

其中,\large \sigma\large sigmoid 激活函数,是可学习权重,是可学习偏差。是逐元素乘积。向量的乘积作用为充当中间激活的门。

          首先将每个问题编码为门控循环单元(GRU)的隐藏状态,其中每个输入单词都使用学习单词嵌入来表示。 给定GRU的输出,我们为 \large k 个图像特征 \large v_i 中的每一个,生成未归一化的关注权重\large a_i,如下所示:

其中, 是一个可学习的参数向量。而normalized attention weight \large a_t 和attended image feature  就以caption 部分的方式计算。输出的相应\large y 的分布由下式给出:

其中,是问题和图像的联合表示,是可学习权重。由于篇幅限制,文章没有给出更多的VQA模型的细节,更多细节详见Tips and Tricks for Visual Question Answering: Learnings from the 2017 Challenge

关键代码如下:

#---------注意力的计算-------------
class Attention(nn.Module):
    def __init__(self, v_dim, q_dim, num_hid):
        super(Attention, self).__init__()
        self.nonlinear = FCNet([v_dim + q_dim, num_hid])
        self.linear = weight_norm(nn.Linear(num_hid, 1), dim=None)

    def forward(self, v, q):
        """
        v: [batch, k, vdim]
        q: [batch, qdim]
        """
        logits = self.logits(v, q)
        w = nn.functional.softmax(logits, 1)
        return w

    def logits(self, v, q):
        num_objs = v.size(1)
        q = q.unsqueeze(1).repeat(1, num_objs, 1)
        vq = torch.cat((v, q), 2)
        joint_repr = self.nonlinear(vq)
        logits = self.linear(joint_repr)
        return logits

class BaseModel(nn.Module):
    def __init__(self, w_emb, q_emb, v_att, q_net, v_net, classifier):
        super(BaseModel, self).__init__()
        self.w_emb = w_emb
        self.q_emb = q_emb
        self.v_att = v_att
        self.q_net = q_net
        self.v_net = v_net
        self.classifier = classifier

    def forward(self, v, b, q, labels):
        """Forward

        v: [batch, num_objs, obj_dim]
        b: [batch, num_objs, b_dim]
        q: [batch_size, seq_length]

        return: logits, not probs
        """
        w_emb = self.w_emb(q)
        q_emb = self.q_emb(w_emb)  # [batch, q_dim]
       #---------特征的融合和答案的预测-------------
        att = self.v_att(v, q_emb)
        v_emb = (att * v).sum(1)  # [batch, v_dim]  得到的V^
        # 问题(q)和图像的表示(vˆ)通过非线性层
        q_repr = self.q_net(q_emb)
        v_repr = self.v_net(v_emb)
        # 然后逐元素乘积进而融合特征
        joint_repr = q_repr * v_repr
        logits = self.classifier(joint_repr)  # 分类
        return logits

三、实验分析

作者使用Visual Genome 数据集来预训练自下而上的注意力模型,并在训练VQA模型时进行数据增强。 数据集包含108K张图像,并用包含对象,属性和关系的场景图进行了密集注释,以及170万个视觉问题。整体上的 图像描述(image caption)和视觉问答(VQA)都是当时state-of-the-art的,论文对图像描述进行了详细的分析,视觉问答分析较少,下图是image caption性能表现:

作者选取了只有up-down的attention机制的ResNet作为基准模型(baseline),来代替bottom-up attention机制,可以看到,无论有没有加CIDEr的强化学习训练、有没有使用bottom-up机制,本文的模型都比SCST的方法要好。而且SCST是从4个随机初始化的模型里面选了一个最好的,而本文这里的对比就只用了一个模型。

下图展示了up-down模型各个方面比基准模型ResNet都优越。

图像描述模型与其他方法也表现出高性能。

视觉问答(VQA)模型与其他方法也表现出高性能。

对于每个生成的单词,作者将注意力权重可视化,如下图所示。

 

VQA模型的可视化。

 

四、结论

We present a novel combined bottom-up and top-down visual attention mechanism. Our approach enables attention to be calculated more naturally at the level of objects and other salient regions. Applying this approach to image captioning and visual question answering, we achieve state-of-the-art results in both tasks, while improving the interpretability of the resulting attention weights.

At a high level, our work more closely unififies tasks involving visual and linguistic understanding with recent progress in object detection. While this suggests several directions for future research, the immediate benefifits of our approach may be captured by simply replacing pretrained CNN features with pretrained bottom-up attention features.

作者提出了一种新的自下而上和自上而下的视觉注意机制,直接的好处就是用预训练好的自下而上的注意力特征代替预训练好的CNN特征。个人理解自上而下注意力就是利用目标检测技术(Faster R-CNN)在物体层面从面到点attention, 而自上而下注意力就是从点到面的角度进行attention。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

自下而上和自上而下的注意力模型《Bottom-Up and Top-Down Attention for Image Captioning and Visual Question Answering》 的相关文章

随机推荐

  • 对 IDA 结构体操作的一些理解

    对 IDA 结构体操作的一些理解 前言 xff1a 刚学逆向时把 IDA pro 权威指南过了一遍 xff0c 但读得并不是很细 xff0c 满足日常使用还是没问题的 xff0c 但是对于一些细节的操作或提高效率的方法倒是没能掌握 比如 I
  • 第二届广东省大学生网络攻防大赛 pyre

    第二届广东省大学生网络攻防大赛 pyre 以前做过 pyc 逆向 xff0c 直接的 python exe 逆向还是第一次 xff1a 第一种方法 xff1a 用 pyinstxtractor py 将 exe 文件转换成 pyc 文件 用
  • 2022 年网刃杯 ez_algorithm

    2022 年网刃杯 ez algorithm 下载附件 xff1a 照例扔入 exeinfope 中查看信息 xff0c 64 位无壳 xff1a 照例运行一下 xff0c 查看主要回显信息 xff1a 照例扔入 IDA64 中查看伪代码
  • Base-N 算法加密解密实现:

    目录 Base N 算法加密解密实现 xff1a Base64 加密解密 xff1a xff08 C 语言 python xff09 Base32 加密解密 xff1a xff08 C 语言 xff09 Base N 算法加密解密实现 xf
  • 第二届广东省大学生网络攻防大赛 simple_re

    第二届广东省大学生网络攻防大赛 simple re 流程总结 xff1a xff08 思路原文出自 JANlittle 师傅 xff09 程序将关键函数以对象元素的形式存在对象里 xff0c 然后在申请内存中搭配指针间接调用 xff0c 关
  • 解析 DES 加密算法(C语言):

    目录 解析 DES 加密算法 C语言 xff1a DES 简介 xff1a DES 算法整体流程 xff1a DES 解密 xff1a C 语言代码实现加密解密逻辑 xff1a 解析 DES 加密算法 C语言 xff1a 内容修改自博客 x
  • x64dbg 基本使用技巧

    x64dbg 基本使用技巧 最近使用 DBG 多了起来 xff0c 所以查了一些资料来学习并整理成自适应的笔记 本文摘抄自 xff1a x64dbg 使用技巧与实用插件合集 官方网站 xff1a https x64dbg com DBG 根
  • freertos系统栈溢出检测机制简述

    FreeRTOS 提供了多种特性来辅助跟踪调试栈相关的问题 uxTaskGetStackHighWaterMark 函数 每个任务都独立维护自己的栈空间 xff0c 栈空间总量在任务创建时进行设定 uxTaskGetStackHighWat
  • 记一次 windows 桌面卡顿

    记一次 windows 桌面卡顿 这几天在 windows 桌面上的操作感觉非常不好 xff0c 一开始以为是电脑老化 网络卡顿 C 盘又被垃圾挤占空间 或什么自启动软件占了内存 xff0c 复制一个快捷键出来都要缓冲 然后就卸载了很多不常
  • 浏览 APT 报告中学习积累

    浏览 APT 报告中学习积累 工具网站积累 xff1a xff08 APT 报告搜寻网站 xff09 https ti qianxin com https feed watcherlab com index apt https malped
  • 《windows 程序设计》读书笔记 一

    目录 基础知识 主要的动态链接库 xff1a API 及内存管理模式 xff1a 第一个 Windows 程序解析 xff1a 头文件 xff1a Windows 程序的入口 xff1a MessageBox 函数 xff1a 基础知识 主
  • 《windows 程序设计》读书笔记 二

    目录 Unicode 历史及介绍 美国标准 ASCII xff1a Unicode 方案 xff1a 宽字符和 C 语言 xff1a 宽字符和 Windows xff1a Windows 函数调用 xff1a Unicode 和 Ascii
  • x86指令编码简述(机器码)

    目录 x86指令编码 xff1a 机器码的格式结构 xff1a Mod R M 字节与内存寻址模式探究 xff1a 实战部分机器指令类型 xff1a x86指令编码 xff1a 机器码的格式结构 xff1a 一般的 x86 机器指令格式 x
  • 记一次 cmd 打开 python 报错,环境变量已配置

    记一次 cmd 打开 python 报错 xff0c 环境变量已配置 输入 python 自动打开应用商店 xff0c 环境变量已配置 xff0c 并且我觉得我只有这一个 python 路径 xff01 排查了半天 xff0c 重启了半天
  • 《windows 程序设计》读书笔记 三

    目录 窗口与消息 窗口的创建 xff1a 系统结构 windows 窗口编程概述 xff1a HELLOWIN 程序及剖析 xff1a 若干难点 xff1a 用户程序调用系统还是系统调用用户程序 xff1a DefWindowProc 函数
  • 对 python 正则表达式字面字符串和模式字符串的一点思考

    python 的正则表达式是与 Perl 语言类似的正则表达式匹配操作 xff1a 模式和被搜索的字符串既可以是 Unicode 字符串 xff0c 也可以是 8 位字节串 xff0c 但是 Unicode 字符串与 8 位字节串不能混用
  • 记一次 PEview 的报错修正

    记一次 PEview 的报错修正 从 逆向工程核心原理 中提到的 https reversecore com 111 中下载的 PEview 在处理 32 位程序时其它目录都还行 xff0c 当点到 IMAGE NT HEADERS gt
  • Android5.0 Telephony框架初步分析--telecomm

    3 2 Telecomm关键类初始化和相互关系 3 2 1 Telecomm简述 Android5 0在Telephony的变化又比较大 xff0c 增加了一个Telecomm模块 xff0c 它位于界面应用如InCallUI和Phone框
  • freertos应用程序常见错误排查

    freertos系统应用程序常见问题 对一些比较常见的问题 xff0c 下面简要的以 FAQ 问答 的形式给出可能的原因和解决方法 问题现象 xff1a 在一个 Demo 应用程序中增加了一个简单的任务 xff0c 导致应用程序崩溃 任务创
  • 自下而上和自上而下的注意力模型《Bottom-Up and Top-Down Attention for Image Captioning and Visual Question Answering》

    本文有点长 xff0c 请耐心阅读 xff0c 定会有收货 如有不足 xff0c 欢迎交流 xff0c 另附 论文下载地址 一 文献摘要介绍 Top down visual attention mechanisms have been us