留个笔记自用
Say As You Wish: Fine-grained Control of Image Caption Generation with Abstract Scene Graphs
做什么
Image Caption,老应用了,给出一张图片,得到对图片的文字描述
做了什么
文章分析了一波人类对图片的语言描述,简单来说就是人对一张图片的描述方式可以有很多种,但需要让机器确定user intention是件很难的事情,这里提出了一个Abstract Scene Graphs(ASG抽象场景图)
ASG由对象obj、属性attr、关系rel三个节点组成(有点像ER图),这里分了三步,后面附录还有说明怎么构造的这个数据集,看看就好。
首先先每个节点没有语义信息,但又能通过网络来对ASG进行操作,进行最后caption生成的重要度也就是user intention进行控制,且更具有互动性,所以才叫抽象场景图。
怎么做
把这整个模型划分为三个部分,Role_aware Graph Encoder、Language Decoder for Graphs,caption lstm,整体的目标是输入一张原图I和它指定的一种ASG,然后生成符合这个ASG的caption
第一部分Role_aware Graph Encoder,输入为数据集的源图像I和ASG G,将G中每个节点根据源图像I进行三种节点类型的分别计算
这里v为G中每个节点的特征化,W是一个embedding矩阵,x为MR-GCN中的节点,之后为了让X中节点影响是相互的,将其边双向化,这样就得到了初始化的MR-GCN,之后用图卷积的方法去计算
这里的N表示与第i个节点由连接的邻居,W就是图卷积的参数
然后先解释第三部分caption lstm部分
这里有两个LSTM,首先是下面的Attention LSTM,输入有三个,g,w和h,g为整个GraphX的节点的平均值就是全局平均特征,w是上一次的word embedding,h为上一次Language LSTM的输出,输出是它的attention队列hta,然后是Language LSTM,这里接受第二部分的输入和Attention LSTM的输入,通过language LSTM得到最后的结果(句子中的某一个词)
然后是第二部分Language Decoder for Graphs部分
这部分也分为两小部分,首先是Graph-based Attention部分,分为了Graph content attention和Graph flow attention,就是图语义注意力和图流向注意力,分别考虑查询向量与图编码向量之间的语义相关性和刻画图中的结构流向信息,一个是语义一个是关系。
首先是Content,这里的Wxc和Whc都是网络训练权重,这里的hta是第三部分所生成的,这样计算就能得到Content Attention,可以理解为每个节点的语义重要性,这步是不包含关系的
然后是Flow attention
这里的输入是hta和z,也就是Attention LSTM输出的和上一步第二部分输出的,Mf是调整节点位置的矩阵,通过当前节点的类型来计算α,这里的Wsh和Wsz都是训练参数,这样网络就能计算得到Flow attention
由得到的两种Attention(一个语义一个顺序流)可以计算出内容向量zt也就是第三部分中Language LSTM的输入,这里Wgh和Wgz同样都是可学参数,这里由两个attention得到的结果是对每个节点的attention score,而Zt是用各节点的score去resize各节点的重要性或者说是输出顺序的结果
然后是第二部分的最后小部分 Graph Updating
这部分是为了记录图中节点的记录过程,也就是为了记录哪些节点被记录过,这里假设的是由下面部分得到的score表示了每个节点的强度,越大越容易被更新,但在更新前还要擦除一些废词像很多的the这样,所以对输入h还进行了一次门控,然后再进行节点状态更新
简单来说就是先擦除一些无关节点也就是score可能较低的节点,然后再对其进行轻微相加,这样就得到了下一步迭代的X,这里更改的仅仅只有节点特征,并没有变化节点之间的关系
总结
1.相比于被动生成句子和句子结构再来判断句子好坏,这里采用了ASG固定句子结构,再用两个attention来模拟user intention,尤其融入了图卷积的因素,能处理各种形式的图也就是各种结构的句子,富有自主性和想象力
2.它能输出图像中每个因素每个节点的重要程度,再由这个score去分类得到caption,这一点似乎可以运用在图像美学评价上。