论文笔记:Image Caption(Show, attend and tell)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hongbin_xu/article/details/84855631

Show, Attend and Tell: Neural Image Caption Generation with Visual Attention

Show, Attend and Tell

1、四个问题

  1. 要解决什么问题?
    • Image Caption(自动根据图像生成一段文字描述)。
  2. 用了什么方法解决?
    • 在Show and Tell提出的Encoder-Decoder架构的基础之上进行了改进,引入注意力机制。
    • 提出了两种注意力机制的变种:“hard” attention和"soft" attention。
  3. 效果如何?
    • 在MS COCO以及Flickr8k和Flickr30k上取得了state-of-the-art的效果。
  4. 还存在什么问题?
    • Encoder采用了ImageNet上预训练好的VGG网络,然而VGG的特征提取能力相比ResNet、DenseNet等较弱,一定程度上会影响网络性能。
    • 训练LSTM时one-hot编码的词向量没有采用预训练的word embedding模型,也可能会影响。

2、论文概述

2.1、简介

  • 研究难点:

    • 图像标注模型既要能够处理计算机视觉任务如确定图像中有哪些物体,但他们也必须能够以自然语言的形式捕获并表示出这些物体之间的关系。
  • 架构:

    • 使用CNN来提取图像中的视觉信息,并用RNN来解码这些视觉信息转换成自然语言。
  • 注意力机制:

    • 此前的工作中,大家广泛认同的是:使用视觉特征(比如从CNN后面的层中的特征图)提取图像中的显著物体的信息。
    • 但是这个方法有一个可能的缺点:会损失一部分可能对生成图像描述有用的信息。
    • 使用低层的特征有助于解决这个问题,但是使用低层特征需要一个有效的机制来让模型关注对这个任务有用的信息。
    • 为此,提出了两个注意力机制的变种:hard attention和soft attention。
  • 贡献:

    • 提出了两个基于注意力机制的Image Caption模型:soft attention,通过普通的反向传播算法即可训练;hard attention,需要最大化一个近似的变化下边界。
    • 通过可视化技术展示了网络在生成单词都是在关注“哪里”和“什么”。
    • 在三个基准数据集(MS COCO、Flickr8k、Flickr30k)上对模型进行测试,取得了state-of-the-art的效果。
  • 除了神经网络之外,caption还有两种典型的方法:

    1. 使用模板的方法,填入一些图像中的物体;
    2. 使用检索的方法,寻找相似描述。
    • 这两种方法都使用了一种泛化的手段,使得描述跟图片很接近,但又不是很准确。所以作者在此基础上提出了自己的模型架构,将soft 和hard attention引入到caption,并利用可视化手段理解attention机制的效果。
  • 模型:

在这里插入图片描述

2.2、模型细节

  • 论文中提出了两个注意力机制的结构,hard attention较为复杂,暂时还没搞懂。所以就着重介绍soft attention。
  • Encoder:
    • 使用CNN来提取 L L D D 维的特征作为注释向量。每个都对应图像中的一个区域: a = { a 1 , . . . , a L } , a i R D a = \{ a_1, ..., a_L \}, a_i \in \mathbb{R}^D
    • 与此前的工作中使用Softmax层之前的全连接层提取图像特征不同,本文所提取的这些vector来自于 low-level 的卷积层,这使得decoder可以通过选择所有特征向量的子集来选择性地聚焦于图像的某些部分,也就是将attention机制嵌入。
  • Decoder:
    • 解码阶段用LSTM生成caption。
    • 生成的结果: y = { y 1 , . . . , y C } , y i R K y = \{ y_1, ... , y_C \}, y_i \in \mathbb{R}^K 。其中 C C 是句子长度, K K 是词表大小, y y 是各个词的one-hot编码所构成的集合。

在这里插入图片描述

在这里插入图片描述

  • LSTM:
    • 输入、遗忘和输出门由sigmod激活,所以得到的值在0—1之间,可以直接作为概率值,候选向量 c t c_t h t h_t 由tanh激活,值在-1—1之间。三个输入量分别是, E y t 1 Ey_{t−1} 是look-up得到词 y t 1 y_{t−1} 的 m 维词向量; h t 1 h_{t−1} 是上一时刻的隐状态; z t R D z^t \in \mathbb{R}^D 是LSTM真正意义上的“输入”,代表的是捕捉了特定区域视觉信息的上下文向量。
    • 隐状态和细胞状态的初始值,由两个独立的多层感知机得到。输入是各个图像特征的均值。 c 0 = f i n i t , c ( 1 L i L a i ) c_0 = f_{init, c}(\frac{1}{L} \sum_i^L a_i) h 0 = f i n i t , h ( 1 L i L a i ) h_0 = f_{init, h} (\frac{1}{L} \sum_i^L a_i)
    • 根据以上,我们就可以通过最大概率求得当前时刻输出的词,并作为下一时刻的输入,从而获得caption结果。
    • 在这里插入图片描述
  • attention:
    • z t z_t 是LSTM真正的输入,是一个和时间相关的动态变量,不同时间关注在不同的图像区域内,那么这里就可以和attention结合起来,规定特定时间内关注某个区域。
    • z t z_t 由时间和位置区域决定,对于每个时间的每个区域都定义一个权重值 α t i \alpha_{ti} 。为了满足权重的归一化,则通过softmax函数实现,Softmax的输入需要包含位置信息和前一时刻隐层值。
    • 在这里插入图片描述
    • 接着, z t z_t 就可以通过图像的特征 a i a_i 以及产生的权重 α t i \alpha_{ti} 得到。
    • 在这里插入图片描述
    • ϕ \phi 函数实际上就是hard attention和soft attention了。
  • hard attention暂时还没弄懂,暂时先不写。
  • soft attention:
    • 在hard attention中,权重属于贝努利分布,非0即1。不连续意味着不可导,即无法在反向传播中利用梯度更新。
    • 而soft attention中,不像hard attention那样对特定时间特定区域只有关注与不关注,而是对所有区域都关注,只是关注的重要程度不一样。
    • 直接使用前面得到权重 α t \alpha_t ,加权求和得到 z t z_t
    • 在这里插入图片描述
    • 由于模型是连续可导的,现在可以直接使用BP算法对梯度进行更新。
    • 此外,soft attention模型还要引入阈值 β \beta ,用来让解码器决定是把重点放在语言建模还是在每个时间步骤的上下文中。
    • 在这里插入图片描述
    • 在这里插入图片描述
    • 最终的损失函数:
    • 在这里插入图片描述
    • soft attention最终通过最小化上式实现。
    • 式中的正则项是为了让 t C α t i 1 \sum_t^C \alpha_{ti} \simeq 1 , 目的是为了让attention平等的对待图片的每一区域。

2.3、实验

  • 作者用了三个数据集进行实验,Flickr8k采用RMSProp优化方法, Flickr30k和COCO采用Adam进行优化,用vgg在ImageNet上进行预训练,采取64的mini-batch,用bleu和meteor作为指标进行评分,下表是实验结果,可以看出本文所提出的方法取得了很好的结果。

在这里插入图片描述

  • 可视化,为了更好地了解attention的效果,作者还对模型进行了可视化,如下图所示,可以看出attention机制可以学习到类似于人注意力一样的信息。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3、参考资料

  1. 论文学习5“Show, Attend and Tell: Neural Image Caption Generation with Visual Attention”文章学习
  2. 【图像理解】之Show, attend and tell算法详解
  3. https://github.com/sgrvinod/a-PyTorch-Tutorial-to-Image-Captioning#training

猜你喜欢

转载自blog.csdn.net/hongbin_xu/article/details/84855631
今日推荐