Say As You Wish: Fine-grained Control of Image Caption Generation with Abstract Scene Graphs

题目:如你所愿:用抽象场景图精细控制图像标题生成。

来源:CVPR2020

本文提出了一种基于抽象场景图的图像字幕模型。

1 Motivation

  1. 图像字幕模型结合了多种计算机视觉技术,具有广泛的应用前景,但存在图像细节描述不足等问题。

  2. 按图像内容进行拼接式描述的图像字幕模型极大地阻碍了字幕的多样性,无法表达对图像的完整理解。

2 Contirbution

  1. 第一个提出用抽象场景图对图像标题生成进行细粒度控制

  2. 提出的ASG2Caption模型用于自动识别抽象的图形节点,生成具有预期内容和顺序的字幕。

  3. 实现了最先进的可控性给定指定ASGs在两个数据集。

3 Approach

3.1 抽象场景图

本文首先提出一种抽象场景图(Abstract Scene Graph),用来表达图像内部对象属性及对象之间的关联性,如下图所示,对于图像I\mathcal{I}I,其ASG定义为G=(V,E)\mathcal{G}=(\mathcal{V}, \mathcal{E})G=(V,E),其中的V\mathcal{V}VE\mathcal{E}E分别表示ASG的节点和边。如下图所示,节点根据意图角色分为三种类型,即对象节点ooo,属性节点aaa和关系节点rrr

ASG的构造规则如下:

首先用户添加其感兴趣的对象节点oio_ioioio_ioi以图像I\mathcal{I}I为基础,并且带有在图像中的边界框,以表示目标在图像中的位置;

如果用户想了解关于oio_ioi的更多信息,可以在图中给oio_ioi添加多个属性节点aia_iai,并分配有向边,用一个额外变量∣li∣|l_i|li表示对象oio_ioi的属性节点个数;

如果用户想描述两个对象节点oio_ioiojo_joj之间的关系,添加关系节点ri,jr_{i,j}ri,j,并分配从oi→ri,jo_i→r_{i,j}oiri,j以及ri,j→ojr_{i,j}→o_jri,joj的有向边。

由此,用户即可方便地构造以细粒度方法描述用户对图像I\mathcal{I}I进行描述的ASG模型。

构造抽象场景图的过程也可以通过简单的分类神经网络与对象建议网络自动生成。

3.2 ASG2Caption模型

这一部分阐述了作者通过使用给定图像I\mathcal{I}I和其ASG训练图像字幕模型的过程。本质上来说ASG2Caption模型是一个编码-解码网络,整个网络框架如下所示:

3.2.1 角色感知图编码器

该编码器将ASG中基于给定图像I\mathcal{I}I的节点编码成一系列的节点嵌入X={x1,⋯,x∣V∣}\mathcal{X}=\left\{x_{1}, \cdots, x_{|\mathcal{V}|}\right\}X={x1,,xV},每一个xix_{i}xi不仅需要反映节点对应的视觉信息,还应该表达出节点的意图,因为对于对象节点和其对应的属性节点,其对应于图像中的区域可能是相同的。因此本文提了一个角色感知图编码器,包括一个角色感知节点嵌入模块(Role-aware Node Embedding.),以区分节点意图,还包括一个多关系图卷积神经网络(Multi-relational Graph Convolutional Network.),用来进行上下文编码。

3.2.1.1 角色感知节点嵌入模块

对于来自图G\mathcal{G}G中的第iii个节点,首先将其初始化为对应的图像特征viv_ivi,具体来说,目标节点oio_ioi的特征提取自其在图像中对应的边界框;属性标节点aia_iai的特征提取自与其对应目标节相同的边界框区域;关系节点rir_iri的特征提取自与其关联的两个目标节点的联合边界框。

