【论文】Tips and Tricks for Visual Question Answering: Learnings from the 2017 Challenge

2023-05-16


【论文】eney, Damien, Peter Anderson, Xiaodong He, and Anton Van Den Hengel. Tips and tricks for visual question answering: Learnings from the 2017 challenge.(pdf)


主要思想

论文提出一些细节上优化提升 VQA 的方法,主要包括如下:

  • sigmoid output:在结果预测时,允许有多个答案,对每个答案采用 sigmoid 方法预测
  • use soft scores as ground truth targets:预测时采用回归预测,预测概率,而不是传统的分类
  • gated tanh activations:激活函数采用 tanh
  • image features from bottom-up attention:图像特征提取采用目标检测的方法
  • pretrained representations of candidate answers:初始化输出层的权重
  • large mini-batches and samrt shuffling:训练过程中使用 large mini-batch 和混洗的方式

模型架构

模型前面采用了常见的 joint embedding of input question and image,后半部分对候选答案使用了一个多标签分类器

在这里插入图片描述

Question embedding

使用 GloVe 提取问题语义特征,整个数据集中只有 0.25% 问题超过了 14 个单词,因此文章考虑一个问题最多包含 14 个单词,超出的全部丢弃。使用 Wikipedia / Gigaword 语料库上预训练好的 GloVe (Global Vectos for Word Representation)来进行词特征的向量化,每个单词背转化为一个 300 维的向量。对于少于 14 个单词的语句,采用 end-padded 补齐。于是,一个问题就可以被表述为 14×300 的矩阵,送入 GRU(Recurrent Gated Unit),GRU 的 hidden_size = 512,我们提取最有一个状态作为我们的问题语义向量 q q q

Image features

视觉特征的注意力模型 bottom-up attention 是指通过 faster-rcnn 的检测区域提取不同类别物体的特征,这种方式也可以叫做给予显著性的 attention 机制。图像通过 faster-rcnn 后,获得一个 K × 2048 K\times2048 K×2048 的矩阵, K K K 代表图片有多少个位置,每个位置由一个 2048 2048 2048 维的向量表示,这个向量是 K K K 对应区域的图像特征编码, K K K 是从 faster-rcnn 的 top-K 中确定的

实验中作者既选择了一个固定值 K = 36 K=36 K=36,也设定 K K K 也可以是一个自适应的数值,允许 K K K 随图像的复杂度而变化,最大上限是 100,这种情况下 VQA v2 产生的 K K K 的均值是每张图片 60 个区域

这种注意力机制不受训练影响,应该属于 hard attention。faster-rcnn 在 visual genome 数据上训练,同时加入更多标签,使 faster-rcnn 能够提取到更精细的区域与特征,最后实验证明,bottom-up attention 能够使模型性能提升 6%

Image attention

文中的模型采用 question-guided attention(作者将这一步成为 top-down attention,区别于 bottom-up attention)机制,该机制通过问题的语义特征指导视觉特征

对图片上的每个位置 i = 1 , ⋯   , K i=1,\cdots,K i=1,,K,图像特征 v i v_i vi 和问题语义特征 q q q 结合在一起,共同经过一层非线性映射 f a f_a fa,然后再经过一个线性层得到一个标量注意力权重 α i , t \alpha_{i, t} αi,t

a i = w a f a ( [ v i , q ] ) α = s o f t m a x ( a ) v ^ = ∑ i = 1 K α i v i a_i=w_af_a([v_i, q])\\ \alpha = softmax(a)\\ \hat v=\sum_{i=1}^K\alpha_iv_i ai=wafa([vi,q])α=softmax(a)v^=i=1Kαivi其中, w a w_a wa 实现学习参数的向量。所有位置的注意力权重经过 softmax 函数进行归一化。然后,所有位置的图像特征以归一化的注意里权重为权值,然后加和得到一个大小为 2048 的向量 v ^ \hat v v^

注意到这种注意力机制是 one-glimpse attention,区别于其他复杂的注意力机制(stacked、multi-head 以及 bidirectional attention)

Multimodal fusion

多模态特征融合 joint embedding 采用对应位置相乘的方式(hadamard product),问题语义特征 q q q 和图像特征 v ^ \hat v v^ 经过非线性层处理后通过 Hadamard product 结合起来 h = f q ( q ) ∘ f v ( v ^ ) h=f_q(q)\circ f_v(\hat v) h=fq(q)fv(v^)

Output classifier

候选答案集合在文中被称为输出词汇表,从训练集中出现 8 次以上的所有正确答案中预先选出来,最终得到一个 N = 3129 N=3129 N=3129 的候选答案集。作者将 VQA 是做一个多标签分类问题。VQA v2 中每一个训练的问题都有一或多个回答,每一回答对应 [ 0 , 1 ] [0,1] [0,1] 中的一个 soft accuracy。之所以会出现多种回答和 [ 0 , 1 ] [0,1] [0,1] 准确率,是因为人们在标注时的分歧,尤其是模棱两可的问题或者相同意思不同表述的回答。由于标注的模糊性,训练集有 7% 的问题无法从输出词汇表中给出正确答案。作者没有丢弃这部分问题,而发现了一个有意思的现象——这些模糊问题都会将输出词汇表中所有的候选词的预测得分推向零

