Paper : https://arxiv.org/abs/2006.00753
SMA 首先使用结构图表示去编码图像中的 object-object,object-text 和 text-text 之间的关系,然后使用一 个多模态图注意力网络去理解,最后,由全局-局部注意回答模块处理来自上述模块的输出,以迭代地产生包含OCR和固定词汇的答案。

Pipeline
SMA 模型对具有多种关系类型的图进行推理。
-
Question Self-Attention Module 把问题分解为六个子组件,包括 objects, object-object relations, object-text relations, texts, text-text relations and text-object relations。
- 使用 objects/text 节点构建一个 role-aware graph。节点之间的连接由相对距离决定。使用 question-conditioned graph attention module 更新这个图。在 SMA 中,没有使用整个问题指导图更新,只是使用了确定类型的问题组件更新对应的图组件。例如,与问题相关的 object 只更新object 节点,与问题相关的 object-text 只更新 object-text 边。
- 使用 global-local attentional module 产生一个不定长的答案。
Question Self-Attention Module

使用问题序列生成自注意权重,用于生成以问题为条件的 object 和 text 特征;和 6 个分解后的问题特征,用来指导 question conditioned graph attention.
因为问题 Q 不仅包含 object 和 text 节点信息,也包含他们之间的 4 类关系 ( object-object, object-text, text-object, text-object ),此模块把问题分解为 6 个子组件。
给定 T 个单词 q={qt}t=1T 的问题 Q ,首先使用预训练的 BERT 把单词嵌入到特征序列 {et}t=1T 中获得 {xtbert}t=1T。然后使用 6 个单独的带有 softmax 层的双层 MLP 生成 6 组注意力权重,例如 {ato}t=1T,{atoo}t=1T,{atot}t=1T,{att}t=1T,{attt}t=1T,{atto}t=1T 。使用这些权重计算 6 个 {xtbert}t=1T 的注意力权重和:so,soo,sot,st,stt,sto,为分解后的问题表示 object 节点,object-object ( oo ) 边,object-text ( ot ) 边,text 节点,text-text ( tt ) 边缘和 text-object ( to ) 边缘。以 {ato}t=1T 和 so 作为例子:
ato=∑i=1Texp(MLPobja(xtbert))exp(MLPobja(xtbert)),t=1,...,T;so=t=1∑Tatoxtbert(1)
使用分解后的问题特征指导 question conditioned graph attention 。
还学习了分解后的子组件的两组自注意力权重,即 {wo,woo,wot},{wt,wtt,wto},其中每个 w 是一个标量。 它们计算如下:
wo,oo,ot=Zobj1exp(Wwo,oo,ots),wt,tt,to=Ztext1exp(Wwt,tt,tos),(2)
其中 s=T1∑t=1Txtbert,Zobj=exp(Wwos)+exp(Wwoos)+exp(Wwots),Ztext=exp(Wwts)+exp(Wwtts)+exp(Wwtos) 在某种程度上,这些权重扮演着先验概率的角色,因为它们只能通过问题来计算。 两组问题自注意力权重将分别用于生成以问题为条件的 object 和 text 特征 gobj 和 gtext
Question Conditioned Graph Attention Module
生成并理解一个 objects 和 texts 的异构图
Role-aware Heterogeneous Graph Construction
‘Role’ 表示节点的类型。首先构建一个节点为 objects 和 texts 的异构图,边表示在两个特殊节点之间的关系,每一个节点可以连接 5 个 object 节点和 5 个 text 节点,边可以分为四种类型表示不同的 role : object-object, object-text, text-text, text-object 。以构建 object-object 边为例,对于 object 节点 oi ,对剩下的 object 根据它们到 oi 的空间距离排序,把排名前 5 的 object 节点作为邻居 Nioo。根据它们的相对位置关系建立两个节点的边的关系。oi 的位置表示为 [xic,yic,wi,hi] (中心坐标,高,宽),另一个节点 oj 的位置表示为 [xitl,yitl,xjbr,yjbr,wj,hj] ( 左上角坐标,右下角坐标,宽,高 ),然后它们的边关系为 eij=[wixjtl−xic,hiyjtl−yic,wixjbr−xic,hiyjbr−xic,wi⋅hiwj⋅hj]
Question Conditioned Graph Attention

