《Bottom-Up and Top-Down Attention for Image Captioning and Visual Question Answering》——2018 CVPR论文笔记

2023-05-16

        这是一篇2018年的CVPR的论文,使用自下而上和自上而下相结合的注意力机制实现了image captioning和VQA,作者使用这个注意力模型在image captioning上取得了非常好的效果,在2017年的VQA挑战赛中也取得了冠军。

 论文链接:CVPR 2018 Open Access Repository

关联论文:Tips and Tricks for Visual Question Answering: Learnings from the 2017 Challeng(这篇文章详细地介绍了2017年VQA挑战赛的冠军模型,对网络的架构和超参数的选择进行了大量的探索。)

        在image captioning和VQA中通常需要执行一些细粒度的操作,甚至是多步推理来生成高质量的输出,所以广泛地使用了注意力机制。

    以往的模型大都属于自上而下的类型,也就是提取问题作为输入这种方法的attention作用的图像对应于左图,没有考虑到图片的内容。对人类来说,注意力会更加集中于图片的目标或其他显著区域。因此本文作者引入了自下而上的注意力机制,如右图所示,使注意力作用于object proposal。

    本文灵感来源:在人类的视觉系统中,注意力可以由当前任务(如:寻找某物)使我们的注意力聚焦到与任务紧密相关的部分;也可以被一些显著的、突出的、新奇的事物吸引。所以这篇论文就提出了一种自下而上和自上而下相结合的注意力机制。

        这篇论文大部分篇幅在介绍image captioning,对于VQA模型的建立介绍较少,以下内容大部分来源于《Tips and Tricks for Visual Question Answering: Learnings from the 2017 Challeng》。

        整体上来说,模型就是联合输入问题和图像的特征,然后从一组候选答案中选一个最好的(多分类任务)。具体地,模型可以分成以下这些子部分,问题嵌入、图像特征、图像注意力、多模态融合等等。

模型

Question  embedding

        这一部分的操作包括对问题进行常规的预处理,比如把句子拆成单词,转成小写等,还有截取成固定长度,这里是把一个问题截成14个词。

        然后使用一个预训练好的GloVe模型对问题进行编码,GloVe模型就是一个基于全局词频统计的词表征工具,它的作用是将一个单词表达成一个由实数组成的向量,这里使用的是在Wikipedia/Gigaword corpus语料库上训练好的模型。通过Glove后,一个问题就被编码成了一个14*300的词嵌入序列。

        最后把这个词嵌入序列通过循环门控单元GRU(512维的内部状态),取其最终状态作为的问题嵌入q。

Image feature

         对于图像特征的提取,这里使用Faster R-CNN提取图像中的K个目标,实现一个自下而上的注意力,由于图像的复杂度不同,每张图像的K也根据目标检测中的固定阈值自适应调整,但最大不超过100。提取出来的对象表示为一个K*2048的图像特征v。

Image attention

         图像注意力部分,跟其他的注意力模型差不多,是基于问题进行引导注意力,不过将其命名为了自上而下的注意力。具体实现是:对于从1到K的每个位置的图像,它的特征向量vi与问题嵌入级联,然后它们共同通过一个非线性层和一个线性层来获得一个注意力权重,然后使用softmax对这个权重进行归一化,最后将归一化的注意力赋予图像特征获得一个2048维的注意力图特征。

Multimodal fusion

         多模态融合部分,将之前得到的问题嵌入和注意力图特征分别通过一个非线性层,都转为512维,然后使用哈达玛积(矩阵中对应位置元素相乘)将它们结合起来,得到h,这个h是最后的分类器的输入。

Output classifier

        输出分类器部分。对于在训练集中出现过8次的答案,我们将其选入候选答案集合(N=3129)。然后我们可以将VQA任务转化为一个多标签分类任务。将上一步得到的联合嵌入h通过一个非线性层和一个线性层,然后通过sigmoid激活函数计算每一个候选答案的得分。(在计算损失函数时,使用软分数。)

