Abstract
该文章提出了一个动态树结构。它相较于其它模型有两点优势:1. 使用高效且富有表现力的二叉树编码了对象之间固有的平行/层次关系。例如衣服和裤子通常是平级的且隶属于人。2. 动态结构因图像而异,因任务而异,允许对象之间有更多的内容/任务的信息传递。
Approach
VCTree的构造过程可以分为四步:
- 通过Faster-RCNN来获取物体的proposals,每一个proposal i i i,的视觉特征表示为 x i x_i xi。并拼接上ROIAlign特征 v i ∈ R 2048 v_i\in R^{2048} vi∈R2048和空间特征 b i ∈ R 8 b_i\in R^8 bi∈R8,其中空间特征包括box的坐标 ( x 1 , y 1 , x 2 , y 2 ) (x_1, y_1, x_2, y_2) (x1,y1,x2,y2)和中心坐标 ( x 1 + x 2 2 , y 1 + y 2 2 ) (\frac{x_1+x_2}{2}, \frac{y_1+y_2}{2}) (2x1+x2,2y1+y2)还有大小 ( x 2 − x 1 , y 2 − y 1 ) (x_2-x_1, y_2-y_1) (x2−x1,y2−y1)。
- 通过一个可学习的矩阵来构造VCTree。
- 在3.2段,我们采用Bidirectional Tree LSTM 来编码,使用构建的VCTree对背景信息进行编码。
- 最后根据终端任务进行解码。
VCTree Construction
VCTree的构造依赖于一个得分矩阵,该矩阵的构造依赖以下两点原则:1. 应保持固有的对象相关性,例如,上中的 “男子戴头盔”。2. 与任务相关的对象对比不相关的对象对有更高的得分,例如,鉴于问题 “这个人的头上有什么?”,"人-头盔 "对应该比 "人-摩托车 "和 "头盔-摩托车 "对更重要(VQA)
因此将得分 S S S定义为物体相关性 f ( x i , x j ) f(x_i, x_j) f(xi,xj)和成对物体依赖性 g ( x i , x j , q ) g(x_i,x_j,q) g(xi,xj,q)的乘积。
其中 q q q表示任务特征,例如VQA中由GRU编码的问题特征。 σ ( ⋅ ) \sigma(\cdot) σ(⋅)表示sigmoid函数; h ( x i , q ) h(x_i,q) h(xi,q)表示在VQA中物体-任务的关联性。其中 g ( x i , x j , q ) g(x_i,x_j,q) g(xi,xj,q)在场景图生成中一直都是1,因为认为所有物体对别的物体的贡献是相同的。然后 f ( x i , x j ) f(x_i, x_j) f(xi,xj)需要进行预训练,但由于缺少问题先验和图层面的约束,所以结果一直不是很好。
这里不是很清楚这个问题特征究竟是什么意思,根据后文理解应该是VQA中的东西,在SGG中是不变的。后面的
考虑 S S S是一个对称的邻接矩阵,我们可以通过Prim算法获得最大生成树,其中根节点 i i i 的产生是 a r g m a x i ∑ j ≠ i S i j argmax_i\sum_{j\neq i}S_{ij} argmaxi∑j=iSij。概括来说,正如图3中展示的一样,生成方法就是将pool中得分最高的节点和已有的节点连接起来。由此产生的树是多分支的,只是一个只有一种连接的稀疏图,在随后的语境编码中仍然无法区分层次和平行关系。
最后,我们将多分支树转换为等价的二叉树。即VCTree,如上图所示,将非最左侧的边缘改为右侧分支。在这种方式下,右侧分支(蓝色)表示平行语境,左侧分支(红色)表示分层语境。与多分支相比,这种二叉树结构在我们的SGG和VQA实验中取得了明显的改进。
这里应该是不断的计算得分矩阵,然后不断的将pool中的节点放入到树当中。
TreeLSTM Context Encoding
在给出了上述构造VCTree的构造方法之后,使用BiTreeLSTM来作为我们的背景编码器:
其中 z i z_i zi表示输入的节点特征。然后 D = [ d 1 , d 2 , . . . , d n ] D=[d_1, d_2,...,d_n] D=[d1,d2,...,dn]是编码的物体层面的视觉背景特征。每一个 d i = [ h → i ; h ← i ] d_i=[\overrightarrow{h}_i;\overleftarrow{h}_i] di=[hi;hi] 是来自TreeLSTM两个方向的隐藏状态的串联。
其中 → \rightarrow →和 ← \leftarrow ←分别表示从上到下和从下到上。之后我们简单的用 p , l , r p,l,r p,l,r来表示节点 i i i 的parent、left child 和 right child。我们使用零矢量来填充所有缺失的分支表。在语境编码中对左右分支的明确区分。
Scene Graph Generation Model
**Object Context Encoding:**input node feature z i z_i zi为 object visual features和 class probabilities的concatenation( [ x i ; W c i ] [x_i;W_{ci}] [xi;Wci])
**Relation Context Encoding:**将object encoding得到的 d i d_i di作为 z i z_i zi再做一次bitreelstm,得到relation context Dr.
**context decoding:**SGG的目标在于正确检测出object以及relationship.对于object,使用公式3,input z i z_i zi为 [ d i , W c p ] [di,W_{cp}] [di,Wcp],cp为parent节点的 predicted label distribution,W降维矩阵。输出的hidden layer将通过softmax分类器预测object label. 对于relationship,对object-pair计算: d i j = M L P ( [ d i ; d j ] ) d_{ij}=MLP([d_i;d_j]) dij=MLP([di;dj]),计算 b i j = M L P ( [ b i ; b j ; b i ∪ j ; b i ∩ j ] ) b_{ij} = MLP([b_i;b_j;b_{i∪j};b_{i∩j}]) bij=MLP([bi;bj;bi∪j;bi∩j])(后两者为union box 和intersection box的bounding box feature),计算 v i j v_{ij} vij(RoIAlign feature),得到 g i j = d i j ⋅ v i j ⋅ b i j g_{ij} = d_{ij} ·v_{ij} ·b_{ij} gij=dij⋅vij⋅bij,再将gij喂给softmax.