Neural-Motifs 源码解读(2):LinearizedContext类
GitHub: neural-motifs
主体框架:
1. 得到obj_feats
物体特征obj_feats由以下3部分组成:
- 【物体特征信息】ObjectDetector得到的fmap与rois经过obj_feature_map()操作得到obj_dim维的特征映射obj_fmap。
- 【物体类别信息】ObjectDetector得到的物体类别分布rm_obj_dists经过softmax后(相当于得到obj_preds) 再embed至embed_dim=200维的obj_embed。
- 【物体位置信息】ObjectDetector得到的[num_rois, 4] of [x0, y0, x1, y1]的框子box_priors经过Linear线性变化至128维的pos_embed。
2. obj_ctx()的编码过程
编码得到物体上下文信息encode_rep主要有2个步骤:
- 通过sort_rois()操作将rois根据指定的指标进行排序,并返回排序序列permutation与T*B维的ls_transposed,obj_feats使用返回的permutation进行排序,排序后的obj_feats与ls_transposed通过PackedSequence处理为input_packed。
- 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()的解码过程
解码得到更新后的物体类别分布obj_dists与obj_preds主要有2个步骤:
- encode_rep与ls_transposed(或者排序后的obj_feats)通过PackedSequence处理为decoder_inp
- 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
输入至edge_ctx()的特征inp_feats主要由以下3部分组成:
- 若pass_in_obj_feats_to_edge=True,则加入ObjectDetector得到的fmap与rois经过obj_feature_map()操作得到的obj_dim维的特征映射obj_fmaps。
- 物体上下文信息obj_ctx,即obj_ctx()编码过程生成的encode_rep。
- 将ctx更新后的物体类别分布obj_preds embed2至embed_dim=200维的obj_embed2。("2"是相对于第1步obj_feats中的obj_embed)
5. edge_ctx()的编码过程
编码得到边上下文信息edge_ctx主要有2个步骤:
- 通过sort_rois()操作将rois根据指定的指标进行排序,并返回排序序列permutation与T*B维的ls_transposed,inp_feats使用返回的permutation进行排序,排序后的inp_feats与ls_transposed通过PackedSequence处理为edge_input_packed。
- 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)。