由于只有视觉特征还无法对节点意向进行描述,在前面提取出图像特征viv_ivi的基础上,还进一步对每个节点进行角色嵌入增强,最终得到角色感知节点嵌入的表达形式:
xi(0)={vi⊙Wr[0],if i∈o;vi⊙(Wr[1]+pos⁡[i]),if i∈a;vi⊙Wr[2],if i∈r.x_{i}^{(0)}=\left\{\begin{array}{cl} v_{i} \odot W_{r}[0], & \text { if } i \in o; \\ v_{i} \odot\left(W_{r}[1]+\operatorname{pos}[i]\right), & \text { if } i \in a; \\ v_{i} \odot W_{r}[2], & \text { if } i \in r. \end{array}\right. xi(0)=viWr[0],vi(Wr[1]+pos[i]),viWr[2],ifioifiaifir.
上式中,Wr∈R3×dW_{r} \in \mathbb{R}^{3 \times d}WrR3×d表示角色嵌入的可学习矩阵,ddd代表特征维度,其每一行分别对应不同的节点。在属性节点嵌入过程中,还额外增加了一个pos⁡[i]\operatorname{pos}[i]pos[i]区分连接同一对象的不同属性。

3.2.1.1 多关系图卷积网络

虽然在本文的ASG中,节点之间的关系是单向的,但实际上节点之间会互相影响,而且由于节点类型不同,从一种类型节点传递信息到另一类型节点的方式与其逆过程不同。因此,作者对之前提出的ASG进行了拓展,得到用于上下文编码的多关系图Gm=(V,E,R)\mathcal{G}_{m}=(\mathcal{V}, \mathcal{E},\mathcal{R})Gm=(V,E,R)

具体地说,R\mathcal{R}R包含了六种边来捕捉相邻节点之间的相互关系,分别是从对象到属性、对象到关系、对象到对象以及这三种关系的逆方向。

在明确了节点之间的关系之后,使用MR-GCN网络对进行角色感知嵌入之后的特征继续进行编码,采用如下方式:
xi(l+1)=σ(W0(l)xi(l)+∑r~∈R∑j∈Nir1∣Nir~∣Wr~(l)xj(l))x_{i}^{(l+1)}=\sigma\left(W_{0}^{(l)} x_{i}^{(l)}+\sum_{\tilde{r} \in \mathcal{R} } \sum_{j \in \mathcal{N}_{i}^{r} } \frac{1}{\left|\mathcal{N}_{i}^{\tilde{r}}\right|} W_{\tilde{r} }^{(l)} x_{j}^{(l)}\right) xi(l+1)=σW0(l)xi(l)+r~RjNirNir~1Wr~(l)xj(l)
上式中,xi(l+1)x_{i}^{(l+1)}xi(l+1)表示节点iii的特征经过第l+1l+1l+1层之后的上下文编码嵌入结果,直观地解释就是在上一层的基础上,额外添加了与该节点临近所有节点在不同关系下的平均值之和,即引入了临近节点的信息,可以体现该节点与其他节点的关系。σ\sigmaσ代表的是ReLU激活函数。

取所有节点嵌入的平均值作为全局图嵌入:
gˉ=1∣V∣∑ixi\bar{g}=\frac{1}{|\mathcal{V}|} \sum_{i} x_{i} gˉ=V1ixi
将其与全局图像特征进行融合,得到全局编码特征vˉ\bar{v}vˉ

3.2.2 图语言解码器

图解码器的目的是将编码之后的ASG图解码为图像标题,本文采用的解码器包含两层LSTM结构,分别是注意力LSTM以及语言LSTM。

注意力LSTM以全局编码特征vˉ\bar{v}vˉ、前一个词嵌入wt−1w_{t-1}wt1、和上一层语言LSTM的输出ht−1lh_{t-1}^{l}ht1l作为输入,输出注意力查询htah_{t}^{a}hta:中括号中的参数拼接在一起作为输入。
hta=LSTM⁡([vˉ;wt−1;ht−1l],ht−1a;θa)h_{t}^{a}=\operatorname{LSTM}\left(\left[\bar{v} ; w_{t-1} ; h_{t-1}^{l}\right], h_{t-1}^{a} ; \theta^{a}\right) hta=LSTM([vˉ;wt1;ht1l],ht1a;θa)
对于语言LSTM,注意力查询htah_{t}^{a}hta被用来提取第ttt步的节点嵌入Xt\mathcal{X}_tXt的上下文向量ztz_tzt,之后将ztz_tzthtah_{t}^{a}hta作为输入,以此生成单词:
htl=LSTM⁡([zt;hta],ht−1l;θl)p(yt∣y<t)=softmax⁡(Wphtl+bp)\begin{aligned} h_{t}^{l} &=\operatorname{LSTM}\left(\left[z_{t} ; h_{t}^{a}\right], h_{t-1}^{l} ; \theta^{l}\right) \\ p\left(y_{t} \mid y_{<t}\right) &=\operatorname{softmax}\left(W_{p} h_{t}^{l}+b_{p}\right) \end{aligned} htlp(yty<t)=LSTM([zt;hta],ht1l;θl)=softmax(Wphtl+bp)
在生成单词yty_tyt之后,本文还提出了一个图更新机制用来更新节点嵌入Xt→Xt+1\mathcal{X}_t \to \mathcal{X}_{t+1}XtXt+1

3.2.2.1 基于图的注意力机制

本文将图的注意力分成语义内容和图结构两方面,分别称为图内容注意(graph content attention)和图流注意(graph flow attention)。图注意的作用是用来计算上下文向量ztz_tzt

1)图内容注意

图内容注意重点考虑节点嵌入Xt\mathcal{X}_tXt和注意力查询htah_{t}^{a}hta之间的语义相关性,通过如下方法计算语义得分:
α~t,ic=wcTtanh⁡(Wxcxt,i+Whchta)αtc=softmax⁡(α~tc)\begin{aligned} \tilde{\alpha}_{t, i}^{c} &=w_{c}^{T} \tanh \left(W_{x c} x_{t, i}+W_{h c} h_{t}^{a}\right) \\ \boldsymbol{\alpha_{t}^{c} }&=\operatorname{softmax}\left(\boldsymbol{\tilde{\alpha}_{t}^{c} }\right) \end{aligned} α~t,icαtc=wcTtanh(Wxcxt,i+Whchta)=softmax(α~tc)
这是一个比较基础的注意力网络,其中的WWWwww都是内容注意力网络的可学参数。

2)图流注意力