软分数的概念

         对数据集中的每一个问题,都有10个标注者来标注答案,对一些有歧义的问题,或者答案不唯一的问题,标注者之间难免会存在一些分歧。比如右边这张图,截取了某一个问题,标注者们标注的十个答案,其中有6个标注者标注的“homeless”,还有另外4个标注者标注的其他的。这就引出了软分数的定义,对于第i个问题的第j个候选答案,如果有三个及以上的人标注的是这个答案,那么这个答案的分数为1,否则的花就是标注人数除以3。比如对于右边这个例子,homeless的分数就是1,其他的各是1/3。与之对应的就是一种二值的硬分数,标注数最多的这个答案计分为1,其他都为0。

        有了这个软分数后,模型的目的就不只是选一个最优的答案,还需要预测每一个候选答案的正确性,对应的损失函数如上式。作者认为使用软分数有两个好处,一是允许模型优化每个问题的多个答案,二是提供了比二元目标(也就是硬分数)稍微丰富的信息。 

Non-linear layers imuestion embeddingQuestion embeddingQuestion embedding

         模型中的非线性层,都使用门控双曲正切激活,如下面公式所示。其中g作为一个激活门。比较类似LSTM和GRU中的门控操作。

Training 

        训练部分,使用随机梯度下降算法,使用AdaDelta优化算法,模型容易过拟合,在训练时要early stopping,这些都比较常规。

在训练的时候,除了使用VQA v2中的数据集,还用了30%的Visual Genome数据集作为额外的训练数据。

        在使用梯度下降算法时,使每个batch中的 数据保持平衡。也就是说对于同样一个问题,要有两个不同的图片,且两张图片针对这个问题有不同的回答。作者猜想这样做能使学习更加稳定,并促使网络辨别匹配的实例之间的细微差异。

        除此之外,对于测试部分,除了使用标准的VQA准确率作为评价指标外,作者还引入了一个新的度量指标,把他称为平衡对的准确率,这里就要求对于同一个问题的两张图片都预测对了,这个样本才算预测正确。

 实验

         随后就是一系列的对比实验,来查找哪些超参数是模型性能提升的关键。

 总结

本文认为:

  • 使用更好的图像特征仍能取得更显著的收益,特别是使用自底向上的注意力;
  • 从另外的VQA数据集中能使性能提升,但性能提升的上限还不明确,但是收集更大的数据集不太可能带来重大突破;
  • 使用其他信息来源和使用非VQA的数据集很有前景。

本文猜测:
        在实验中,还使用了词袋模型替代GloVe模型对问题进行编码,词袋模型在对问题编码时不考虑单词的顺序,最终达到的性能跟考虑单词顺序的GloVe相比差不多,那么这说明:①单词的顺序可能传达不了太多的信息;②模型仍然无法理解和有效使用语言结构。

本文提倡:
        本文提出了一种更严格的性能指标,这项指标要求对于同一问题的两张图像都需要回答正确,作者认为这项指标能反映模型视觉理解和分辨图像之间细微差别的能力。estion embedding

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

《Bottom-Up and Top-Down Attention for Image Captioning and Visual Question Answering》——2018 CVPR论文笔记 的相关文章

