GitHub: neural-motifs
Neural-Motifs 源码解读(3):RelModel类


1. 得到edge_ctx

obj_feature_map
LinearizedContext
fmap,rois
obj_fmaps
rm_obj_dists
rm_box_priors
edge_ctx
rm_obj_dists2
obj_preds

以下3部分信息作为物体特征送入LinearizedContext:

  1. 【物体特征】ObjectDetector得到的fmap与rois经过obj_feature_map()操作得到obj_dim维的物体特征映射obj_fmaps
  2. 【物体类别】ObjectDetector得到的物体类别分布rm_obj_dists
  3. 【物体位置】ObjectDetector得到的[num_rois, 4] of [x0, y0, x1, y1]框子rm_box_priors

LinearizedContext进行context的编解码得到以下三个输出:

  1. edge_ctx: 经过LSTM编码得到的hidden_dim=512维的边上下文特征
  2. rm_obj_dists2: 经过contex更新后的物体类别概率分布
  3. obj_preds: rm_obj_dists取argmax得到的物体类别预测值

2. 得到rel_dists

Linear
split
* visual_rep
Linear
+ freq_bias
edge_ctx
edge_rep
sub_rep
obj_rep
*
prod_rep
rel_dists
  1. hidden_dim维的边上下文特征edge_ctx经过Linear线性变化至(pooling_dim*2)维的边特征edge_rep。
  2. 边特征edge_rep分开为大小均为[num_rel, pooling_dim=4096]的两个特征,一个作为主语特征sub_rep,一个作为宾语特征obj_rep。
  3. 主语特征sub_rep与宾语特征obj_rep 点乘得到乘积特征prod_rep。
  4. 若use_vision=True,即考虑主语和宾语两个bbox的union box的特征visual_rep,则乘积特征prod_rep再点乘上visual_rep。其中visual_rep是由主语和宾语的union box经过roi_fmap=load_vgg(use_dropout=False, use_relu=False, pretrained=False).classifier至pooling_dim维。
  5. pooling_dim维的乘积特征prod_rep经过Linear线性变化至num_rels维的关系概率分布rel_dists。
  6. 若use_bias=True,则将数据集中关系频率偏差freq_bias=P(predicate | obj1, obj2, img)加至关系概率分布rel_dists。

相关文章: