【文献阅读】VQA入门——Tips and Tricks for Visual Question Answering: Learnings from the 2017 Challenge

本文主要是介绍【文献阅读】VQA入门——Tips and Tricks for Visual Question Answering: Learnings from the 2017 Challenge,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本人在读研一,想要学习多模态这一块的工作。我在这里记录下我看的第一篇论文《Tips and Tricks for Visual Question Answering: Learnings from the 2017 Challenge》的看后总结。若有不当之处,请斧正!
论文地址:https://arxiv.org/abs/1708.02711
在介绍论文之前,先给大家讲一下什么叫做VQA

VQA

全称叫做Visual Question Answer,大家翻译过来应该是视觉-问题-答案。其实在我理解,VQA是个很大的范围,它的大体应该是:给一张图片和一个与该图片相关的文字问题,计算机能产生一个正确的回答。 显然,这是一个典型的多模态问题。

这里提一嘴什么叫做多模态。
可以把我们人能搜集到信息的一种方式,叫做一种模态。什么意思呢?比如说,我们人有视觉、味觉、听觉等等,那么它们每一种单拎出来都可以称叫一种模态,那啥叫多模态,就是好几种感觉嘛!
那我们对他们做一个融合,就叫做多模态融合。VQA任务其实就是把图片和文字进行了一个融合。

视觉问题回答(VQA)的任务包括一个图像和一个相关的文本问题,机器必须确定正确的答案。这个任务应该是属于cv领域、nlp领域和AI领域的交叉点。
拿作者论文里提的东西举栗子~

看上面的第一张图,你看这个咖啡桌上面有什么呀! 答:蜡烛
看上面的第二张图,你看那个消防栓啥颜色! 答:黄色+黑色
看上面的第三张图,你看床上有啥! 答:书
看上面的第四张图,那个长长的棍子是干嘛的! 答:用来打马的
所以啊,我们总结任务:
我们给计算机一张图片,然后对计算机提一个与给计算机的图片一个相关问题,需要计算机给我们一个correct answer!

首先,本篇论文是作者在2017年VQA挑战赛中获得了第一名后写下的。作者提出了一个相对简单的VQA模型,可获得最先进的结果。它基于深度神经网络(DNN),实现了众所周知的联合嵌入方法。作者在此模型的基础之上,对架构和超参数的细节都精心操作,以在VQA v2(一个数据集)基准测试上获得best performance。
那么作者写这篇论文的目的是分享一个成功的VQA模型的细节

在论文的开头,作者先对自己的论文做了一个Summary of findings。这里避免翻译问题,我先拿原文复制啦!

1.Summary of findings

  • Using a sigmoid output that allows multiple correct answers per question, instead of a common single-label softmax.
  • Using soft scores as ground truth targets that cast the task as a
    regression of scores for candidate answers, instead of a traditional classification.
  • Using gated tanh activations in all non-linear layers.
  • Using image features from bottom-up attention that provide
    region-specific features, instead of traditional grid-like feature
    maps from a CNN.
  • Using pretrained representations of candidate answers to initialize the weights of the output layer.
  • Using large mini-batches and smart shuffling of training data during stochastic gradient descent.

那么我是不建议大家直接看这个总结的,因为我也是VQA任务的初级学徒,初级学徒直接看这个总结是有点看不懂的。所以大家往👇看!

2.Background

那么在这个部分,作者说VQA现在有越来越多的人对它感兴趣。VQA这个任务的难度在哪。

尽管这项任务跨越了cv和nlp领域,但它主要是前者的焦点。深度视觉理解本身被认为是计算机视觉的首要目标。

在介绍完了一些基本信息后,作者开始讨论数据集了。我们知道,一个VQA模型,如果没有数据集,就是无稽之谈说训练什么模型啊啥的,你又不是做zero-shot或者few-shot啥的。

作者在论文中说:

The VQA-real dataset of Antol et al… has served as the de factobenchmark since its introduction in 2015.

也就是说,在本文发表之前,有个数据集叫做VQA-real的,是VQA领域数据集的一个benchmark。但是呢,随着现在硬件、互联网的飞速发展,就有个问题出现在我们的面前:我们做模型其实就是为了最后的结果服务,但是如果 我们让计算机背问题答案,这样性能不就能达到理论的100%?

当然不可以这么做!我们做VQA任务是希望计算机自己能够拥有推理的能力,如果说你死记硬背就能得到高分了,那你就不在我们的衡量范围之内。