输出分类器将 h h h 输入到非线性变换层 f o f_o fo(由后面知道这个非线性变换层 f o f_o fo 表示 gated tanh activations),然后在经过一个线性变换得到预测得分 s ^ \hat s s^,可以描述为如下式子 s ^ = σ ( w o , f o ( h ) ) \hat s=\sigma(w_o, f_o(h)) s^=σ(wo,fo(h))其中 w o ∈ R N × 512 w_o\in\mathbb R^{N\times512} woRN×512 是一个学习矩阵

sigmoid 函数将最终得分归一化到 ( 0 , 1 ) (0,1) (0,1),损失函数设计如下所示,类似于交叉熵损失,只不过作者使用了的是 soft target scores

L = − ∑ i = 1 M ∑ j = 1 N s i j l o g ( s ^ i j ) − ( 1 − s i j ) l o g ( 1 − s ^ i j ) L=-\sum_{i=1}^M\sum_{j=1}^Ns_{ij}log(\hat s_{ij})-(1-s_{ij})log(1-\hat s_{ij}) L=i=1Mj=1Nsijlog(s^ij)(1sij)log(1s^ij)其中 M M M 表示训练问题的数量, N N N 表示训练候选答案的数量, s s s 表示 soft accuracy of ground truth answer

这个损失函数有两个优点:

  1. sigmoid 的输出使每个问题可以预测多个答案
  2. 使用 soft scores 作为 targets 可以比 binary targets 更利于训练,因为 soft scores 可以捕捉到在 ground truth 标注中出现的一些偶然不确定情况

Pretraining the classifier

训练过程中,学习矩阵 w o w_o wo 的一行对应一个候选答案。为了使预测更准确,从两个方面使用候选答案的先验信息初始化 w o w_o wo 的行:

  1. 从语言学的角度,作者利用了每个答案的 GloVet word embeddings 作为特征。如果出现答案不能和预先训练好的 embedding 精确匹配时,作者会在检查拼写、删除连字符号或从多单词表达中保留单个表达后使用最近匹配,得到的结果记为 w o t e x t w_o^{text} wotext,大小为 300
  2. 从视觉的角度,利用 Google 搜索与候选答案相关的 10 张图片,然后送入预训练好的 ResNet-101 上提取特征,将 mean-pool 处理后的 10 个特征做平均,产生一个大小为 2048,记为 w o i m g w^{img}_o woimg

有了预设计好的 w o t e x t w_o^{text} wotext w o i m g w_o^{img} woimg,然后在训练集上使用小学习(0.5 和 0.01)率微调。最终,我们有如下的组合方式 s ^ = σ ( w o t e x t f o t e x t ( h ) + w o i m g f o i m g ( h ) ) \hat s=\sigma\left(w_o^{text}f_o^{text}(h)+w_o^{img}f_o^{img}(h)\right) s^=σ(wotextfotext(h)+woimgfoimg(h))

下图展示了引入 pretrained w o t e x t w_o^{text} wotext w o i m g w_o^{img} woimg 的结果
在这里插入图片描述

Non-linear layers

前面一直提到了一个非线性变换层,通常的做法是使用 FC + ReLU

但是文中作者受 LSTM 和 GRU 中门函数的启发,提出了下面的 gated hyperbolic tangent activatio,每一个非线性变换层 f a : x ∈ R m → y ∈ R n f_a:x\in\mathbb R^m\rightarrow y\in\mathbb R^n fa:xRmyRn 定义为
y ~ = t a n h ( W x + b ) g = σ ( W ′ x + b ′ ) y = y ~ ∘ g \tilde y=tanh(Wx+b)\\ g=\sigma(W'x+b')\\ y=\tilde y\circ g y~=tanh(Wx+b)g=σ(Wx+b)y=y~g 其中 g g g 可以被视为作用在中间激活 y ~ \tilde y y~ 上的一个门函数,用于控制信息的有效传递

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