使用分解的问题特征 s 来理解 role-aware graph 。把当做一个注意力机制。用不同的问题特征根据它们的角色 ( role ) 更新图的不同部分。例如,使用与 object 相关的问题特征 so 指导 object 节点的注意力权重,使用 sto 指导 text-object 边的注意力权重。分别计算图中 6 个角色的注意力权重:object 节点 ( po ),text 节点 ( pt ),object-object 边 ( poo ),object-text 边 ( pot ),text-text 边 ( ptt ),text-object 边 ( pto ),可以写成
pm=Attm({xobj},{xtext},{eij},sm)(3)
Attm 是使用问题特征和图中特殊的节点/边计算注意力权重的注意力机制,m={o,oo,ot,t,tt,to}。
-
object 节点注意力权重 object 表示为 2048 维的外形特征 {xfr,io}i=1N 和相对位置坐标 {xbbox,io}i=1N ,在 so 的指导下计算 object 节点的注意力权重 :
KaTeX parse error: No such environment: align* at position 8:
\begin{̲a̲l̲i̲g̲n̲*̲}̲
& \hat{\mathbf…
其中 LN(⋅) 是层正则化,W∗∗,w∗ 是要学习的线性转换参数。最后,获得 object 节点的注意力权重 po={pio}i=1N
-
text 节点注意力权重 与 M4C 相似,使用多个特征的结合丰富 OCR 的表示。300 维的 FastText 特征 {xft,it}i=N+1N+M,2048 维的外形特征 {xfr,it}i=N+1N+M ,604 维的 PHOC 特征 {xp,it}i=N+1N+M ,4 维的边框特征 {xbbox,it}i=N+1N+M ,除此之外还有 512 维的 CNN 特征 {xtr,it}i=N+1N+M ( 来自于 RecogCNN ) 。 在 st 的指导下计算 text 节点的注意力权重 :
KaTeX parse error: No such environment: align* at position 8:
\begin{̲a̲l̲i̲g̲n̲*̲}̲& \hat{\mathbf{…
最后,获得 text 节点的注意力权重 pt={pit}i=N=1N+M
-
边的注意力权重 边的注意力权重需要考虑两个节点之间的关系,以计算 object-object 的注意力权重 poo 为例,其他的类似。主要有两步,首先,计算所有连接节点 oi 的边的注意力权重 qioo={qijoo}j∈Nioo
KaTeX parse error: No such environment: align* at position 8:
\begin{̲a̲l̲i̲g̲n̲*̲}̲& \hat{\mathbf{…
foo 是一个 MLP,编码初始化 oo 边特征 ( 由关系特征 eij 和连接节点特征 x^iobj 拼接 ),边的注意力权重 qioo 。然后,计算所有 object 节点的 oo 边的注意力权重
KaTeX parse error: No such environment: align* at position 8:
\begin{̲a̲l̲i̲g̲n̲*̲}̲& \tilde{\mathb…
x~ijoo 是以问题为条件的节点oi 的 oo 边的特征。使用相同的方法计算 pot,ptt,pto 。
Weighting Module
每个 object 和 text 节点通过图注意力模块输出三个注意力权重。每个 object 节点 oi ,都有 pio,pioo,pito ;每个 text 节点 ti ,都有 pit,pitt,pito 。使用问题自注意力权重和它们结合,每一个 object 节点,最终的权重分数通过三部分的权重和计算:
αio=wopio+woooioo+wotpiot,i=1,...,N,(8)
每一个 text 节点最终的权重:
αit=wtpit+wttoitt+wtopito,i=1,...,N,(9)
注意 ∑i=1Nαio=1,因为 wo+woo+wot=1,∑i=1Npio=1,∑i=1Npioo=1,∑i=1Npiot=1 。也有 ∑i=N+1N+Mαit=1 。权重 {αio}i=1N 和 {αit}i=N+1N+1 计算了 object/text 节点和问题的相关性,用来生成以问题为条件的 object 和 text 特征:
gobj=i=1∑Nαio⋅x^iobj, gtext=i=N+1∑N+Mαit⋅x^itext(10)
Global-Local Attentional Answering Module

全局图特征 gobj 和 gtext 不是直接和全局问题特征 so,soo,sot,st,stt,sto 融合,而是通过和局部的 OCR 节点嵌入输入到 transformer 的答案模块中进行更新。与 object 相关的和与 text 相关的问题特征拼接在一起:
so=[so;soo,sot],st=[st,stt,sto](11)
so,st,gobj,gtext 是一起输入到 transformer 层,更新为 s~o,s~t,g~obj,g~text 。
然后,我们将更新的特征 g~obj 和 g~text 与它们各自的问题表示形式融合在一起,如下所示
gOBJ=g~obj∘s~o,gTEXT=g~text∘s~t(12)
在第一步预测答案概率 pans1
pans1=fpred(Wg[gOBJ;gTEXT]),(13)
fpred 是一个两分支分数函数,它解决了 TextVQA 任务中答案可能是动态文本在不同问题中发生变化的难题。答案空间是两部分的结合:一个包含 5000 个词的固定词典和从每个特定的图像中提取的动态 OOV OCR tokens。两个分支计算各自的分数。一个分支是一个简单的线性层,把输入映射到 5000 维的分数向量,另一个分支计算输入和每一个更新的 OCR 嵌入的点积。然后两个分支的分数拼接在一起,选择最高的分数作为结果。
在第一步,融合特征的拼接作为输入,在剩下的步骤,使用前一个更新的输出作为输入迭代解码:
panst=fpred(gdec),t=2,...,T,(14)
其中 gdec 是以前一个输出 gdec 作为输入的答案模块的输出。如果前一个输出来自于 OCR,则 gdec 是 OCR 嵌入,然后输入到答案模块。否则,通用词汇表的相应线性层权重将变为 gdec 。我们还将位置嵌入和类型嵌入添加到解码输入中,其中类型嵌入表示此输入是固定词汇还是OCR token。
Experiments
在 TextVQA 上的结果

使用 GT OCR 在 TextVQA 上的结果

在 ST-VQA 上的结果