举个栗子:
在期末考试前三天,我提前把考试题目和答案都告诉你了,你开心坏了,在那疯狂背诵,那你期末考试得分就会很高。作者想要训练的模型是: 期末考试的题是你之前复习过的题库中的变形 ,就好比咱们高考一样,在那疯狂刷卷子,脑袋瓜在悄悄训练“模型”,然后在高考的考场上,让这个“模型”能够“预测”出结果。

因此,作者提出了一个数据集,叫做VQA v2,论文里对数据集的描述是这样的:It associates two images to every question. Crucially, the two images are chosen so as to each lead to different answers.其实翻译过来的意思就是, 这个数据集里面的每一个问题,都适配两张不同的图,得出两张不一样的答案 。怕你们听不懂,下面附了一张图:
在这里插入图片描述
我给你一个问题哈~,Who is wearing white clothes?
那么这个问题对于第一张图来说,应该是woman;对于第二张图来说,就是man
这就是 这个数据集里面的每一个问题,都适配两张不同的图,得出两张不一样的答案. 这句话的意思~
用这个dataset后,这个模型训练出来就很明显,是不鼓励“瞎猜”这种办法的。那么这个dataset也是本文的一个非常重要的一个base。

此外,作者还引用了一个数据集Visual Genome,那么下面我就把他简称为VG。作者在这里是这么描述VG dataset的:

This multipurpose dataset contains annotations of images in the form of scene graphs. Those constitute fine-grained descriptions of the image contents. They provide a set of visual elements appearing in the scene (e.g. objects, persons), together with their attributes (e.g. color, appearance) and the relations between them. We do not use these annotations directly, but they serve in [3] to train a Faster R-CNN model

简单来说,这个数据集主要是用在Faster-RCNN这个模型上进行训练,这个数据集里有图片的展示,有图片所对应的文本的描述(包括颜色、外观、物体、人等等一些属性),这个数据集的作用就是:
直接使用VG dataset的注释(与图像相关的问题)。与VQA v2的问题相比,VG dataset 里的问题有更多样化的公式和更多样化的答案。但此数据集的答案一般来说也很长,即短语,而VQA v2这个数据集中的大多数答案通常只有1到3个单词长。我们在这里只使用答案与VQA v2中的答案重叠的问题子集。
作者提出:
The prevailing approach to VQA is based on three components:

  1. Posing question answering as a classification problem.
  2. a deep neural network that implements a joint embedding model,
  3. trained end-to-end with supervision of example questions/answers.

敲重点👇!!!

3.Architect Model

在这里插入图片描述
那么这是整个文章的一个骨架,我将把它们拆开来跟大家分享。

3.1Question Embedding

在这里插入图片描述
首先,每个实例的输入都是一个Question和一张image。它俩是一一对应的。在Question这里,问题要将其标记化。

举个栗子。What is your name?那么这里会把它拆成4个部分,即 What is your name 这里要注意,输入的Question是通过:使用空格和标点符号分成单词,然后对每个单词标记化,我们也将之称为一个个的token。这个token在nlp里面的意思就是可拆分的最小单元。作者在paper中提到:

  1. 任何数字或者以数字为基础的单词,比如说10000或2:15pm,也被认为是单词
  2. 为了提高计算效率,对输入的问题长度进行限制,每个问题的最大长度为14个单词。超过14个单词的Question会把超过的部分直接丢弃。不足14个单词的Question会使用补0操作。
  3. 每个单词都会转换成一个带有查找表的向量表示。这个查找表的条目是在训练过程中根据其他参数学习到的300维向量。而这些向量是通过使用Glove词嵌入的方式进行初始化的。 这里看不懂Glove的,可以点此👈跳转到Glove相关知识。

然后作者把输入的Question通过词嵌入(Word Embedding)的方式进行保存后,把它放入到了GRU模型进行自然语言的文本特征提取。
笔者建议读者,如果看到这里,最好先看一下RNNLSTM的一些相关知识。因为在论文读者发表论文的时候,Transformer是没有出来的,但是为何这个模型不使用RNN或是LSTM?GRU模型又解决了哪些新的东西呢?我觉得这个需要大家自行去学习。

通过GRU模型后得出的结果就是输入的Question做了文本特征提取后的一个结果,这个结果里包含了输入的Question的文本特征。

3.2 Image features

