Explainable and Explicit Visual Reasoning over Scene Graphs

背景

本篇论文是南洋理工大学张含望组的工作,接收于CVPR2019

摘要

题为在场景图上的可解释和明确的视觉推理。作者提出的可解释和明确的神经模块(XNMs),目标是打破在复杂的视觉推理任务中普遍使用的黑盒神经结构。XNMs仅仅由4种元类型组成,这将大大减少参数量,此外作者称设计的该种模型可以通过图注意力的方式来跟踪推理流程。

方法

论文既然已经提到了场景图,必然要有场景图的构造过程。场景图由图像中的objects组成,即图中的节点集合 V = { v 1 , ⋅ ⋅ ⋅ , v N } V = \{v_1, · · · , v_N\} V={v1,,vN}以及边集合来表示节点对之间的关系 E = { e i j ∣ i , j = 1 , ⋅ ⋅ ⋅ , v N } E=\{e_{ij}|i,j=1, · · · , v_N\} E={eiji,j=1,,vN}。实际操作中,以检测到的区域特征作为顶点特征,以两个顶点特征concat后的结果作为它们之间边的特征

四种元类型:
AttendNode[query]
将问题先encode成query vector q q q,作为输入,通过以下函数得到node attention vector(表示各节点权重的向量,第i个节点的权重由 a i a_i ai表示)
a = f ( V , q ) ∈ R N a=f(V,q)\in \R^N a=f(V,q)RN
函数 f f f的值域[0,1]

AttendEdge[query]
当以input query作为输入时,用于计算edge attention
W = g ( E , q ) W=g(E,q) W=g(E,q)
同样地,函数g的值域也是[0,1]

Transfer
在得到node attention vector a 和edge attention matrix W后,我们需要能够将节点的权重和与其有关联性的边结合起来去寻找新的节点。简单地,即利用上述注意关系来更新节点的权重 a ′ a' a
a ′ = n o r m ( W T a ) a'=norm(W^Ta) a=norm(WTa)
W i j W_{ij} Wij表示有多少权重将从节点i流向节点j。故 a i ′ = ∑ j = 1 N W j i a j a_i'=\sum_{j=1}^NW_{ji}a_j ai=j=1NWjiaj表示object i i i能够收到多少信息流入。利用这种方式来重新分配节点注意力。

Logic 逻辑门
XNM模块中定义了三种逻辑门操作用于生成新的attention
And、Or和Not
与门
A n d ( a 1 , a 2 ) = m i n ( a 1 , a 2 ) And(a^1,a^2)=min(a^1,a^2) And(a1,a2)=min(a1,a2)
或门
O r ( a 1 , a 2 ) = m a x ( a 1 , a 2 ) Or(a^1,a^2)=max(a^1,a^2) Or(a1,a2)=max(a1,a2)
非门
N o t ( a ) = 1 − a Not(a)=1-a Not(a)=1a

首先,根据给定的输入query q q q确定注意力在各个标签上的分布:
b = s o f t m a x ( D q ) b = softmax(Dq) b=softmax(Dq)
l e n g t h ( b ) = C length(b)=C length(b)=C (the number of labels)
具体地,node attention和edge attention计算方式:
a i = f ( V , q ) i = ∑ c ∈ C i b c a_i=f(V,q)_i=\sum_{c\in C_i}b_c ai=f(V,q)i=cCibc b c b_c bc代表第 c c c个标签的权重,这里用了累加,考虑到节点可能是多标签类型
W i j = g ( E , q ) i j = ∑ c ∈ C i j b c W_{ij}=g(E,q)_{ij}=\sum_{c\in C_{ij} }b_c Wij=g(E,q)ij=cCijbc
完善函数f和g
a i = f ( V , q ) i = s i g m o i d ( M L P ( v i ) T q ) a_i=f(V,q)_i=sigmoid(MLP(v_i)^Tq) ai=f(V,q)i=sigmoid(MLP(vi)Tq)
W i j = g ( E , q ) i j = s i g m o i d ( M L P ( e i j T ) q ) W_{ij}=g(E,q)_{ij}=sigmoid(MLP(e_{ij}^T)q) Wij=g(E,q)ij=sigmoid(MLP(eijT)q)

推理模块的合成

利用上述提到的4种元类型组合成最终的推理模块。推理模块中能涵盖的操作如下:
Explainable and Explicit Visual Reasoning over Scene Graphs_第1张图片

特征输出模块

除了推理模块之外,还需要一种能够把中间attention态的信息映射到最终特征表示(并用于最终分类器)的模块,作者称之为特征输出模块。
在这个模块里,包含的操作有
Explainable and Explicit Visual Reasoning over Scene Graphs_第2张图片
其中describe[query]用于将attended node features转化为specified attribute value以适用于不同类型的问题(询问形状、颜色等等不同的问题)。
Describe模块的设计如下:
在这里插入图片描述
接下来,利用K个投影矩阵( M 1 , . . . , M k M_1,...,M_k M1,...,Mk)将 v ^ \hat v v^投影到不同的aspects来表征不同角度的问题。
D e s c r i b e ( a , q ) = ∑ k = 1 K c k ( M k v ^ ) ( 8 ) Describe(a,q)=\sum_{k=1}^Kc_k(M_k\hat v) \quad\quad\quad\quad\quad(8) Describe(a,q)=k=1Kck(Mkv^)(8)
c = S o f t m a x ( M L P ( q ) ) c=Softmax(MLP(q)) c=Softmax(MLP(q))用于表示K个不同aspects的概率分布,K是超参, c k c_k ck代表第k个aspect的概率大小

实验结果

Explainable and Explicit Visual Reasoning over Scene Graphs_第3张图片
几个疑问:
这些元类型操作以怎样的顺序来组成推理模块呢?组成的推理模块深度如何?(文中也没有提及NAS之类的搜索结构)

你可能感兴趣的:(机器学习,深度学习)