Neural-Motifs 源码解读(2):LinearizedContext类

GitHub: neural-motifs
Neural-Motifs 源码解读(2):LinearizedContext类


主体框架:

obj_fmaps
obj_feats
rm_obj_dists
rm_box_priors
obj_ctx
obj_ctx
obj_dists
obj_preds
inp_feats
edge_ctx
egde_ctx

1. 得到obj_feats

obj_feature_map
softmax & embed
Linear
fmap,rois
obj_fmaps
+
rm_obj_dists
obj_logits
obj_embed
rm_box_priors
box_priors
pos_embed
obj_pre_rep
obj_feats

物体特征obj_feats由以下3部分组成:

  1. 【物体特征信息】ObjectDetector得到的fmap与rois经过obj_feature_map()操作得到obj_dim维的特征映射obj_fmap。
  2. 【物体类别信息】ObjectDetector得到的物体类别分布rm_obj_dists经过softmax后(相当于得到obj_preds) 再embed至embed_dim=200维的obj_embed。
  3. 【物体位置信息】ObjectDetector得到的[num_rois, 4] of [x0, y0, x1, y1]的框子box_priors经过Linear线性变化至128维的pos_embed。

2. obj_ctx()的编码过程

sort_rois
PackedSequence
obj_ctx_rnn
obj_feats
obj_feats_perm
ls_transposed
input_packed
encode_rep

编码得到物体上下文信息encode_rep主要有2个步骤:

  1. 通过sort_rois()操作将rois根据指定的指标进行排序,并返回排序序列permutation与T*B维的ls_transposed,obj_feats使用返回的permutation进行排序,排序后的obj_feats与ls_transposed通过PackedSequence处理为input_packed。
  2. input_packed通过obj_ctx_rnn编码得到encode_rep。其中obj_ctx_rnn为AlternatingHighwayLSTM(input_size=obj_dim+embed_dim+128, hidden_size=hidden_dim=512, num_layers=nl_obj=2)。

3. obj_ctx()的解码过程

PackedSequence
decoder_rnn
encode_rep
ls_transposed
obj_feats_perm
decoder_inp
obj_dists
obj_preds

解码得到更新后的物体类别分布obj_dists与obj_preds主要有2个步骤:

  1. encode_rep与ls_transposed(或者排序后的obj_feats)通过PackedSequence处理为decoder_inp
  2. decoder_inp通过decoder_rnn解码得到经过obj_ctx更新后的物体类别概率分布obj_dists,obj_dists取argmax进而得到obj_preds。其中decoder_rnn为DecoderRNN(inputs_dim=hidden_dim+(obj_dim+embed_dim), hidden_dim=512)。

4. 得到inp_feats

embed
obj_fmaps
+
encode_rep
obj_ctx
obj_preds
obj_embed2
inp_feats

输入至edge_ctx()的特征inp_feats主要由以下3部分组成:

  1. 若pass_in_obj_feats_to_edge=True,则加入ObjectDetector得到的fmap与rois经过obj_feature_map()操作得到的obj_dim维的特征映射obj_fmaps。
  2. 物体上下文信息obj_ctx,即obj_ctx()编码过程生成的encode_rep。
  3. 将ctx更新后的物体类别分布obj_preds embed2至embed_dim=200维的obj_embed2。("2"是相对于第1步obj_feats中的obj_embed)

5. edge_ctx()的编码过程

sort_rois
PackedSequence
edge_ctx_rnn
inp_feats
inp_feats_perm
ls_transposed
edge_input_packed
edge_ctx

编码得到边上下文信息edge_ctx主要有2个步骤:

  1. 通过sort_rois()操作将rois根据指定的指标进行排序,并返回排序序列permutation与T*B维的ls_transposed,inp_feats使用返回的permutation进行排序,排序后的inp_feats与ls_transposed通过PackedSequence处理为edge_input_packed。
  2. edge_input_packed通过edge_ctx_rnn编码得到edge_ctx。其中edge_ctx_rnn为AlternatingHighwayLSTM(input_dim=embed_dim+hidden_dim+(obj_dim), hidden_size=hidden_dim=512, num_layers=nl_edge=4)。