随机推荐

  • Django rest-framework类视图大全

    视图分类 视图类 GenericAPIView xff1a 包含两大视图类 xff08 APIView GenericAPIView xff09 视图工具类 mixins xff1a 包含五大工具类 xff0c 六大工具方法工具视图类 ge
  • JS中? ?和??=和?.和 ||的区别

    undefined和null是两个比较特殊的数据类型 是不能用点操作符去访问属性的 xff0c 否则将会报错 let a console log a name undefined console log a name 报错 let obj
  • 几款好用的串口和网络调试助手

    和嵌入式厮混在一起总得用几个趁手的调试助手 xff0c 这里介绍几个用过的串口和网络调试助手 xff0c 各有千秋 这也只是我自己使用过的 xff0c 如果又更好 xff0c 也请大家分享一下 xff1a 1 丁丁串口调试助手 这是我最常用
  • 软件设计工程——结构化分析与设计

    结构化分析方法 数据流图 便于用户理解 分析系统数据流程的图形工具 基本图形元素 数据流 xff1a 由固定成分的数据组成 xff0c 表示数据的流向 xff1b 加工 xff1a 描述输入数据流到输出数据流之间的变换 xff1b 数据存储
  • Java面试:接口(Interface)与抽象类(Abstract Class)的区别?

    什么是抽象类 xff1f 包含抽象方法的类 xff0c 是对一系列看上去不同 xff0c 但是本质上相同的具体概念的抽象 抽象类的作用 xff1f 用于拓展对象的行为功能 xff0c 一个抽象类可以有任意个可能的具体实现方式 抽象方法是一种
  • 解决Win10/11有线网(包括校园网)频繁掉线问题

    我连的是校园有线网 xff0c 但以下方法应该能够同时解决wifi出现频繁断连 默认网关不可用的问题 从去年开始我的电脑就有校园网断开的问题 xff0c 但不频繁 xff0c 当时没太在意 xff0c 但今年开学这个问题忽然严重 xff0c
  • python数据分析-Mysql8.0版本用sqlyog连接1251错误解决

    用sqlyog连接8 0 23版本的mysql发生1251错误 下载8 0版本的mysql时候发现最好直接下载 msi的安装文件 xff0c 方便许多 xff0c 好 xff0c 接下来说问题 因为之前装的是5 5版本的 xff0c 但是t
  • 怎么在android中创建raw文件

    怎么在android中创建raw文件 标题 1 2 3 这样即可以
  • form表单中把星号*去掉

    只需要把required true去掉就好了 关于表单验证中会有许多的细节问题需要注意 写法有很多种 注意格式 还有一点 xff0c 如果验证方法是写在行内 xff0c 那么他的方法需要在methods种写
  • 移动端开发的vconsole插件

    vConsole A lightweight extendable front end developer tool for mobile web page 一个轻量级 可扩展的移动网页前端开发工具 是腾讯的一个开源工具 功能 xff1a
  • vite打包工具的介绍

    vite Vite是Vue的作者尤雨溪开发的Web开发构建工具 xff0c 它是一个基于浏览器原生ES模块导入的开发服务器 xff0c 在开发环境下 xff0c 利用浏览器去解析import xff0c 在服务器端按需编译返回 xff0c
  • 初步了解win32界面库DuiLib

    DuiLib是一个开源win32界面库 xff1b 下载地址 xff1a https github com duilib duilib 可以做类似一些杀毒软件的界面 xff1b 效果还是比较好 xff1b 先下载一个demo看一下 xff1
  • this指向 js作用域链

    this 指向 xff5c 作用域与闭包 实战是检验真理的唯一标准深入理解 this作用域闭包到底是什么 this 问题总结 这里将以实战为引子 xff0c 带领大家一起总结出 this 指向问题的规律 默认绑定 xff08 函数直接调用
  • css中zoom和scale

    css中我们常用来缩放的样式元素是transform scale xff1b 也还有我们不熟悉的zoom xff0c 在实际的应用场景中 xff0c 我们需要根据自身项目的需要 xff0c 结合不同的解决方案的优缺点来选择适合我们项目解决方
  • 客户端存储和http缓存

    通过本文学习 xff0c 将获得以下知识 xff1a 1 web 端存储有哪些方式 2 不同存储之间的区别 xff0c 以及使用场景 3 http缓存有哪些策略 web 存储的由来 为什么需要 web 存储呢 xff0c 也就是客户端存储
  • 将React 类组件转换成 函数式组件

    将React 类组件转换成 函数式组件 步骤 xff1a 将class 类定义的React 元素转换成 变量或者函数class 中的 render 函数 直接去掉 xff0c 直接return html 元素将 state 变量使用 use
  • IndexedDB 数据库的使用

    前端的存储方式 前端的存储 xff0c 可以使得页面交互更加友好 xff0c 特别是在保存草稿 xff0c 网络差的情况下对用户来说是很有用的 前端的存储方式有多种 xff0c 像 Local storage Session storage
  • typedef的使用

    typedef的使用 1 为基本数据类型定义新的类型名 typedef double MYDBL 2 为自定义类型 xff08 结构体 共用体和枚举 xff09 起别名 简化类型名关键字 span class token keyword t
  • 解决Vscode每次连接ssh登入需要输入密码问题(免密登入)

    提示 xff1a 解决Vscode每次连接ssh登入需要输入密码问题 xff08 免密登入 xff09 文章目录 问题一 解决方案二 使用步骤1 win10操作 参考文献 问题 可以看到每次登入 xff0c 或者切换的时候都需要输入密码 x
  • 《Bottom-Up and Top-Down Attention for Image Captioning and Visual Question Answering》——2018 CVPR论文笔记

    这是一篇2018 年的 CVPR 的论文 xff0c 使用自下而上和自上而下相结合的注意力机制实现了image captioning和 VQA xff0c 作者使用这个注意力模型在image captioning上取得了非常好的效果 xff