Paper : http://arxiv.org/abs/2003.00387v1 [CVPR2020]
提出了一种更加细粒度的控制信号,称为抽象场景图 ( Abstract Scene Graph, ASG ),可以通过图结构同时控制所希望表达的物体、属性和关系,不仅能反映用户细粒度的描述意图,也能生成更具有多样性的图像描述。ASG 是一个包含三类抽象节点的有向图,这三类抽象节点分别代表用户希望描述的物体 ( object ) 、属性 ( attribute ) 和关系 ( relationship ) ,每个抽象节点在图中有具体区域的定位,但却不需要任何具体语义标签。因为ASG不需要任何语义识别,它可以方便地由用户限定或自动生成。
ASG2Caption 能够识别图形中的用户意图和语义,从而根据图形结构生成所需的描述。
-
ASG 只包含抽象图结构,不包含任何的语义标签,所以提出 role-aware graph encoder 捕获图中的意图和语义。
role-aware graph encoder : 区分节点的细粒度意图角色,并通过图上下文增强每个节点以提高语义表示
-
ASG 不仅通过不同的节点控制了描述什么内容,也通过节点的连接决定了描述的顺序,因此提出 language decoder for graphs 同时考虑了节点的内容和结构,更加注意以图流顺序生成所需的内容。
-
最后,生成的图像描述需要完全覆盖 ASG 中指定节点,不能有节点内容的缺失或重复。为此,我们在解码过程中逐渐更新编码的图表示,以记录跟踪图中不同节点的访问状态。
Abstract Scene Graph
图像 I \mathcal{I} I 的 ASG 表示为 G = ( V , E ) \mathcal{G} = (V, E) G=(V,E) , V , E \mathcal{V}, E V,E 分别是节点和边的集合。节点根据它们的意图角色分为三类:物体节点 ( o o o ),属性节点 ( a a a ) 和关系节点 ( r r r ) ,构建 G \mathcal{G} G 如下:
- 在图 G \mathcal{G} G 中添加用户感兴趣的物体 o i o_i oi ,在图像 I \mathcal{I} I 的物体 o i o_i oi 有对应的边界框
- 如果用户想要知道物体 o i o_i oi 更多的描述细节,可以在图 G \mathcal{G} G 中添加属性节点 a i , l a_{i,l} ai,l ,创建一个从 o i o_i oi 到 a i , l a_{i,l} ai,l 的边, ∣ l ∣ |l| ∣l∣ 是关联属性的数量,因为 o i o_i oi 可以有多个 a i , l a_{i,l} ai,l
- 如果用户想要描述 o i o_i oi 和 o j o_j oj 之间的关系,可以把关系节点 r i , j r_{i,j} ri,j 加入到图 G \mathcal{G} G 中,创建从 o i o_i oi 到 r i , j r_{i,j} ri,j 和从 r i , j r_{i,j} ri,j 到 o j o_j oj 之间的边
除了获得 G \mathcal{G} G 之外,很容易在现成的目标检测器的基础上生成 ASGs 和一个简单的物体之间的关系分类器。
The ASG2Caption Model
给定一张图像 I \mathcal{I} I 和 ASG G \mathcal{G} G, 目标是生成一个流利的句子 y = { y 1 , . . . , y T } y = \{y_1, ..., y_T\} y={y1,...,yT} ,满足用户的意图。
Role-aware Graph Encoder
把 ASG 编码为一系列的节点嵌入 X = { x 1 , . . . , x ∣ v ∣ } \mathcal{X} = \{x_1, ..., x_{|\mathcal{v}|}\} X={x1,...,x∣v∣} 。首先, x i x_i xi 应该除了视觉外观之外还反映其意图作用,这对于区分目标和连接的属性节点特别重要,因为它们位于同一区域。其次,由于节点不是孤立的,因此来自相邻节点的上下文信息对于识别节点的语义是有益的。Role-aware Graph Encoder 包含 role-aware node embedding ( 区分节点意图 ) 和 multi-relational graph convolutional network ( MR-GCN ) ( 上下文编码 )
Role-aware Node Embedding
图
G
\mathcal{G}
G 中的第
i
i
i 个节点,首先初始化为对应的视觉特征
v
i
v_i
vi 。物体节点的特征是从图像中的边界框提取的;属性节点的特征和它连接的物体是相同的;关系节点的特征是从两个物体的联合边界框提取的。因为视觉特征不能区分不同节点的意图角色,所以通过获得一个角色感知节点嵌入
x
i
(
0
)
x_{i}^{(0)}
xi(0) 增强每一个节点
x
i
(
0
)
=
{
v
i
⊙
W
r
[
0
]
,
if
i
∈
o
;
v
i
⊙
(
W
r
[
1
]
+
p
o
s
[
i
]
)
,
if
i
∈
a
;
v
i
⊙
W
r
[
2
]
,
if
i
∈
r
.
(1)
x_{i}^{(0)} = \begin{cases}v_i \odot W_r[0], & \text{if $i \in o$} ;\\v_i \odot (W_r[1] + pos[i]), & \text{if $i \in a$}; \\v_i \odot W_r[2], & \text{if $i \in r$.}\end{cases} \tag{1}
xi(0)=⎩⎪⎨⎪⎧vi⊙Wr[0],vi⊙(Wr[1]+pos[i]),vi⊙Wr[2],if i∈o;if i∈a;if i∈r.(1)
其中
W
r
∈
R
3
×
d
W_r \in \Bbb{R}^{3×d}
Wr∈R3×d 是角色嵌入矩阵,
d
d
d 是特征维度 ( 512 ),
W
r
[
k
]
W_r[k]
Wr[k] 表示
W
r
W_r
Wr 的第
k
k
k 行,
p
o
s
[
i
]
pos[i]
pos[i] 是区分连接同一个物体的不同的属性节点的位置嵌入。
Multi-relational Graph Convolutional Network
尽管ASG中的边是单向的,但节点之间的影响却是相互的。此外,由于节点的类型不同,信息从一种类型节点传递到另一种类型节点的传递方式与其反方向也是不同的。因此,我们将原始ASG的边扩展为不同的双向边,从而生成一个具有多关系的图 KaTeX parse error: Undefined control sequence: \cal at position 19: …thcal{G}_m = \{\̲c̲a̲l̲{V}, E, R\},利用多关系图卷积神经网络 ( MR-GCN ) 进行图中上下文编码。
R
\mathcal{R}
R 中有六种类型的边来捕获相邻节点之间的相互关系,分别是物体到属性,目标到关系,关系到物体以及他们的反向。使用 MR-GCN 编码图上下文:
x
i
(
l
+
1
)
=
σ
(
W
0
(
l
)
x
i
(
l
)
+
∑
r
~
∈
R
∑
j
∈
N
i
r
~
1
∣
N
i
r
~
∣
W
r
~
(
l
)
x
j
(
l
)
)
(2)
x_{i}^{(l+1)} = \sigma(W_0^{(l)} x_i^{(l)} + \sum_{\tilde{r} \in \mathcal{R}} \sum_{j \in \mathcal{N}_i^{\tilde{r}}} \frac{1}{|\mathcal{N_i^{\tilde{r}}}|} W_{\tilde{r}}^{(l)}x_j^{(l)}) \tag{2}
xi(l+1)=σ(W0(l)xi(l)+r~∈R∑j∈Nir~∑∣Nir~∣1Wr~(l)xj(l))(2)
其中
N
i
r
~
\mathcal{N}_i^{\tilde{r}}
Nir~ 是在关系
r
~
∈
R
\tilde{r} \in \mathcal{R}
r~∈R 下的第
i
i
i 个节点的邻居,
σ
\sigma
σ 是 ReLU 激活函数,
W
∗
(
l
)
W_*^{(l)}
W∗(l) 是第
l
l
l 个 MR-GCN 层的学习参数。利用一层为每个节点带来来自直接相邻节点的上下文,而堆叠多层可以对图形中的更广泛的上下文进行编码。 我们堆叠
L
L
L 层,然后将最后第
L
L
L 层的输出作为最终节点嵌入
X
\mathcal{X}
X。也可以通过对
X
\mathcal{X}
X 取平均获得全局图嵌入
g
‾
=
1
∣
V
∣
∑
i
x
i
\overline{g} = \frac{1}{|\mathcal{V}|} \sum_i x_i
g=∣V∣1∑ixi 。把全局图嵌入和全局图表示融合作为全局编码特征
v
‾
\overline{v}
v
Language Decoder for Graphs
把编码 G \mathcal{G} G 转化为图像描述。graph-based attention mechanism ( 包含图语义和结构 ) 和 graph updating mechanism ( 记录已经描述或未描述的内容 )
解码器包含一个两层的 LSTM ( attention LSTM and language LSTM ) 。attention LSTM 把全局编码嵌入
v
‾
\overline{v}
v ,前一个单词嵌入
w
t
−
1
w_{t-1}
wt−1 和 language LSTM 的前一个输出
h
t
−
1
l
h_{t-1}^l
ht−1l 作为输出,计算一个 query
h
t
a
h_t^a
hta :
h
t
a
=
LSTM
(
[
v
‾
;
w
t
−
1
;
h
t
−
1
l
]
,
h
t
−
1
a
;
θ
a
)
(3)
h_t^a = \text{LSTM}([\overline{v};w_{t-1};h_{t-1}^{l}], h_{t-1}^a; \theta^a) \tag{3}
hta=LSTM([v;wt−1;ht−1l],ht−1a;θa)(3)
[
;
]
[;]
[;] 是向量拼接,
θ
a
\theta^a
θa 是参数。
第
t
t
t 步的节点嵌入表示为
X
t
=
{
x
t
,
1
,
.
.
.
,
x
t
,
∣
V
∣
}
\mathcal{X}_t = \{x_{t,1}, ..., x_{t,|\mathcal{V}|}\}
Xt={xt,1,...,xt,∣V∣} ,
X
1
\mathcal{X}_1
X1 是编码器的输出
X
\mathcal{X}
X。
h
a
t
h_a^t
hat 用来检索上下文向量
z
t
z_t
zt ( 通过 graph-based attention 计算 ) 。language LSTM 把
z
t
z_t
zt 和
h
t
a
h_t^a
hta 作为输入生成单词序列:
h
t
l
=
LSTM
(
[
z
t
;
h
t
a
]
,
h
t
−
1
;
θ
l
)
(4)
h_t^l = \text{LSTM}([z_t;h_t^a], h_{t-1};\theta^l) \tag{4}
htl=LSTM([zt;hta],ht−1;θl)(4)
p ( y t ∣ y < t ) = softmax ( W p h t l + b p ) (5) p(y_t| y_{<t}) = \text{softmax}(W_p h_t^l + b_p) \tag{5} p(yt∣y<t)=softmax(Wphtl+bp)(5)
其中 θ l , W p , b p \theta^l, W_p, b_p θl,Wp,bp 是参数。生成单词 y t y_t yt 之后,通过 graph updating 机制更新节点嵌入 X t \mathcal{X}_t Xt 到 X t + 1 \mathcal{X}_{t+1} Xt+1 记录新的图状态。
Graph-based Attention Mechanism
为了同时考虑图中语义内容和图结构信息,我们结合了两种不同的注意力机制,分别称为图语义注意力 ( graph content attention ) 和图流向注意力 ( graph flow attention ) 。
图语义注意力考虑查询向量
h
t
a
h_t^a
hta 与图编码向量
X
t
\mathcal{X}_t
Xt 之间的语义相关性,计算注意力分数向量
α
t
c
\alpha_t^c
αtc
α
~
t
,
i
c
=
w
c
T
tanh
(
W
x
c
x
t
,
i
+
W
h
c
h
t
a
)
(6)
\tilde{\alpha}_{t,i}^c = w_c^T \tanh(W_{xc}x_{t,i} + W_{hc}h_t^a) \tag{6}
α~t,ic=wcTtanh(Wxcxt,i+Whchta)(6)
α t c = softmax ( α ~ t c ) (7) \alpha_t^c = \text{softmax}(\tilde{\alpha}_{t}^c) \tag{7} αtc=softmax(α~tc)(7)
其中 W x c , W h c , w c W_{xc}, W_{hc}, w_c Wxc,Whc,wc 是语义注意力的参数,省略偏置。由于忽略了节点之间的连接,因此语义关注类似于传送,它可以在不同的解码时间步长从一个节点转移到另一个节点。
图流向注意力用于刻画图中的结构流向信息。流图 G f \mathcal{G}_f Gf 和原始的 ASG 不同:第一个是应该分配开始符号S,第二个区别在于对象节点和属性节点之间的双向连接,因为通常对象的顺序及其属性不是强制性的,应由句子的流畅性决定,第三个是如果节点的输出边不存在,则会为该节点构造一个自环边,从而确保图上的注意力不会消失。
假定 M f M_f Mf 是 G f \mathcal{G}_f Gf 的邻接矩阵,第 i i i 行表示第 i i i 个节点的归一化度。图流向注意力用三种方式转换前一编码步骤的注意力分数向量 α t − 1 \alpha_{t-1} αt−1 :
- 在相同的节点 α t , 0 f = α t − 1 \alpha_{t,0}^f = \alpha_{t-1} αt,0f=αt−1 ,模型可能用多个单词表达一个节点
- 移动一步 α t , 1 f = M f α t − 1 \alpha_{t,1}^f = M_f \alpha_{t-1} αt,1f=Mfαt−1,从一个关系节点到它的物体节点的转换
- 移动两步 α t , 2 = ( M f ) 2 α t − 1 \alpha_{t,2} = (M_f)^2 \alpha_{t-1} αt,2=(Mf)2αt−1,从一个关系节点到一个属性节点的转换
最后的流注意力是这三个分数的软差值,通过一个动态门控制:
s
t
=
softmax
(
W
s
σ
(
W
s
h
h
t
a
+
W
s
z
z
t
−
1
)
)
(8)
s_t = \text{softmax}(W_s \sigma(W_{sh}h_t^a + W_{sz}z_{t-1})) \tag{8}
st=softmax(Wsσ(Wshhta+Wszzt−1))(8)
α t f = ∑ k = 0 2 s t , k α t , k f (9) \alpha_t^f = \sum_{k=0}^2 s_{t,k} \alpha_{t,k}^f \tag{9} αtf=k=0∑2st,kαt,kf(9)
W s , W s h , W s z W_s, W_{sh}, W_{sz} Ws,Wsh,Wsz 是参数, s t ∈ R 3 s_t \in \Bbb{R}^3 st∈R3
最后,图注意力机制动态地融合了图语义注意力
α
t
c
\alpha_t^c
αtc 和图流向注意力
α
t
f
\alpha_t^f
αtf 。
β
t
=
sigmoid
(
w
g
σ
(
W
g
h
h
t
a
)
+
W
g
z
z
t
−
1
)
(10)
\beta_t = \text{sigmoid}(w_g \sigma(W_{gh}h_t^a) + W_{gz}z_{t-1}) \tag{10}
βt=sigmoid(wgσ(Wghhta)+Wgzzt−1)(10)
α t = β t α t c + ( 1 − β t ) α t f (11) \alpha_t = \beta_t\alpha_t^c + (1 - \beta_t) \alpha_t^f \tag{11} αt=βtαtc+(1−βt)αtf(11)
因此, t t t 步的预测单词的上下文向量是 z t = ∑ i = 1 ∣ V ∣ α t , i x t , i z_t = \sum_{i=1}^{|\mathcal{V}|} \alpha_{t,i}x_{t,i} zt=∑i=1∣V∣αt,ixt,i
Graph Updating Mechanism
更新图形表示,以在每个解码步骤中记录不同节点的访问状态。 注意力分数
α
t
\alpha_t
αt 表示每个节点的访问强度,因此应该高度关注节点。然而,当生成一些非视觉单词例如 “the” “of”,虽然图节点已经访问了,但是不能通过生成的单词表达,因此不应该更新。因此,提出视觉门修改注意强度:
u
t
=
sigmoid
(
f
v
s
(
h
t
l
;
θ
v
s
)
)
α
t
(12)
u_t = \text{sigmoid}(f_{vs}(h_t^l;\theta_{vs})) \alpha_t \tag{12}
ut=sigmoid(fvs(htl;θvs))αt(12)
其中
f
v
s
f_{vs}
fvs 是一个全连接网络,输出表示生成的单词是否可以表示注意的节点。
每一个节点的更新机制由两部分组成:擦除和添加 ( NTM ) 。首先,第
i
i
i 个节点
x
t
,
i
x_{t,i}
xt,i 根据更新的强度
u
t
,
i
u_{t,i}
ut,i 以细粒度的方式针对每个特征维度擦除:
e
t
,
i
=
sigmoid
(
f
e
r
s
(
[
h
t
l
;
x
t
,
i
]
;
θ
e
r
s
)
)
(13)
e_{t,i} = \text{sigmoid}(f_{ers}([h_t^l;x_{t,i}];\theta_{ers})) \tag{13}
et,i=sigmoid(fers([htl;xt,i];θers))(13)
x ^ t + 1 , i = x t , i ( 1 − u t , i e t , i ) (14) \hat{x}_{t+1, i} = x_{t,i}(1 - u_{t,i}e_{t,i}) \tag{14} x^t+1,i=xt,i(1−ut,iet,i)(14)
因此,如果一个节点不再需要访问可以设置为 0 。如果节点可能需要多次访问并跟踪其状态,我们还采用了添加更新操作:
α
t
,
i
=
σ
(
f
a
d
d
(
[
h
t
l
;
x
t
,
i
]
;
θ
a
d
d
)
)
(15)
\alpha_{t,i} = \sigma(f_{add}([h_t^l;x_{t,i}]; \theta_{add})) \tag{15}
αt,i=σ(fadd([htl;xt,i];θadd))(15)
x t + 1 , i = x ^ t + 1 , i + u t , i α t , i (16) x_{t+1,i} = \hat{x}_{t+1,i} + u_{t,i}\alpha_{t,i} \tag{16} xt+1,i=x^t+1,i+ut,iαt,i(16)
其中 f e r s , f a d d f_{ers}, f_{add} fers,fadd 是全连接层。这样,把 X i \mathcal{X}_i Xi 更新为 X i + 1 \mathcal{X}_{i+1} Xi+1
Training and Inference
交叉熵损失
L
=
−
log
∑
t
=
1
T
p
(
y
t
∣
t
<
t
,
G
,
I
)
(17)
L = -\log \sum_{t=1}^T p(y_t | t_{<t}, \mathcal{G}, \mathcal{I}) \tag{17}
L=−logt=1∑Tp(yt∣t<t,G,I)(17)
Examples