图流注意力的作用是捕获原始ASG中隐含的用户希望生成标题时的预期顺序(比如说如果当前参与的节点是关系节点,根据图的关系,下一个节点很可能是对象节点)。

对于图流,与ASG相比分配了一个额外的开始符号,并且对象节点与属性节点之间是双向连接关系,实际的连接方向由文本流畅性决定,此外,当一个节点没有输出边时,将为该节点构建一个自环路边(走不通时返回),确保图上的注意力不消失。

图流的转移有三种情况:

1)原地不动:当使用多个词描述一个节点时。
αt,0f=αt−1\alpha_{t, 0}^{f}=\alpha_{t-1} αt,0f=αt1
2)前进一步:从一个关系节点转移到其对象节点时。
αt,1f=(Mf)αt−1\alpha_{t, 1}^{f}=\left(M_{f}\right) \alpha_{t-1} αt,1f=(Mf)αt1
3)前进两步:从关系节点转移到属性节点时。
αt,2f=(Mf)2αt−1\alpha_{t, 2}^{f}=\left(M_{f}\right)^{2} \alpha_{t-1} αt,2f=(Mf)2αt1
MfM_{f}Mf表示的是邻接矩阵,每一行表示对某一个节点的归一化转移情况。

最终的流注意是一个由动态阀门控制的流量分数软插值:
st=softmax⁡(Wsσ(Wshhta+Wszzt−1))αtf=∑k=02st,kαt,kf\begin{aligned} s_{t} &=\operatorname{softmax}\left(W_{s} \sigma\left(W_{s h} h_{t}^{a}+W_{s z} z_{t-1}\right)\right) \\ \boldsymbol{\alpha_{t}^{f}} &=\sum_{k=0}^{2} s_{t, k} \boldsymbol{\alpha_{t, k}^{f} } \end{aligned} stαtf=softmax(Wsσ(Wshhta+Wszzt1))=k=02st,kαt,kf
完整图流注意形式流程图:

个人理解,图流注意的思想是,首先对图进行改造,构造一个新的图,包含了不同的流动关系,然后以注意力LSTM模型计算出的注意力查询htah_{t}^{a}hta以及上一步的上下文向量ztz_tzt作为不同三种流的流量阀门,控制采纳的权重得分,最终确定最终的图流。即确定下一个进行文本解析的节点。

3)注意力融合

在计算出图内容注意力α~tc\boldsymbol{\tilde{\alpha}_{t}^{c}}α~tc与图流注意力αtf\boldsymbol{\alpha_{t}^{f}}αtf之后,使用一个可学网络学习注意力融合权重,进行注意力动态融合,具体表达式如下:
βt=sigmoid⁡(wgσ(Wghhta+Wgzzt−1))αt=βtα~tc+(1−βt)αtf\begin{array}{l} \beta_{t}=\operatorname{sigmoid}\left(w_{g} \sigma\left(W_{g h} h_{t}^{a}+W_{g z} z_{t-1}\right)\right) \\ \boldsymbol{\alpha_{t}}=\beta_{t} \boldsymbol{\tilde{\alpha}_{t}^{c} }+\left(1-\beta_{t}\right) \boldsymbol{\alpha_{t}^{f} } \end{array} βt=sigmoid(wgσ(Wghhta+Wgzzt1))αt=βtα~tc+(1βt)αtf
4)上下文向量计算

在学习到注意力向量之后,求每一个节点与其对应注意力的加权和,即得到ttt步时最终的上下文向量
zt=∑i=1∣V∣αt,ixt,iz_{t}=\sum_{i=1}^{|\mathcal{V}|} \alpha_{t, i} x_{t, i} zt=i=1Vαt,ixt,i

3.2.2.2 图更新机制

在进行图像字幕工作时,每一个节点的访问强度被注意力矩阵保存下来,因此,参与更多的节点会被更新得更多,同时,有一些介词和助词虽然访问了图节点,但是并不代表节点的含义,这种情况下不应该对节点进行更新。本文提出了一种视觉哨兵门对注意力强度进行修正:
ut=sigmoid⁡(fvs(htl;θvs))αt\boldsymbol{u}_{\boldsymbol{t}}=\operatorname{sigmoid}\left(f_{v s}\left(h_{t}^{l} ; \theta_{v s}\right)\right) \boldsymbol{\alpha}_{\boldsymbol{t} } ut=sigmoid(fvs(htl;θvs))αt
上式代表了一个使用sigmoid激活的全连接层网络,用来输出一个标量,指示参与被访问的节点是否由被生成的文本所表示。

更新机制来源于NTM方法,每个节点特征的更新分为两个部分:1)擦除;2)添加。

1)擦除

首先根据每个节点在ttt步时的更新强度ut,iu_{t,i}ut,i进行擦除操作,具体来说,还是使用了一个全连接层网络计算擦除强度:
et,i=sigmoid⁡(fers([htl;xt,i];θers))x^t+1,i=xt,i(1−ut,iet,i)\begin{aligned} e_{t, i} &=\operatorname{sigmoid}\left(f_{\text {ers}}\left(\left[h_{t}^{l} ; x_{t, i}\right] ; \theta_{e r s}\right)\right) \\ \hat{x}_{t+1, i} &=x_{t, i}\left(1-u_{t, i} e_{t, i}\right) \end{aligned} et,ix^t+1,i=sigmoid(fers([htl;xt,i];θers))=xt,i(1ut,iet,i)
之后,根据擦除强度对节点的特征进行擦除操作。

2)添加

