in utils/symbol/symbol_resnetv2.py [0:0]
def get_before_pool(depth, group=1, scaler=1., ratio=-1, use_fp16=False, use_se=False):
data = mx.symbol.Variable(name="data")
data = mx.sym.Cast(data=data, dtype=np.float16) if use_fp16 else data
# define resne(x)t
num_in, num_mid, num_out = (64, int(64 * scaler), 256)
k_sec = resenet_spec[depth]
# ---------
# stage 1
conv1_x = Conv_BN_ACT(data=data, num_filter=num_in, kernel=(7, 7), pad=(3, 3), stride=(2, 2), name='conv1')
conv1_x = mx.symbol.Pooling(data=conv1_x, pool_type="max", kernel=(3, 3), pad=(1, 1), stride=(2, 2), name='pool1')
# stage 2
for i in range(1,k_sec[2]+1):
conv2_x = BottleNeckV2(data=(conv1_x if i==1 else conv2_x),
num_in=(num_in if i==1 else num_out),
num_mid=num_mid,
num_out=num_out,
name="L2_B%02d"%i,
first_block=(i==1),
num_group=group,
stride=(1,1),
ratio=ratio,
use_se=use_se)
# stage 3
num_in = num_out
num_mid = int(2*num_mid)
num_out = int(2*num_out)
for i in range(1,k_sec[3]+1):
conv3_x = BottleNeckV2(data=(conv2_x if i==1 else conv3_x),
num_in=(num_in if i==1 else num_out),
num_mid=num_mid,
num_out=num_out,
name="L3_B%02d"%i,
first_block=(i==1),
num_group=group,
stride=((2,2) if (i==1) else (1,1)),
ratio=ratio,
use_se=use_se)
# stage 4
num_in = num_out
num_mid = int(2*num_mid)
num_out = int(2*num_out)
for i in range(1,k_sec[4]+1):
conv4_x = BottleNeckV2(data=(conv3_x if i==1 else conv4_x),
num_in=(num_in if i==1 else num_out),
num_mid=num_mid,
num_out=num_out,
name="L4_B%02d"%i,
first_block=(i==1),
num_group=group,
stride=((2,2) if (i==1) else (1,1)),
ratio=ratio,
use_se=use_se)
# stage 5
num_in = num_out
num_mid = int(2*num_mid)
num_out = int(2*num_out)
for i in range(1,k_sec[5]+1):
# ratio is forced to be 0. for the last stage
# (because do 3x3 conv on 3.5x3.5 resolution map does not make sense)
conv5_x = BottleNeckV2(data=(conv4_x if i==1 else conv5_x),
num_in=(num_in if i==1 else num_out),
num_mid=num_mid,
num_out=num_out,
name="L5_B%02d"%i,
first_block=(i==1),
num_group=group,
stride=((2,2) if (i==1) else (1,1)),
ratio=min(ratio,0.),
use_se=use_se)
# ---------
# output
output = BN_ACT(conv5_x, name='tail') # remove this line for BottleNeckV1
output = mx.sym.Cast(data=output, dtype=np.float32) if use_fp16 else output
return output