在这里插入图片描述
首先,作者输入了一张image,然后计算机通过一个CNN来获得大小为K × 2048的向量表示,这个K是图像位置的数量。每一个位置都是由一个2048维的向量做标示。

上面这句话这么理解。首先用一张图片,然后我们对这张图片要做特征提取的操作。那么这里要注意的是,作者使用到了Faster R-CNN模型,这个模型中有一个名字叫做RPN,也就是Region Proposal Network,即区域提取网络,用这个神经网络,可以将一张图片上需要标记的特征区域全部框选出来。那么框选多少个呢,作者说是K个。然后对每一个框设置一个假如是32 × 64的一个区域,这样每个框的维度给他拉成一维向量,就是2048了。

作者在Image feature这一块,使用了a standard pretrained CNN, or a better-performing option,这个better-performing就是based on a ResNet CNN within a Faster R-CNN framework。它把ResNet CNN网络融入到了Faster R-CNN里。如果你没看懂,那么你需要补充一下残差网络,也就是ResNet的概念。

说了这么多,总结这一块就是:输入一张image,然后通过一个network,把它变成所对应图片的一个image feature。

3.3 Image attention

在这里插入图片描述

在这个部分,作者我们的模型实现了一个经典的问题引导的注意力机制,这是大多数现代VQA模型常见的一种机制。作者将之称为top-bottom attention。
其实在图片和文本各自经过自己的embedding后,它们都会转化为各自的一种向量表示形式。然后在这里要做的事情就是把它们做融合。那么怎么融合呢?
其实在VQA里面最重要的事情就是让图片特征与文本特征对齐。在这里作者用top-bottom attention的主要原因就是希望图片和文本“融合”起来。
注意: 这里有个东西要注意,就是在前面有个bottom-up attention。我们可以理解成,使用 bottom-up attention 能够把一张图的特征进行抽取出来。而后面的top-down attention,要理解成:在预测图片的时候,输入一张image,然后把待预测的image features抽取出来,然后用这个待预测的Image features放到上图所框的部分里。top-down attention机制就是引导机制。让image features去找到其所对应的答案。
在这里插入图片描述
作者在此用了三个函数,来代表把图像和答案进行了融合。
先说一下变量的含义:

Vi代表图像中的特征向量
q:问题嵌入
fa:非线性层
αi与该位置相关的标量注意权重
wa是一个习得的参数向量

对于每个位置i = 1,2,3…的图像中特征向量vi与图像对应的问题嵌入q进行拼接。然后经过非线性层fa,以获得与该位置相关的标量注意权重αi。其中Wa为学习参数向量。使用softmax函数对所有位置的注意力权重进行归一化。然后,所有位置的图像特征通过归一化值进行加权并求和,以获得代表所关注图像的单个2048大小的矢量v-head。

3.4 Multimodal fusion

这个部分就是上面说的融合了。怎么把image-features和text-features融合在一起呢?
在这里插入图片描述作者在这里使用的融合函数:
在这里插入图片描述
问题(q)和图像(v)的表示形式通过非线性层f()传递,然后把两个用点乘结合:h = fq(q)◦fv(v)
得到的向量h被称为问题和图像的联合嵌入,然后被馈送到输出分类器。
这里说一下哦:阿达玛乘积 = 元素乘法

3.5 output classifier

在这里插入图片描述
那么因为在 VQA-v2 数据集中,由于数据采集自不同的人,不同人对同一张图片有的时候意见也会不同的!所以同一张图片同一个问题可能会有多个答案。基于此事实,模型使用的是软分类的思路,并没有像以前做这种多选一的分类问题,而是转换成了 multi-label 分类问题。
候选答案由训练集中所有出现8次以上的正确答案而预先确定的,候选答案的个数为N=3129,数据集中每个训练问题都与一个或多个正确答案有联系,每个答案都被标签为一个标签类别,所有标签类别都被标注为0-1之间的一个概率值(soft score)。原本的 softmax 层被改为了 sigmoid 层。因此,最后的网络输出给了每个答案一个 0-1 的分数。每个答案的 accuracy 是 0-1,所以本文使用了 soft target score。这个概率值也将作为下面的ground-truth S。
这个多标签分类器和前面的嵌入h一起输入到非线性层中,最后再通过一个线性预测得到最终得分
h就是前面的multimodal的结果,W0是一个线性映射
Sigmoid输出允许对每个问题的多个正确答案进行优化。使用Soft score作为ground truth比二元目标提供更丰富的训练信号。经过sigmoid激活函数,得到预测分数S-hat。因为这里是二分类损失函数为二元交叉熵损失函数,具体公式如下:
在这里插入图片描述
这个其实还好理解,上图中h就是在3.4小节里最后融合的一个结果。