对于重要节点,需要把被擦除的部分进行返还,这部分同样训练了一个全连接层网络计算动态添加强度:
at,i=σ(fadd([htl;xt,i];θadd))xt+1,i=x^t+1,i+ut,iat,i\begin{aligned} a_{t, i} &=\sigma\left(f_{a d d}\left(\left[h_{t}^{l} ; x_{t, i}\right] ; \theta_{a d d}\right)\right) \\ x_{t+1, i} &=\hat{x}_{t+1, i}+u_{t, i} a_{t, i} \end{aligned} at,ixt+1,i=σ(fadd([htl;xt,i];θadd))=x^t+1,i+ut,iat,i
再根据添加强度进行添加操作。

3.2.3 损失函数

网络的损失函数是图像字幕翻译时每一步的翻译准确概率的对数和,是一个比较经典的LSTM模型的训练损失。
L=−log⁡∑t=1Tp(yt∣y<t,G,I)L=-\log \sum_{t=1}^{T} p\left(y_{t} \mid y_{<t}, \mathcal{G}, \mathcal{I}\right) L=logt=1Tp(yty<t,G,I)

4 Experiment

本文实验数据库使用的是图像字幕中常用的VisuakGenomeMSCOCO,自动构建出三元数据(image I\mathcal{I}I,ASG G\mathcal{G}G,caption y\mathcal{y}y)。三元数据的构建使用的是其他论文的方法。

本文对模型质量的评价从可控性多样性两方面进行评估。

对于可控性的评估,使用与ground truth图像标题对其的ASG作为控制信号,具体的指标包括BLEU,METEOR,ROUGE,CIDEr,SPICE。评价思想是如果语义识别正确,句子结构应该与ASG比较符合,得分较高。

对于多样性的评估,首先采样相同数量的标题,之后通过两个指标评估采样出来的标题的相似性。

其一是DIV-n:评估长度为n个字节的词段在整个标题中出现的频率;其二是SelfCIDEr,派生自CIDEr的一种评测方法。

具体实验时,使用在VisualGennome上预训练的Faster-RCNN提取ASG的节点特征,使用在ImageNet上预训练的ResNet152提取全局图像表征。

4.1 可控性评估

评估了他们的模型与一些其他方法在可控性指标上的表现:

具体图像字幕的可视化:

4.2 不同组件效果的消融研究

对不同模块的添加对模型表现进行了评估:

第一二行是两个baseline,对三四行的评估发现添加图上下文编码能够提升模型表现,五六行比较了图流结果与图更新机制之间的表现差异,七八行评估了在本文提出的模型基础上,添加集束搜索(beam search,一种对贪心算法的改进)之后,模型表现达到了最优。

4.3 不同关心角度对字幕生成的影响

根据不同关心角度构建的不同ASG,可能会输出完全不同的图像字幕结果,同时,具有大致相同结构的ASG会生成相似的标题,但是存在不同描述。证明模型细粒度级别上的敏感性。

4.4 多样性评估

在两个数据集上与不同模型进行对比,评价多样性水平:

使用不同ASG,生成了很不同的文本描述:

。证明模型细粒度级别上的敏感性。

4.4 多样性评估

在两个数据集上与不同模型进行对比,评价多样性水平:

使用不同ASG,生成了很不同的文本描述:

