赞
踩
由于最近在做一个Image Caption的任务,读了一些最新的论文,把CVPR2017里比较中规中矩的Image Caption论文给拿出来总结一下。说中规中矩是因为有一些Caption的论文做的方向比较偏,比如有一篇叫做StyleNet,生成一些具有特定风格的描述,比如幽默风趣的caption。而这篇总结里挑出来的论文都是在MSCOCO的caption任务上取得了不错效果的。
没有接触过Image Caption的同学这里有之前我在给研究生新生介绍Image Caption时用的slides,Introduction of Image Caption。没有什么文字,都是直观上的图片解释。
一共四篇,先上链接:
一、SCA-CNN: Spatial and Channel-wise Attention in Convolutional Networks for Image Captioning
由于这篇文章应该是效果最好的,所以放在最前面,如果对encoder-decoder模型不熟悉可以先看第二篇,第二篇基于的是传统的visual attention方法。
这篇论文出自于腾讯AI Lab,文章一开始就肯定了visual attention在image caption中起到的重要作用,并且指出其原因主要是人类的视觉系统在进行相关任务时并不是处理一整张图片而是根据需要每次处理图片的selective part,这和attention机制想要模拟的过程是相同的。这篇文章使用的还是传统的CNN-RNN模型,也称为Encoder-Decoder模型,但是文章指出,在之前别人的研究中使用的attention模型仅仅通过空间attention权重对上下文语义和conv layer输出的最后的feature map进行了映射,在CNN环节中并没有进行attention的相关操作。在这篇文章中,作者们充分利用了CNN的三个特性,来提出一种新的attention机制。
具体来说,这是一种spatial and channel-wise的attention机制,这种attention机制学习的是多层3D-feature map中的每一个feature与hidden state之间的联系,也就是在CNN中引入attention,而不是单单使用CNN部分的输出。
结合下图阐述两点SCA的motivation:因为一张channel-wise的feature map本质上就是一个对应filter产生的detector response map(feature map中element较大的地方说明response大,也就是该处含有某种semantic attribute,比如眼睛、鼻子等),那么基于channel-wise的attention机制就可以被视为是一个根据上下文语义选取相关语义特征的过程。比如图中的例子,当我想预测cake这个单词时,channel-wise attention就会给含有蛋糕、火焰、灯光和蜡烛形状物体的feature map分配更大的权重。
由于一张feature map依赖于前层的feature map们,一个很自然的想法就是对多层feature map使用attention机制,以便能够获得多层语义抽象概念。比如,在前层中对feature map中含有的较低级的semantic attributes,例如圆柱体(蛋糕的形状)、阵列(蜡烛的排放),赋予更大的权重,对于cake这个单词的预测是很有益的。
SCA-CNN的大概运作方式如图:
对第l层来说,未进行attention的feature map
是第(l-1)卷积层的输出,网络首先通过channel-wise attention函数
来计算channel-wise attention权重
,attention权重
将用来与
进行channel-wise乘积(
的channel维度和
向量的长度是相等的,将
中第i个channel维度的feature map
与
中第i个标量相乘
,乘积返回的结果是一个和
形状相同的张量,这样的操作称为channel-wise乘积)。然后使用spatial attention函数
来计算spatial attention权重
,最后该层的输出由
共同决定该层的输出
。
在进行预测第t个单词的时候,通过将t-1时刻的hidden layer状态
、最后一层conv layer经过C-S attention的输出
和t-1时刻的word embedding
共同输入进LSTM,对t时刻的hidden layer状态
进行预测:
再将t时刻的hidden state
与t-1时刻的word embedding
结合起来进行MLP,输出为一个字典大小
的向量,最后进行softmax选出最大概率对应的word:
据我看过的代码,attention的实现基本都是通过MLP+activation来完成,论文的具体公式推导不作分析,我已经全部推导过,各个变量的维度也很清晰,如果有问题可以私信我。
有的人可能会说,为什么一定要先进行channel-wise attention再进行spatial attention呢?
文章中给出了两种结构,先channel后spatial的称为C-S模型,另一种称为S-C模型,对这两种
模型都进行了实验,结果是,总的来说,C-S模型比S-C模型表现要好一点。
二、Knowing when to look: Adaptive Attention via A Visual Sentinel for Image Captioning
这篇文章的主要工作是对visual attention进行的改进。
传统的Encoder-Decoder模型在生成每个单词时都要求网络attend to图片,但是decoder在生成一些non-visual的单词比如"the"、"and"和"of"时似乎不需要visual attention,还有一些单词是一些管用词组,可以通过语言模型来可靠预测,也不需要visual attention。这篇文章提出的是基于visual sentinel(哨兵)的adaptive attention模型,在生成每个单词时,模型决定是attend to图片还是视觉哨兵,当语言模型不能提供有效信息的时候,模型才attend to图片。
举个例子:
图片的描述为"A white bird perched on top of a red stop sign",一只白色的鸟栖息在一个红色stop标志上。像"A"和"of"这种单词是没有像"red"和"bird"这种易于理解的视觉信号的,并且在生成"on top of"这种固定搭配词组的时候,语言模型就可以胜任,并不需要visual attention的帮助。事实上,如果在生成这种不应该依靠visual attention的词时,使用了visual attention的话,生成的梯度可能会误导模型,并且可能会毁了之前visual attention在更新参数时做出的努力。
对visual sentinel的解释:
visual sentinel
是一个隐变量(latent variable),主要用来表示decoder已知的东西(what the decoder already knows)。decoder记忆的内容有长期的也有短期的内容,有图片的内容也有语言的内容,visual sentinel就是拿来帮助decoder决定是否需要attend to图片,通过一个sentinel门
实现,通过线性插值的方式决定是否需要依赖图片,表示为:
,这里
表示visual attention,总的attention结果由visual sentinel和visual attention共同决定。
该模型的attention module如图所示:
整个attention计算过程和预测词的过程如下:首先是普通visual attention的计算:
这里最后一个特殊符号是一个元素全部为1的向量,其主要目的是为了将与其相乘的矩阵变得与加号前面的矩阵大小相同。
然后是visual sentinel的计算:
,中间的乘号是element-wise multiplication。
接着是sentinel gate的计算:
,
是一个1xk的向量,上面式子中后面一项算出来的是一个标量,sentinel gate就是
的最后一项,也就是第k+1项。
总的attention计算:
最后是预测词:
,p是一个1xD的向量,D表示词库的大小,最后得到的是概率最大词对应的index,再从词库中返回这个word。
三、Skeleton Key: Image Captioning by Skeleton-Attribute Decomposition
这篇文章指出,目前大多数的image caption模型中使用的language model都是逐个逐个生成词的,按照label中caption的顺序,但是对于人来说,一种更自然的方式是,先确定图中有哪些物体,物体之间的关系是什么,然后再使用物体的瞩目特征来仔细描述每一个物体。文章提出了一种coarse-to-fine(我将其理解为椎轮大辂)的方法,将原始的图片描述分解为两个部分,一个主干句(skeleton sentence)和各种物体的特征(attributes),再生成语句的时候,也分为两个部分进行生成。通过这种分解,该文章的模型达到了state-of-the-art的效果。
举个例子:
为了生成上图中的描述,首先生成一句skeleton sentence: horse on pasture(马儿在牧场上),用来表示物体中的主要物体和物体之间的关系,horses on pasture;然后,这些通过visual attention重新访问这些物体,当物体的attention response很大时,就生成对这些物体特征的描述,Three和a green。将两个句子结合起来生成最终的描述,Three horses on a green pasture。
方法的结构如图:Skeleton-Attribute decomposition for captions:
第一步需要对已有的训练集caption作语法分析,并且提取出主干句和特征描述。NP/VP/PP/AP分别是名词/动词/副词/形容词。
使用经过了CNN提取的特征作为语言模型的输入,decoder部分由两个LSTM组成,一个是Skel-LSTM,用来生成主干句,另一个是Attr-LSTM用来生成描述特征。
在Skel-LSTM中使用的是visual attention,在每个time step生成一张attention map,用来预测这一时刻的词。用来描述skeleton sentence中的skeleton object时生成的attention map也可以用在生成对该object的特征描述上,所以在Skel-LSTM中获得的visual attention也可以在Attr-LSTM中再次使用。
在Attr-LSTM中对特征的生成不是逐个object生成的,是一次性生成的,因为学习过程中由于Skel-LSTM中物体是有顺序的,所以Attr-LSTM也学习了特征的顺序。Attr-LSTM中不仅使用了attention,还使用了current time step t对应LSTM的hidden state和对应skeleton word的word embedding。具体方法不细说请参考论文,欢迎讨论。
最后将skeleton sentence和attributes结合起来,作为最终的caption。
顺便提及一下,文章也指出了encoder-decoder模型的两个问题,很值得我们思考解决方法:鹦鹉学舌式地复述在训练过程中出现的语句,并且在生成语句时,描述和句式两个方面缺乏变化;
由于是逐字生成描述,物体的特征需要在物体之前生成,因为不管是英语还是中文,形容词都是在名词之前出现的。但是从人类的角度来说,对一个物体的描述是需要refer to物体的。
四、Deep Reinforcement Learning-based Image Captioning with Embedding Reward
这是将强化学习与图像描述结合起来的论文,因为我的强化学习学得不多,只停留在GAN和GAN的一些变体,如果有错误请指正。
文章提出了一种新的decision-making框架来进行图像描述,用了一个"policy network"和一个"value network"协同生成描述。
policy network扮演一个局部guidance的角色,根据这一时刻的状态,提供对下一个词预测的置信度;
value network扮演一个全局、前瞻的guidance,评估现状态所有可能的扩展状态。该网络本质上是在调整学习的方向,从预测正确的词汇到描述与ground truth相似的描述(这句话我不是很理解)。
使用的是actor-critic方法来训练网络,也就是先行动后打分的方法,是一种平衡了value-based methods和policy-based methods的方法。作者说,他们的这种方法只通过policy network就可以提取出正确但是概率却很低的单词,具体例子如下图:
Next Action表示下一个生成单词的preference ranking,显然在现在时刻最合适的词holding并不是最优选择,但是value network却会go forward到假设生成holding这个词的state,然后评估这个state,对于生成一个合适描述这一目标,分数有多高。
作者首先使用基于交叉熵loss的监督学习pretrain了一个policy network,使用均方误差训练了一个value network,然后使用深度强化学习来改进两个网络。深度强化学习常用的领域是游戏和控制,对于caption这个任务来说,很难定义一个明确的目标,也就没法明确优化的目标。这篇论文中提出了一种actor-critic模型,使用的reward由visual semantic embedding生成(visual semantic embedding计算的是图片和描述的相似度,也就间接说明了caption的正确性,可以作为强化学习中合适的target来进行优化)。
文中具体的实现方法我也只能直观上地理解,公式推导我还不行,当我补上了足够的强化学习知识再来进行补充。
最近看新闻,腾讯AI lab在MSCOCO的caption任务上夺冠的模型也使用的是强化学习模型,我觉得强化模型在caption方向上可能会大放异彩。
如果觉得好就给个赞吧 :3
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。