in lib/modeling/VGG16_rel_softmaxed_triplet.py [0:0]
def add_visual_embedding(model,
blob_sbj, dim_sbj,
blob_obj, dim_obj,
blob_rel_prd, dim_rel_prd,
blob_rel_sbj, dim_rel_sbj,
blob_rel_obj, dim_rel_obj):
model.add_FC_layer_with_weight_name(
'x_sbj_and_obj',
blob_sbj, 'x_sbj_raw', dim_sbj, cfg.OUTPUT_EMBEDDING_DIM,
weight_init=('GaussianFill', {'std': 0.01}),
bias_init=('ConstantFill', {'value': 0.}))
model.add_FC_layer_with_weight_name(
'x_sbj_and_obj',
blob_obj, 'x_obj_raw', dim_obj, cfg.OUTPUT_EMBEDDING_DIM,
weight_init=('GaussianFill', {'std': 0.01}),
bias_init=('ConstantFill', {'value': 0.}))
if cfg.MODEL.SUBTYPE.find('w_ishans') == 0:
model.FC(
blob_rel_prd, 'x_rel_prd_raw_1',
dim_rel_prd, 4 * cfg.OUTPUT_EMBEDDING_DIM,
weight_init=('GaussianFill', {'std': 0.01}),
bias_init=('ConstantFill', {'value': 0.}))
model.LeakyRelu('x_rel_prd_raw_1', 'x_rel_prd_raw_1', alpha=0.1)
model.FC(
'x_rel_prd_raw_1', 'x_rel_prd_raw_2',
4 * cfg.OUTPUT_EMBEDDING_DIM, 2 * cfg.OUTPUT_EMBEDDING_DIM,
weight_init=('GaussianFill', {'std': 0.01}),
bias_init=('ConstantFill', {'value': 0.}))
model.LeakyRelu('x_rel_prd_raw_2', 'x_rel_prd_raw_2', alpha=0.1)
model.FC(
'x_rel_prd_raw_2', 'x_rel_prd_raw_3',
2 * cfg.OUTPUT_EMBEDDING_DIM, cfg.OUTPUT_EMBEDDING_DIM,
weight_init=('GaussianFill', {'std': 0.01}),
bias_init=('ConstantFill', {'value': 0.}))
model.net.Alias('x_rel_prd_raw_3', 'x_rel_prd_raw')
else:
model.FC(
blob_rel_prd, 'x_rel_prd_raw_1',
dim_rel_prd, cfg.OUTPUT_EMBEDDING_DIM,
weight_init=('GaussianFill', {'std': 0.01}),
bias_init=('ConstantFill', {'value': 0.}))
if cfg.MODEL.SUBTYPE.find('w_ishans') == 0:
model.Relu('x_rel_prd_raw_1', 'x_rel_prd_raw_1')
model.FC(
'x_rel_prd_raw_1', 'x_rel_prd_raw_2',
cfg.OUTPUT_EMBEDDING_DIM, cfg.OUTPUT_EMBEDDING_DIM,
weight_init=('GaussianFill', {'std': 0.01}),
bias_init=('ConstantFill', {'value': 0.}))
model.net.Alias('x_rel_prd_raw_2', 'x_rel_prd_raw')
else:
model.net.Alias('x_rel_prd_raw_1', 'x_rel_prd_raw')
model.net.Normalize('x_sbj_raw', 'x_sbj')
model.net.Normalize('x_obj_raw', 'x_obj')
model.net.Normalize('x_rel_prd_raw', 'x_rel_prd')
# get x_rel_sbj and x_rel_obj for the p branch
if model.train and cfg.MODEL.SUBTYPE.find('embd_fusion') >= 0:
model.add_FC_layer_with_weight_name(
'x_sbj_and_obj',
blob_rel_sbj, 'x_rel_sbj_raw',
dim_rel_sbj, cfg.OUTPUT_EMBEDDING_DIM,
weight_init=('GaussianFill', {'std': 0.01}),
bias_init=('ConstantFill', {'value': 0.}))
model.add_FC_layer_with_weight_name(
'x_sbj_and_obj',
blob_rel_obj, 'x_rel_obj_raw',
dim_rel_obj, cfg.OUTPUT_EMBEDDING_DIM,
weight_init=('GaussianFill', {'std': 0.01}),
bias_init=('ConstantFill', {'value': 0.}))
x_rel_sbj = model.net.Normalize('x_rel_sbj_raw', 'x_rel_sbj')
x_rel_obj = model.net.Normalize('x_rel_obj_raw', 'x_rel_obj')
if cfg.MODEL.SPECS.find('not_stop_gradient') < 0:
# this is to stop gradients from x_rel_sbj and x_rel_obj
model.StopGradient(x_rel_sbj, x_rel_sbj)
model.StopGradient(x_rel_obj, x_rel_obj)