From 75d426aac9ebfb7966771082ad05f34431cbbc20 Mon Sep 17 00:00:00 2001 From: Taro Ogura Date: Thu, 28 Mar 2019 19:05:56 +0900 Subject: [PATCH 1/2] specify epsilon of batch normalization --- keras_vggface/models.py | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/keras_vggface/models.py b/keras_vggface/models.py index 62804ad..ac66f6d 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,16 +388,16 @@ 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) @@ -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) From 7554ca254d100f975333b28e54582c398a2771c0 Mon Sep 17 00:00:00 2001 From: Taro Ogura Date: Thu, 28 Mar 2019 19:15:53 +0900 Subject: [PATCH 2/2] change addition target in identity block --- keras_vggface/models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keras_vggface/models.py b/keras_vggface/models.py index ac66f6d..7e384c1 100644 --- a/keras_vggface/models.py +++ b/keras_vggface/models.py @@ -401,7 +401,7 @@ def senet_identity_block(input_tensor, kernel_size, 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