diff --git a/keras_vggface/models.py b/keras_vggface/models.py index 62804ad..7e384c1 100644 --- a/keras_vggface/models.py +++ b/keras_vggface/models.py @@ -339,6 +339,7 @@ def senet_conv_block(input_tensor, kernel_size, filters, bn_axis = 3 else: bn_axis = 1 + bn_eps = 0.0001 conv1_reduce_name = 'conv' + str(stage) + "_" + str(block) + "_1x1_reduce" conv1_increase_name = 'conv' + str(stage) + "_" + str( @@ -348,22 +349,22 @@ def senet_conv_block(input_tensor, kernel_size, filters, x = Conv2D(filters1, (1, 1), use_bias=bias, strides=strides, name=conv1_reduce_name)(input_tensor) - x = BatchNormalization(axis=bn_axis, name=conv1_reduce_name + "/bn")(x) + x = BatchNormalization(axis=bn_axis, epsilon=bn_eps, name=conv1_reduce_name + "/bn")(x) x = Activation('relu')(x) x = Conv2D(filters2, kernel_size, padding='same', use_bias=bias, name=conv3_name)(x) - x = BatchNormalization(axis=bn_axis, name=conv3_name + "/bn")(x) + x = BatchNormalization(axis=bn_axis, epsilon=bn_eps, name=conv3_name + "/bn")(x) x = Activation('relu')(x) x = Conv2D(filters3, (1, 1), name=conv1_increase_name, use_bias=bias)(x) - x = BatchNormalization(axis=bn_axis, name=conv1_increase_name + "/bn")(x) + x = BatchNormalization(axis=bn_axis, epsilon=bn_eps, name=conv1_increase_name + "/bn")(x) se = senet_se_block(x, stage=stage, block=block, bias=True) shortcut = Conv2D(filters3, (1, 1), use_bias=bias, strides=strides, name=conv1_proj_name)(input_tensor) - shortcut = BatchNormalization(axis=bn_axis, + shortcut = BatchNormalization(axis=bn_axis, epsilon=bn_eps, name=conv1_proj_name + "/bn")(shortcut) m = layers.add([se, shortcut]) @@ -378,6 +379,7 @@ def senet_identity_block(input_tensor, kernel_size, bn_axis = 3 else: bn_axis = 1 + bn_eps = 0.0001 conv1_reduce_name = 'conv' + str(stage) + "_" + str(block) + "_1x1_reduce" conv1_increase_name = 'conv' + str(stage) + "_" + str( @@ -386,20 +388,20 @@ def senet_identity_block(input_tensor, kernel_size, x = Conv2D(filters1, (1, 1), use_bias=bias, name=conv1_reduce_name)(input_tensor) - x = BatchNormalization(axis=bn_axis, name=conv1_reduce_name + "/bn")(x) + x = BatchNormalization(axis=bn_axis, epsilon=bn_eps, name=conv1_reduce_name + "/bn")(x) x = Activation('relu')(x) x = Conv2D(filters2, kernel_size, padding='same', use_bias=bias, name=conv3_name)(x) - x = BatchNormalization(axis=bn_axis, name=conv3_name + "/bn")(x) + x = BatchNormalization(axis=bn_axis, epsilon=bn_eps, name=conv3_name + "/bn")(x) x = Activation('relu')(x) x = Conv2D(filters3, (1, 1), name=conv1_increase_name, use_bias=bias)(x) - x = BatchNormalization(axis=bn_axis, name=conv1_increase_name + "/bn")(x) + x = BatchNormalization(axis=bn_axis, epsilon=bn_eps, name=conv1_increase_name + "/bn")(x) se = senet_se_block(x, stage=stage, block=block, bias=True) - m = layers.add([x, se]) + m = layers.add([se, input_tensor]) m = Activation('relu')(m) return m @@ -427,11 +429,12 @@ def SENET50(include_top=True, weights='vggface', bn_axis = 3 else: bn_axis = 1 + bn_eps = 0.0001 x = Conv2D( 64, (7, 7), use_bias=False, strides=(2, 2), padding='same', name='conv1/7x7_s2')(img_input) - x = BatchNormalization(axis=bn_axis, name='conv1/7x7_s2/bn')(x) + x = BatchNormalization(axis=bn_axis, epsilon=bn_eps, name='conv1/7x7_s2/bn')(x) x = Activation('relu')(x) x = MaxPooling2D((3, 3), strides=(2, 2))(x)