fix +
parent
2e2c01c203
commit
442d8410d3
|
@ -119,19 +119,19 @@ class GhostNet():
|
||||||
param_attr=ParamAttr(
|
param_attr=ParamAttr(
|
||||||
initializer=fluid.initializer.MSRA(), name=name + "_weights"),
|
initializer=fluid.initializer.MSRA(), name=name + "_weights"),
|
||||||
bias_attr=False)
|
bias_attr=False)
|
||||||
bn_name = name+"_bn"
|
bn_name = name + "_bn"
|
||||||
x = fluid.layers.batch_norm(input=x,
|
x = fluid.layers.batch_norm(input=x,
|
||||||
act=act,
|
act=act,
|
||||||
param_attr=ParamAttr(
|
param_attr=ParamAttr(
|
||||||
name=bn_name+"_scale",
|
name=bn_name + "_scale",
|
||||||
regularizer=fluid.regularizer.L2DecayRegularizer(
|
regularizer=fluid.regularizer.L2DecayRegularizer(
|
||||||
regularization_coeff=0.0)),
|
regularization_coeff=0.0)),
|
||||||
bias_attr=ParamAttr(
|
bias_attr=ParamAttr(
|
||||||
name=bn_name+"_offset",
|
name=bn_name + "_offset",
|
||||||
regularizer=fluid.regularizer.L2DecayRegularizer(
|
regularizer=fluid.regularizer.L2DecayRegularizer(
|
||||||
regularization_coeff=0.0)),
|
regularization_coeff=0.0)),
|
||||||
moving_mean_name=bn_name+"_mean",
|
moving_mean_name=bn_name + "_mean",
|
||||||
moving_variance_name=name+"_variance")
|
moving_variance_name=name + "_variance")
|
||||||
return x
|
return x
|
||||||
|
|
||||||
def se_block(self, input, num_channels, reduction_ratio=4, name=None):
|
def se_block(self, input, num_channels, reduction_ratio=4, name=None):
|
||||||
|
@ -147,12 +147,13 @@ class GhostNet():
|
||||||
stdv = 1.0 / math.sqrt(squeeze.shape[1] * 1.0)
|
stdv = 1.0 / math.sqrt(squeeze.shape[1] * 1.0)
|
||||||
excitation = fluid.layers.fc(input=squeeze,
|
excitation = fluid.layers.fc(input=squeeze,
|
||||||
size=num_channels,
|
size=num_channels,
|
||||||
act=None,
|
act="hard_sigmoid",
|
||||||
param_attr=fluid.param_attr.ParamAttr(
|
param_attr=fluid.param_attr.ParamAttr(
|
||||||
initializer=fluid.initializer.Uniform(-stdv, stdv),
|
initializer=fluid.initializer.Uniform(-stdv, stdv),
|
||||||
name=name + '_2_weights'),
|
name=name + '_2_weights'),
|
||||||
bias_attr=ParamAttr(name=name + '_2_offset'))
|
bias_attr=ParamAttr(name=name + '_2_offset'))
|
||||||
excitation = fluid.layers.clip(x=excitation, min=0, max=1)
|
#excitation = fluid.layers.clip(x=excitation, min=0, max=1)
|
||||||
|
print("using hardsigmoid")
|
||||||
se_scale = fluid.layers.elementwise_mul(x=input, y=excitation, axis=0)
|
se_scale = fluid.layers.elementwise_mul(x=input, y=excitation, axis=0)
|
||||||
return se_scale
|
return se_scale
|
||||||
|
|
||||||
|
@ -223,7 +224,7 @@ class GhostNet():
|
||||||
relu=False,
|
relu=False,
|
||||||
name=name + "_depthwise")
|
name=name + "_depthwise")
|
||||||
if use_se:
|
if use_se:
|
||||||
x = self.se_block(input=x, num_channels=hidden_dim, name=name+"_se")
|
x = self.se_block(input=x, num_channels=hidden_dim, name=name + "_se")
|
||||||
x = self.ghost_module(input=x,
|
x = self.ghost_module(input=x,
|
||||||
output=output,
|
output=output,
|
||||||
kernel_size=1,
|
kernel_size=1,
|
||||||
|
@ -264,3 +265,16 @@ def GhostNet_x1_3():
|
||||||
model = GhostNet(scale=1.3)
|
model = GhostNet(scale=1.3)
|
||||||
return model
|
return model
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
image = fluid.data(name='image', shape=[16, 3, 224, 224], dtype='float32')
|
||||||
|
|
||||||
|
model = GhostNet_x1_0()
|
||||||
|
out = model.net(input=image, class_dim=1000)
|
||||||
|
test_program = fluid.default_main_program().clone(for_test=True)
|
||||||
|
|
||||||
|
place = fluid.CPUPlace()
|
||||||
|
exe = fluid.Executor(place)
|
||||||
|
exe.run(fluid.default_startup_program())
|
||||||
|
|
||||||
|
#lltotal_flops_params, is_quantize = summary(test_program)
|
||||||
|
fluid.save(test_program, "ghostnet1_3")
|
Loading…
Reference in New Issue