Abstract
现有的场景图生成方法采取的是通过分类生成的方法,其中场景图是通过对场景中物体之间所有可能的边进行标记而生成的,这增加了计算的开销。该项工作介绍了一个生成的基于Transformer的方法来在链接预测的基础上生成场景图。使用两个基于Transformer的组件,我们首先从检测到的物体和它们的视觉特征中采样到可能的场景图结构,然后我们对采样到的edge进行分类来得到最后的场景图。
Introduction
现有的SGG方法存在一个问题,就是所有的entities之间预测具体的关系之前,都是相互影响和联系的。而这种方法存在一定的限制:
- 首先,通过用密集的拓扑结构对实体之间的相互作用进行建模,在关系推理过程中忽略了潜在的语义结构。
- 构建所有实体之间的配对关系,对谓词的分类模块有巨大的开销,因为配对比较的数量会随着检测到的物体数量的增加而非线性增长。
通过解耦关系构造和关系类别预测,该论文可以只考虑那些有更高连接可能的边。因此可以减少推理边关系的计算开销。
本文的Contribution:
- 第一个使用图生成的方法来解决SGG问题,不需要在所有检测到的物体之间构造昂贵的匹配。
- 提出了反复生成交互图和全局性的背景关系推理的想法,使用基于两阶段Transformer的架构对杂乱、复杂的语义结构进行有效推理。
Approach
Overview
本文的模型全程IS-GGT,主要由三个部分组成:1. concept grounding 2. structural reasoning 3. relational reasoning。基于生成图模型的思想,我们使用场景级定位和实体概念假设,首先使用生成Transformer Decoder网络对场景的潜在语义结构进行采样。一旦语义结构被采样,则语义关系可以被打上标签。
Problem Statement
这个问题的典型方法是由全连接图中所有可能的边组成的穷举搜索空间中提取可信的Triplet,所有的节点都和别的节点相连。然而本文采用的是首先对基于节点假说的潜在的语义结构进行采样,在relation分类之前帮助全局信息建模。 这使我们能够减少关系预测的计算负荷,同时将关系推理限制在被认为是合理的交互上。
Concept Grounding: Entity Hypotheses
场景图生成的过程从物体定位开始,包括在给出的图像 I I I当中的概念的定位和识别。和前人工作相同,采用FasterRCNN进行定位。每一个节点通过ResNet和ROIAlign获取一个特征表示,通过object detector获取label。和以前的工作不同的是,没有一个专门的视觉encoder来获取relationship特征。
这里和以前不同的说法有点奇怪,毕竟以前的工作里也有很多没有用visual encoder获取关系视觉特征的。
Iterative Interaction Graph Generation
这一步主要是为了采样产生结构图,其中图中的每一条边 e i e_i ei都是无标签的,只表示 v i v_i vi和 v j v_j vj之间有可信的标签。本文对每一个节点 v i v_i vi使用Transformer进行自解码逐步构成邻接矩阵 A N i A_N^i ANi。伪代码如下:
对于给出的空图 G = ∅ G=\empty G=∅,基础结构图通过一系列节点和边生成。解码过程的每一步都会输出一个邻接列表,其条件是每个检测到的节点 v i v_i vi的视觉特征 f N i f^i_N fNi、其假设的标签 l i l_i li和到当前步骤 t t t为止的解码的邻接矩阵 A t A_t At。这个逐步过程会生成邻接矩阵列表 A = { A N 1 , A N 2 , . . . , A N n , v i ∈ V } A=\{A_N^1,A_N^2,...,A_N^n,v_i\in V\} A={AN1,AN2,...,ANn,vi∈V},最终的邻接矩阵是一个可以通过设定阈值来进行01分类的矩阵。
这里有一个问题,就是这个 A N i A_N^i ANi在构建的时候因为只考虑1…i的节点的特征,那是不是也计算 v i v_i vi和之前的节点的邻接矩阵?那这个时候节点的输入顺序就起到一定影响了。
值为1表示两个节点之间有边存在,然后就可以将其加入edge_list当中。边在edge_list当中的排序通过 E ( e i j ) = σ ( p i + p j ) E(e_{ij})=\sigma(p_i+p_j) E(eij)=σ(pi+pj),其中 p i p_i pi和 p j p_j pj表示 v i v_i vi和 v j v_j vj存在的置信度分数。最后对 A = { A N 1 , A N 2 , . . . , A N n , v i ∈ V } A=\{A_N^1,A_N^2,...,A_N^n,v_i\in V\} A={AN1,AN2,...,ANn,vi∈V}列表取最大值来获得最终的邻接矩阵,然后构造场景图,公式如下:
注意由于在邻接矩阵构建阶段节点的输入顺序不同会导致邻接矩阵不同,所以本文根据物体分类器(Faster-RCNN)得到的confidence来决定节点的输入顺序。
**Decoder(上图算法1)的损失函数:**该Decoder由两个 L o s s Loss Loss组成:cross-entropy的邻接损失 L A L_A LA,该损失由预测的邻接矩阵还有真实的邻接矩阵组成。
还有语义损失 L S L_S LS,该损失是节点标签预测的交叉熵。
L
A
=
L_A=
LA=
对于第二个损失, l j l_j lj表示Faster-RCNN的分类损失, l ^ j \hat{l}_j l^j表示算法1中line11里面的Transformer decoder的结果。这种损失函数的设置是因为实验发现,**经过场景图生成模型之后的物体预测准确率反而下降了,所以该处让经过场景图生成的物体标签和经过物体预测的标签尽可能相同。**最终的损失函数如下:
Edge Labeling: Relation Prediction
谓词(或实体关系)预测,涉及对上一节交互图G中的边缘集合 E E E进行标记。为了进一步完善交互图,我们为每个采样的边缘 e i j ∈ E e_{ij} ∈ E eij∈E(连接两个节点 n i n_i ni和 n j n_j nj)分配一个“边缘先验”。这个先验是从concept grounding module(Faster-RCNN)获得的confidence分数(分别是 c i c_i ci和 c j c_j cj)的函数,表示为 E ( e i j ) = σ ( c i × c j ) E(e_{ij}) = σ(c_i × c_j) E(eij)=σ(ci×cj)。最后,我们根据边缘先、首先语义特征 S i N S_i^N SiN和 S j N S_j^N SjN通过GloVe或者ConceptNet Numberbatch获得。 F G F^G FG通过DETR获得。
具体来讲,首先使用MLP将每个边缘 e k = e i j ∈ E e_k = e_{ij} ∈ E ek=eij∈E中的节点的实体特征(视觉特征 F i N F_i^N FiN和定位特征 b b i bb_i bbi)映射到visual embedding space中,即 h ^ v k = R E L U ( W c [ f N i ; b b i ; f N j ; b b j ] ) \hat{h}^k_v = RELU(W_c[f^i_N; bb_i; f^j_N; bb_j]) h^vk=RELU(Wc[fNi;bbi;fNj;bbj])。然后构造visual-semantic entity embedding: h ^ s v k = R E L U ( W s v [ h ^ k ; S N i , S N j ] ) \hat{h}^k_{sv} = RELU(W_{sv}[\hat{h}^k; S^i_N, S^j_N]) h^svk=RELU(Wsv[h^k;SNi,SNj])。
下面这个公式里的 h ^ k \hat{h}^k h^k应该指的是上面的 h ^ v k \hat{h}_v^k h^vk,不然的话有点意义不明。
然后对初始的特征通过encoder-decoder结构进行特征更新。
然后将结果 h s v k h_{sv}^k hsvk通过一个D层的Transformer decoder来获取一个背景表征 h ^ k \hat{h}^k h^k如上图公式所示。对于在每个边 e k e_k ek,通过在 h ^ k \hat{h}_k h^k上应用一个线性层,然后使用softmax函数获得关系(或谓词)的概率 p ( r ^ k ) p(\hat{r}_k) p(r^k)。我们的训练损失函数如下:
其中 r k r_k rk表示目标关系类 , r ^ k \hat{r}_k r^k表示预测的正确的类别概率, w r w_r wr表示权重矩阵。