AI作者:Chan Joya
AI编辑:田旭
Pythia,她是古希腊的阿波罗神女祭司,以传达阿波罗神的神谕而闻名,被认为能预知未来。她的名字,被 Facebook AI Research 将赋给了在 VQA 2018 Challenge 上的冠军模型。Pythia 以 VQA 2017 Challenge 的冠军模型 Up-Down 为基本方法,辅助以了诸多工程细节上的调整,这使得 Pythia 较往年增加了约 2% 的性能提升(70.34% → 72.25%)。在这里,我们将尝试去解读这个模型。
论文:Pythia v0.1: the Winning Entry to the VQA Challenge 2018
代码:facebookresearch/pythia (虽然在提交结果时为 72.25%,但公开的代码中达到的效果为 72.27%)
首先我们将会对 2017 VQA Challenge 的冠军模型 Up-Down 进行解读,而后再引入 Pythia 为其的改进,最后从代码中去查看值得注意的实现部分。一起来看吧!
2017 VQA Challenge 冠军,Up-Down 模型解读
Bottom-Up and Top-Down Attention for Image Captioning and Visual Question Answering(CVPR'18,澳大利亚国立大学 & 京东 AI 研究院 & Microsoft Research & 阿德莱德大学 & 麦考瑞大学)
Tips and Tricks for Visual Question Answering: Learnings from the 2017 Challenge(CVPR'18,阿德莱德大学 & 澳大利亚国立大学 & Microsoft Research)
VQA 2017 Challenge 的冠军模型体现在这两篇文章中,我们放在一起介绍。CVPR'18 这一篇是方法论,Tips and Tricks 算是工程实现方面的报告。在方法论中,主打的就是 top-down 和 bottom-up 和两种 attention 机制:前者是指的人会被视觉中的显著突出物体给吸引,是由图像这种底层信息到上层语义的;而后者指的是人在进行某项任务的时候,紧密关注和该任务相关的部分,是由上游任务去关注到图像的。一般的注意力机制就像下图中的左侧显示的那样,是自上而下(top-down)的,表现在依据任务为这些 grid cell 去分配不同的权重,而右侧的注意力机制是自下而上的,从物体层面(object-level)去注意到显著性区域:
那我们首先来看 bottom-up attention 如何实现。作者采用了基于 ResNet-101 的 Faster R-CNN,添加了 attributes 分支在 VisualGenome 上进行了训练,也正因为如此,Faster R-CNN 能进行更为细致的检测 (图2.2)。在得到图像的预测区域后,再取到这个区域对应的特征(7×7×2048 做一个 mean pooling)。也就是说,在 VQA 模型中是没有用到预测出的标签的,而仅仅使用了该区域的特征。
再来看 top-down attention,这个注意力机制的原型即为 image caption 中的 soft attention 机制,本质上是为不同区域的图像特征赋予权重。如何生成这些权重呢?在这里依照下图简单说明一下:(1)GRU 编码问题为 hidden state ;(2)bottom-up 部分得到图像向量
,
是一个 2048 维的向量;(3)令对于
的权重为
,
,
是需要学习的参数,
可以看作是输入为
和
的一个 LSTM。通过这样一个变换接上 softmax,形成对应于每一个
的权重为
。而后续的过程也可以很自然的得出了,利用权重对图像特征做 weighted sum:
,与问题
一起再经过一个 LSTM 得出候选答案的概率。
两者结合后的模型称为 Up-Down,以下提供了在 VQA v2.0 上的评测结果,为提交时最高:
从评测时集成了 30 个模型就可以看出,文章中一定有诸多的实现细节。下面就是 Tips and Tricks 一文中提及的细节:
sigmoid outputs: 允许多个正确答案存在,利用多个二分类器来替代 softmax;
soft training targets: 这里一开始理解成了知识蒸馏中的 soft target,但是实质上在这里训练时的标签没有任何不同,只是 allow uncertain answers;
image features from bottom-up attention: 这也就是核心方法 Up-Down;
gated tanh activations: 门控 tanh **函数,灵感来源于 LSTM/GRU 中的 gating 操作,实验中发现具有比 ReLU 和 tanh 更好的效果。简述如下:这个层的目标是完成一个非线性的映射
,参数为
,实现为
,其中
分别表示 sigmoid 函数和 element-wise 乘积。
就可以看作是对于
的一个门控;
output embeddings initialized using GloVe and Google Images: 这里的操作就很骚了,涉及对于答案分类时最后一层的初始化方法。本质上每个答案的分数就是图片特征和问题特征与层权重的点积:
,而层权重就可以看成是答案的特征;对于
通过答案的 GloVe word embeddings 进行初始化,对于
,对每个答案在 Google Images 上搜索,挑选 10 个最相关的图片计算经过 ImageNet 预训练的 ResNet-101 特征进行初始化;
large mini-batches: 256 和 384 最佳;
smart shuffling of training data: 保持在同一个 batch 中的问题都有同样的一对,但是其对应的是不同的图像和答案。
涨点情况以及细致分析可以移步原论文。这里也有分享的 slides:VQA-Challenge-Slides-TeneyAnderson,将本可以秘而不宣的 tricks 做详细的 ablation study 是一件非常令人感动的事情。
代码:Bottom-Up and Top-Down Attention for Image Captioning and Visual Question Answering
Pythia: 极致的工程能力
Pythia v0.1 the Winning Entry to the VQA Challenge 2018(arxiv'18,Facebook AI Research)
做出这个模型的,是 Facebook AI Research (FAIR)’s A-STAR team. A-STAR 的意思,如果将其拆解开来则是 Agents that See, Talk, Act, and Reason。这些人类才特有的动作,似乎都是 VQA 这个任务里所不可少的一部分。Pythia 的重点调整在于模型结构,超参数,数据增强,以及最后的模型集成。我们分条列举:
模型结构:65.32% → 66.91%
还记得 Up-Down 里面那个长相奇怪的门控**函数吗?Pythia 使用了 RELU+Weight Normalization 来取代它,这样可以降低计算量,但是效果上有无提升文中没有给出实验。
在进行 top-down 的 attention 权重计算时,将特征整合的方式由原本 concat 转换为 element-wise multiplication,这也是可以降低计算量的表现。
在第二个 LSTM 做文本和图像的联合预测时,hidden size 为 5000 最佳。
超参数:66.91% → 68.05%
这里主要是学习率的调整。作者发现在 Up-Down 模型中适当减小 batch 可以带来一些提升,这意味着在同样的 batch 下提升学习率可能带来性能的提升。为了防止学习率过大不收敛,他们采用了广泛使用的 warm-up 策略,并使用了适当的 lr step。这使得 Pythia 的性能提升约一个点。
Faster R-CNN 增强:68.05% → 68.49%
将 Faster R-CNN 的 backbone 由 ResNet-101 换为 ResNext-101-FPN,并且不再使用 ROI Pooling 后的 7×7×2048 + mean pooling 表征 object -level 特征,而采用 fc7 出来的 2048 维向量以减少计算量。
数据增强:68.49% → 69.24%
采用了图像水平翻转的增强方法,这样的方式在纯视觉任务中广泛出现。在这里还需要做变换的是,将问题和答案中的“左”和“右”对调。
Bottom-up 增强:69.24% → 70.01%
光是使用 Faster R-CNN 在 head network 上的 fc7 特征不足以表示图像整体的特征。于是作者们融合了 ResNet-152 提取的整图特征,并且增加了在每一张图提取 object-level feature 的个数。它们分别带来了可见的提升。
模型集成:70.96% → 72.18%
注:72.18% 是 VQA v2.0 test-dev 上的结果,而提交在 test-std 上的结果为 72.27%。test-std 才是最终的榜单排名依据。
总结
Up-Down 是一个十分优秀的,面向于真实图像场景的 VQA 模型,Pythia 是对它的强化实现(不愧是 FAIR,代码写的真是好)。以 Up-Down 为基础的方法已经连续斩获 2017 和 2018 的 VQA 冠军。现在 VQA 2019 Challenge 已经拉开帷幕,winner 将在 VQA and Dialog Workshop, CVPR 2019 进行公布。还会是 Up-Down 吗?
文中的错误与疏漏,恳请批评指正。欢迎交流 ~(另外弱弱的问一句,正进行/有意 VQA 2019 Challenge 的童鞋,可以拉上我呀 ლ╹◡╹ლ!有卡,我们一起炼丹!)
AI编辑:田旭
推荐阅读
堪比Focal Loss!解决目标检测中样本不平衡的无采样方法
这份Kaggle Grandmaster的图像分类训练技巧,你知道多少?
TensorFlow 2.2.0-rc0,这次更新让人惊奇!
机器学习算法工程师
一个用心的公众号