Introduction
这是一篇关于利用图像信息(scene-level context)和对象关系信息(object-object relationships)的目标检测网络。该论文把图像上的对象和对象之间的关系建模成一个图网络,如下图所示,每一个检测对象是图网络中的一个结点,而对象之间的关系(object-object relationship)是图网络的边。图网络包括结点 V V V、有向边 E E E和全景信息 s s s(scene)。
要理解这篇论文要知道怎么生成图网络 G = ( V , E , s ) G=(V,E,s) G=(V,E,s)和如何用这个图网络进行推理。
Structure inference network
Structure inference network (SIN) 的架构如下
图像经过RPN网络后会得到ROIs,表示图像上的对象。每个ROI经过ROI Pooling和FC得到visual feature,表示图的结点node,传入Structure inference网络中。整张图像也当成一个ROI经过同样的操作生成feature scene(对scene-level context进行编码)传入Structure inference网络中。接着对对象的关系进行编码edges,同样传入Structure inference网络中。图网络的推理过程用循环网络的门控循环单元(Gated Recurrent Unit, GRU),推理过程不断更新结点的信息,最后的结点信息用于分类和bbox回归。
Structure Inference
图推理过程如下
对于某个对象结点 v i v_i vi,图上另外的对象分别表示 v 1 , v 2 , v 3 v_1, v_2, v_3 v1,v2,v3。Scene GRU 和 Edge GRU 设计用于传递信息。
Scene GRU 用于传递对象信息。GRU是循环网络的门控循环单元,它有一个隐藏(记忆)单元,隐藏单元用图像结点特征 f i v f_i^v fiv进行初始化,然后把全景内容信息 m i s = f s m_i^s=f^s mis=fs输入到Scene GRU中,这样Scene GRU输出的隐藏单元 h s h^s hs就包括对象信息和全图信息。
Edge GRU 用于传递对象关系信息。同样用 f i v f_i^v fiv初始化 Edge GRU的隐藏单元。Visual relationship vector用 f i v f_i^v fiv和 f j v f_j^v fjv的concatenation表示, [ f i v , f j v ] [f_i^v, f_j^v] [fiv,fjv],空间位置信息表示为
R j → i p = [ w i , h i , s i , w j , h j , s j , ( x i − x j ) w j , ( y i − y j ) h j , ( x i − x j ) 2 w j 2 , ( y i − y j ) 2 h j 2 , log ( w i w j ) , log ( h i h j ) ] R_{j\to i}^p = [w_i, h_i, s_i, w_j, h_j, s_j, \frac{(x_i-x_j)}{w_j}, \frac{(y_i-y_j)}{h_j}, \frac{(x_i-x_j)^2}{w_j^2}, \frac{(y_i-y_j)^2}{h_j^2}, \log(\frac{w_i}{w_j}), \log(\frac{h_i}{h_j})] Rj→ip=[wi,hi,si,wj,hj,sj,wj(xi−xj),hj(yi−yj),wj2(xi−xj)2,hj2(yi−yj)2,log(wjwi),log(hjhi)]
对象j对对象i的影响程度用标量 e j → i e_{j \to i} ej→i表示
e j → i = r e l u ( W p R j → i p ) ∗ t a n h ( W v [ f i v , f j v ] ) e_{j \to i} = relu(W_p R_{j \to i}^p) * tanh(W_v [f_i^v, f_j^v]) ej→i=relu(WpRj→ip)∗tanh(Wv[fiv,fjv])
对象j对对象i的关系信息用 m j → i e m_{j\to i}^e mj→ie表示
m j → i e = e j → i ∗ f j v m_{j \to i}^e = e_{j \to i} * f_j^v mj→ie=ej→i∗fjv
把不同关系信息聚集在一起,用max pooling把响应最高的关系信息 m i e m_i^e mie(intergrated message)输入到Edge RGU中
m i e = max j ∈ V p o o l i n g ( e j → i ∗ f j v ) m_i^e = \underset{j \in V}{\max} pooling (e_{j \to i} * f_j^v) mie=j∈Vmaxpooling(ej→i∗fjv)
接着,把scene GRU的输出 h s h^s hs和edge GRU的输出 h e h^e he平均一下,作为结点的更新之后的状态
h = h s + h e 2 h = \frac{h^s + h^e}{2} h=2hs+he
在下个阶段/Iteration,用新的特征初始化scene GRU的隐藏单元。
这个过程就是图推理过程,其他对象的关系信息通过边传递到对象i结点,结点的信息得到更新。
下一个阶段,用新的特征初始化scene GRU的隐藏单元,其他操作同上。经过几次迭代之后,结点的状态包含了丰富的scene context和object-object relationship,用这样的结点状态 h t + 1 h_{t+1} ht+1(t表示迭代次数,论文中t=2)进行对象的分类和bbox回归。
整个过程用RNN类型的结构图表示
Experiment
看看SIN的表现效果
Scene GRU效果
Edge GRU效果