这里要提一嘴,在接下来的函数里,若没有特别声明,f()的形式,其作用都是进行映射转换。因为矩阵的乘法要满足规律的!n行m列的矩阵,要跟m行k列的矩阵才能相乘!
在这里插入图片描述
上面这个公式就是典型的二分类的交叉熵loss。这个不懂的话要去复习一下机器学习算法哦~~

好啦本篇重点都在上头!大家自行阅读啦~
感谢阅读!

这篇关于【文献阅读】VQA入门——Tips and Tricks for Visual Question Answering: Learnings from the 2017 Challenge的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟 开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚 第一站:海量资源,应有尽有 走进“智听

数论入门整理(updating)

一、gcd lcm 基础中的基础,一般用来处理计算第一步什么的,分数化简之类。 LL gcd(LL a, LL b) { return b ? gcd(b, a % b) : a; } <pre name="code" class="cpp">LL lcm(LL a, LL b){LL c = gcd(a, b);return a / c * b;} 例题:

Java 创建图形用户界面(GUI)入门指南(Swing库 JFrame 类)概述

概述 基本概念 Java Swing 的架构 Java Swing 是一个为 Java 设计的 GUI 工具包,是 JAVA 基础类的一部分,基于 Java AWT 构建,提供了一系列轻量级、可定制的图形用户界面(GUI)组件。 与 AWT 相比,Swing 提供了许多比 AWT 更好的屏幕显示元素,更加灵活和可定制,具有更好的跨平台性能。 组件和容器 Java Swing 提供了许多

【IPV6从入门到起飞】5-1 IPV6+Home Assistant(搭建基本环境)

【IPV6从入门到起飞】5-1 IPV6+Home Assistant #搭建基本环境 1 背景2 docker下载 hass3 创建容器4 浏览器访问 hass5 手机APP远程访问hass6 更多玩法 1 背景 既然电脑可以IPV6入站,手机流量可以访问IPV6网络的服务,为什么不在电脑搭建Home Assistant(hass),来控制你的设备呢?@智能家居 @万物互联

如何在Visual Studio中调试.NET源码

今天偶然在看别人代码时,发现在他的代码里使用了Any判断List<T>是否为空。 我一般的做法是先判断是否为null,再判断Count。 看了一下Count的源码如下: 1 [__DynamicallyInvokable]2 public int Count3 {4 [__DynamicallyInvokable]5 get

poj 2104 and hdu 2665 划分树模板入门题

题意: 给一个数组n(1e5)个数,给一个范围(fr, to, k),求这个范围中第k大的数。 解析: 划分树入门。 bing神的模板。 坑爹的地方是把-l 看成了-1........ 一直re。 代码: poj 2104: #include <iostream>#include <cstdio>#include <cstdlib>#include <al

MySQL-CRUD入门1

文章目录 认识配置文件client节点mysql节点mysqld节点 数据的添加(Create)添加一行数据添加多行数据两种添加数据的效率对比 数据的查询(Retrieve)全列查询指定列查询查询中带有表达式关于字面量关于as重命名 临时表引入distinct去重order by 排序关于NULL 认识配置文件 在我们的MySQL服务安装好了之后, 会有一个配置文件, 也就

论文阅读笔记: Segment Anything

文章目录 Segment Anything摘要引言任务模型数据引擎数据集负责任的人工智能 Segment Anything Model图像编码器提示编码器mask解码器解决歧义损失和训练 Segment Anything 论文地址: https://arxiv.org/abs/2304.02643 代码地址:https://github.com/facebookresear

音视频入门基础:WAV专题(10)——FFmpeg源码中计算WAV音频文件每个packet的pts、dts的实现

一、引言 从文章《音视频入门基础:WAV专题(6)——通过FFprobe显示WAV音频文件每个数据包的信息》中我们可以知道,通过FFprobe命令可以打印WAV音频文件每个packet(也称为数据包或多媒体包)的信息,这些信息包含该packet的pts、dts: 打印出来的“pts”实际是AVPacket结构体中的成员变量pts,是以AVStream->time_base为单位的显