《Say As You Wish: Fine-grained Control of Image Caption Generation with Abstract Scene Graphs》阅读笔记相关推荐

  1. trainer setup_Detectron2源码阅读笔记-(一)Configamp;Trainer

    一.代码结构概览 1.核心部分 configs:储存各种网络的yaml配置文件 datasets:存放数据集的地方 detectron2:运行代码的核心组件 tools:提供了运行代码的入口以及一切可 ...

  2. VoxelNet阅读笔记

    作者:Tom Hardy Date:2020-02-11 来源:VoxelNet阅读笔记

  3. Transformers包tokenizer.encode()方法源码阅读笔记

    Transformers包tokenizer.encode()方法源码阅读笔记_天才小呵呵的博客-CSDN博客_tokenizer.encode

  4. 源码阅读笔记 BiLSTM+CRF做NER任务 流程图

    源码阅读笔记 BiLSTM+CRF做NER任务(二) 源码地址:https://github.com/ZhixiuYe/NER-pytorch 本篇正式进入源码的阅读,按照流程顺序,一一解剖. 一.流 ...

  5. Mina源码阅读笔记(一)-整体解读

    2019独角兽企业重金招聘Python工程师标准>>> 今天的这一节,将从整体上对mina的源代码进行把握,网上已经有好多关于mina源码的阅读笔记,但好多都是列举了一下每个接口或者 ...

  6. “CoreCLR is now Open Source”阅读笔记

    英文原文:CoreCLR is now Open Source 阅读笔记如下: CoreCLR是.NET Core的执行引擎,功能包括GC(Garbage Collection), JIT(将CIL代 ...

  7. QCon 2015 阅读笔记 - 团队建设

    QCon 2015阅读笔记 QCon 2015 阅读笔记 - 移动开发最佳实践 QCon 2015 阅读笔记 - 团队建设 中西对话:团队管理的五项理论和实战 - 谢欣.董飞(今日头条,LinkedI ...

  8. 05《软件需求模式》阅读笔记

    剩下的两个阅读笔记写第二部分.各类需求模式,共八个领域和它的需求模式,这一次写前四个. 基础需求模式,它是所有种类的系统都可能需要的一些东西.系统间接口需求模式使用系统间接口需求模式定义被定义的系统和 ...

  9. [置顶] Linux协议栈代码阅读笔记(一)

    Linux协议栈代码阅读笔记(一) (基于linux-2.6.21.7) (一)用户态通过诸如下面的C库函数访问协议栈服务 int socket(int domain, int type, int p ...

  10. 大型网站技术架构:核心原理与案例分析阅读笔记二

    大型网站技术架构:核心原理与案例分析阅读笔记二 网站架构设计时可能会存在误区,其实不必一味追随大公司的解决方案,也不必为了技术而技术,要根据本公司的实际情况,制定适合本公司发展的网站架构设计,否则会变 ...

最新文章

  1. java cms 垃圾回收_Java 9 或将放弃 CMS(并发标记清除垃圾收集器)
  2. python六十二: 析构方法
  3. Java8 之 lambda 表达式、方法引用、函数式接口、默认方式、静态方法
  4. 互联网公司败局汇总,这些公司都是怎么死的?(下篇)
  5. np.newaxis 为 numpy.ndarray(多维数组)增加一个轴
  6. Git复习(九)之理解git工作区和暂存区
  7. C# hashtable
  8. iOS之深入解析KVO的底层原理
  9. datatables 展开 折叠_更成熟的三星Z Fold2 折叠屏发展迈出关键一步
  10. js--------1.时间
  11. (王道408考研数据结构)第四章串-第二节:串的模式匹配算法(朴素和KMP)
  12. Solidworks如何在零件表面贴图
  13. 新手安装Ubuntu操作系统
  14. 物联网全面崛起 LED企业大有可为
  15. CR(code review)常见问题
  16. 善于从错误中总结,而且还要持之以恒地达到目标
  17. 洛谷P1134 阶乘问题[数论]
  18. c#调用摄像头进行二维码扫码
  19. 【企业邮箱注册】管理员如何设置定期修改密码?
  20. Javascript显示隐藏DIV

热门文章

  1. Android MotionLayout As a Dancer
  2. android 声音同步 测试,基于FFmpeg和Android的音视频同步播放实现
  3. linux判断三个数大小程序,几个shell程序设计小知识(shell常识部分)
  4. 分子动力学模拟Gromacs一般使用步骤(空蛋白)
  5. 短视频SDK接入(2)---环境搭建
  6. array easy summery
  7. 华为手机主界面的返回键怎么调出来_华为手机没有返回键怎么调出来
  8. 计算机在线作业题,精选《计算机原理与结构》在线作业试题
  9. BP神经网络的简单应用
  10. BP神经网络实现实例1曲线拟合