【论文】Tips and Tricks for Visual Question Answering: Learnings from the 2017 Challenge 的相关文章

  • visual studio code中模拟浏览器端向服务端发起请求

    一 需要使用的插件 二 使用方式 1 创建 http文件 2 在所创建的 http文件中输入如下内容 相关具体的使用方式可参见 xff1a https marketplace visualstudio com items itemName
  • 【STL十八】算法——不修改序列的操作(for_each、count、find、equal、search)

    STL十八 算法 不修改序列的操作 xff08 for each count find equal search xff09 一 简介二 头文件三 分类四 不修改序列的操作1 for each2 count count if3 find f
  • Visual Assist 在VS2022中安装失败问题

    直接找到C Users xxxxx AppData Local Microsoft VisualStudio 17 0 xxxxx 文件夹 直接右击删除这个文件夹 注意要在VS2022关闭时再删除 可以先做一次备份 正常运行安装VA X S
  • Tips for Qt

    Based on Qt 5 14 0 Qt Creator 4 11 0 1 在UI设计界面添加控件后 xff0c 要编译一下 xff0c 再到编辑界面写代码 xff0c 否则系统不识别新添加的控件 2 多看帮助文档 xff0c 好多开发时
  • 机器学习中的降维与度量学习(reduce dimension and metric learning)

    降维与度量学习 k近邻学习 k近邻 k Nearest Neighbor 简称kNN 学习是一种监督学习方法 其工作机制为 xff1a 在样本中 xff0c 根据距离度量找出训练集中临近的k个样本 xff0c 基于这k个样本进行预测 一般
  • A review of visual SLAM methods for autonomous driving vehicles

    自主驾驶车辆的视觉SLAM方法回顾 原论文在文章末尾 摘要 xff1a 自主驾驶车辆在不同的驾驶环境中都需要精确的定位和测绘解决方案 在这种情况下 xff0c 同步定位和测绘 xff08 SLAM xff09 技术是一个很好的研究解决方案
  • java 优化双重for循环

    首先我们要有两个对象分别是 学生信息 和 学生住宿信息 span class token keyword class span span class token class name Student span span class toke
  • Visual Studio 2022下载安装

    Visual Studio 2022下载安装 1 进入官网 官网地址 xff1a https visualstudio microsoft com 这里以Windows操作系统为例 根据需要选择版本 xff0c 我这里下载的是Enterpr
  • CUDA 初体验

    CUDA Visual Profiler CUDA编程指导 shared memory Page locked out memory C CUDA 调用 CUDA 编程介绍 CUDA 数据同步 CUDA Visual Profiler 在上
  • Tip of the Week #10: Splitting Strings, not Hairs

    Tip of the Week 10 Splitting Strings not Hairs Originally published as totw 10 on 2012 08 16 By Greg Miller jgm google c
  • 电子书djvu格式简介zz

    DjVu是由美国AT T实验室于1996年开发成功的一项新的图片压缩技术 DjVu的主要技术是将图像分为背景层 纸的纹理和图片 和前景层 文本和线条 通过将文字和背景分离开来 DjVu可以用高分辨率来还原文字 使锐利边缘得以保留 并最大限度
  • Python语法:... for ... in ... if ...

    Python中 for in if 语句是一种简洁的构建List的方法 从for给定的List中选择出满足if条件的元素组成新的List 其中if是可以省略的 下面举几个简单的例子进行说明 for in for in 语句 实例如下 1 a
  • Python 的 map、列表推导、循环效率比较

    话不多说 直接上代码 1 准备数据 三个列表 import time x x1 x2 for i in range 1000000 x append i x1 append i x2 append i 2 开始表演 2 1 for循环 st
  • 如何用logging记录python实验结果?

    做python实验有时候需要打印很多信息在控制台 console 但是控制台的信息不方便回顾和保存 故而可以采用logging将信息存储起来 先新建一个文件message log 代码如下 import logging logging ba
  • layer_factory.hpp:81] Check failed: registry.count(type) == 1 (0 vs. 1) Unknown layer type: Python

    这个问题我查了很多博客 里面很多都相近 但是不能用 首先这个问题的意思是 python层这个名字无法识别 然后给出了可以是别的例子 而这个层在trainval和text的prototxt中都有 解决方法 在caffe文件夹下找到makefi
  • Tip of the Week #49: Argument-Dependent Lookup

    Tip of the Week 49 Argument Dependent Lookup Originally posted as totw 49 on 2013 07 14 whatever disappearing trail of i
  • win10远程桌面的坑

    win10的远程桌面的确是清晰度非常好 操作非常流程的 但是还是有坑的 举两个踩坑例子 1 录屏软件在远程桌面退出后无效了 无法录制屏幕了 2 监控客户端在退出远程桌面后 再进去远程桌面 打圈圈卡死 因此一些应用不适合在win10远程桌面办
  • git拉取和推送如何指定远程服务器的ssh端口

    家里弄了个嵌入式服务器 里面安装了git 申请了动态公网ip 上行速度40Mbps 可比国内的服务器带宽大多了 所以要好好利用起来 但是由于是动态公网ip 因此做了端口映射 指定端口9999到嵌入式服务器的22端口 如何让git push
  • matlab for循环坑

    matlab 用 for 嵌套循环遍历数组时 可能有 bug matlab octave 环境 linux Matlab R2018a 1 windows GNU Octave version 5 2 0 以 for x vector 的形
  • 批处理学习教程(4)------for的用法

    循环 for 1 如果批处理不具备批量处理的功能 那么它就徒有虚名了 而命令 for 在某种意义上彻底体现出了批处理的强大快捷省事批量的作用 在看过 for 后 可以归纳出 for 大致可以分三种常用的类型 或者叫使用方法 从针对的循环目标

随机推荐