CVPR2017 VQA 任务冠军:基于双向注意力机制视觉问答pyTorch实现

【导读】在CVPR2017上举办的VQA(Visual Question Answering)比赛中,基于双向注意力机制视觉问答(Bottom-Up and Top-Down Attention for Visual Question Answering)取得了冠军。其主要贡献在于提出了Bottom-Up and Top-Down Attention的机制, 不仅用一个个的单词,来指代检测到的物体,这种方法在含空间信息的同时还可以对应多个单词,比如一个形容词和名词,提供丰富的语义表现力。最近香港科技大学的Hengyuan Hu等人基于PyTorch 实现了该夺冠模型的代码并开源。

Bottom-Up and Top-Down Attention for Visual Question Answering

这是一个高效的PyTorch实现,是2017 VQA Challenge获奖作品。

该实现借鉴了下面的VQA系统:

1. "Bottom-Up and Top-Down Attention for Image Captioning and Visual Question Answering" (https://arxiv.org/abs/1707.07998)

2. "Tips and Tricks for Visual Question Answering: Learnings from the 2017 Challenge" (https://arxiv.org/abs/1708.02711)

▌比赛结果


准确度使用VQA evaluation metric.(http://www.visualqa.org/evaluation.html )指标进行计算。

▌信息


这是CMU 11-777高级多模态机器学习课程的一部分,是Hengyuan Hu, Alex Xiao, and Henry Huang的联合工作结果。

作为我们项目的一部分,我们将自下而上的注意力作为一个强大的VQA baseline。我们计划将目标检测与VQA集成在一起,Peter Anderson和Damien Teney等人已经在这项任务中取得很好的成果。我们本文的简洁高效的实现可以作为未来探索VQA的一个有用的baseline。

▌细节实现


我们的实现遵循论文的整体结构,但是有以下的简化:

1. 我们不使用Visual Genome以外的数据;

2. 我们固定目标的数量(一个图像K=36);

3. 我们不进行预训练,仅适用简单的单流分类器(single stream classifier);

4. 我们用ReLU激活函数代替门控tanh(gated tanh)。

前两点大大缩短了训练时间。我们的实现在单个Titan Xp上每个时段(epoch)约需要200秒,而在论文中描述的每个时段需要1个小时。

第三点只是因为我们觉得原文中的两个流分类器和预训练过程太复杂,并且是没有必要的。

对于非线性激活单元,我们尝试了gated tanh但是不能工作。我们也尝试了gated线性单元(GLU),它比ReLU更好,但最终我们选择ReLU是因为它更简单,并且由于使用GLU的收益太小而不能证明GLU确实使参数数目加倍。

通过上面几点简化,我们会期望性能下降。作为参考,本文报告的验证集的最佳结果是63.15。不包含visual genome额外数据的结果是62.48,每个图像固定使用36个目标的结果是62.82,使用两个分类器但不预训练的结果是62.28,使用ReLU的结果是61.63。这些数字引用文章的表1:“VQA的要诀和技巧:从2017 Challenge中学习”。综合以上所有的简化步骤,我们的实现在验证集上达到了59-60。

为了缩小差距,我们添加了一些简单但有效的修改。包括:

1. 添加dropout缓解过拟合;

2. 成倍增加神经元数量;

3. 权重标准化(平衡网络BN似乎不行)

4. 切换到Adamax优化器

5. 梯度限幅

这些小修改使结果数据达到大约〜62.80。我们将原始论文中基于连接的注意模块变为基于投影的模块。这个新的注意力模块受到了“Modeling Relationships in Referential Expressions with Compositional Modular Networks)(https://arxiv.org/pdf/1611.09978.pdf)文章的启发,但是有一些修改。在这个新的注意力模块的帮助下,我们将性能提高到了63.58,超过了报告的最佳结果,我们没有额外的数据和并且需要的计算成本更少。

▌用法准备


确保你的机器上有NVIDIA GPU和Python 2,且拥有至少70 GB的磁盘空间。

1. 用CUDA和Python 2.7安装PyTorch

2. 安装h5py

▌数据设置


所有数据都应该下载到根目录的data/目录中。

下载数据的最简单方法是从库根目录运行脚本工具/ download.sh。如果脚本不起作用,应该比较容易检查脚本中的问题,并根据您的需要修改其中的选项。然后从库根目录运行tools / process.sh,将数据处理成正确的格式。

▌训练


只需运行python main.py即可开始训练。将在每个epoch步骤中打印训练和验证的分数,最好的模型被保存在“saved_models”目录下。

VQA Challenge介绍(参考其中文和英文网址)

▌VQA挑战:


VQA 全称是 visual question answering。具体任务是给定一幅图像和一个关于这幅图的文本问题,然后就这个问题给出文本回答。VQA是一个多模态问题,这也是VQA具有挑战性的地方。你需要同时处理文字和图片,并进行推理,来得到最后的答案。类似的多模态的问题有 image captioning,visual dialog 等等。VQA Challenge开始于2016年,VQA Challenge 2017是其第二次VQA Challenge。更多关于VQA Challenge的内容,可参看 http://www.visualqa.org/challenge.html

▌VQA常用的数据集


比较常用的数据集就是 VQA 这个数据集,来自 Gatech 和微软。目前VQA数据集已经更新到v2.0版本,其中包括204721个COCO图像,大于1.1 million个问题,大于11 million个答案。V2.0版本中每个问题有两个相似的图像,并且有不同的答案,如下图所示:

参考链接:

http://www.visualqa.org/challenge.html

https://github.com/hengyuan-hu/bottom-up-attention-vqa

原文发布于微信公众号 - 专知(Quan_Zhuanzhi)

原文发表时间:2017-12-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏深度学习那些事儿

浅谈深度学习中超参数调整策略

深度学习中,设计模型以及保证模型的正确性是首要需要考虑的。当模型设置完成时,理论上模型不存在问题,实现效果也通过计算可以复现出来。一切准备就绪后,那么接下来需要...

22350
来自专栏ATYUN订阅号

不用P图软件,TensorFlow pix2pix也能帮你打造出六块腹肌!

可视化结果是十分强大的。然而,在健身领域,要想清楚地看到未来的锻炼结果往往是很困难的。我们是否可以利用深度学习让人们更接近他们的个人健康目标,从而帮助他们设想未...

60240
来自专栏CreateAMind

代码解读Top-down Neural Attention by Excitation Backprop及模型架构图

34530
来自专栏鸿的学习笔记

在hadoop2.0上实现深度学习

我承认我又偷懒了,只是大概写了下提纲,和完成了第一章节的部分写作。不睡午觉的恶果啊,原本已经写好草稿,讲讲语言和信息的关系,结果,实在是回家后好困。

10720
来自专栏AI科技评论

开发 | 深度神经网络可视化工具集锦

AI 科技评论按:原文作者zhwhong,载于作者的个人博客,经授权发布。 TensorBoard:TensorFlow集成可视化工具 GitHub官方项目...

39860
来自专栏尾尾部落

使用自己的语料训练word2vec模型

先对新闻文本进行分词,使用的是结巴分词工具,将分词后的文本保存在seg201708.txt,以备后期使用。

98030
来自专栏量子位

GitHub上大热的Deep Photo终于有TensorFlow版了!

王小新 编译整理 量子位 出品 | 公众号 QbitAI Prisma这个应用,你可能很熟悉。这是一个能将不同的绘画风格,迁移到照片中,形成不同艺术风格的图片。...

42260
来自专栏AI研习社

Github 推荐项目 | 用 TensorFlow 简单地实现 StarGAN

StarGAN 是一种新颖且可扩展的方法,可以仅使用一个模型来执行多个域的图像到图像的转换。StarGAN 这样一个统一的模型体系架构让开发者可以同时训练单个网...

10310
来自专栏专知

【前沿】TensorFlow Pytorch Keras代码实现深度学习大神Hinton NIPS2017 Capsule论文

【导读】10月26日,深度学习元老Hinton的NIPS2017 Capsule论文《Dynamic Routing Between Capsules》终于在a...

43460
来自专栏PPV课数据科学社区

基于Libsvm的图像分类

关于Libsvm的废话 基于Libsvm的图像分类实例 说说图像分类的处理结果 1. 关于Libsvm的废话 先来一段废话,大家有心情看看就行,那就是关于支持...

38640

扫码关注云+社区

领取腾讯云代金券