Example #1
0
def transition_block(x,
                     stage,
                     nb_filter,
                     compression=1.0,
                     dropout_rate=None,
                     weight_decay=1E-4):
    ''' Apply BatchNorm, 1x1 Convolution, averagePooling, optional compression, dropout
        # Arguments
            x: input tensor
            stage: index for dense block
            nb_filter: number of filters
            compression: calculated as 1 - reduction. Reduces the number of feature maps in the transition block.
            dropout_rate: dropout rate
            weight_decay: weight decay factor
    '''

    eps = 1.1e-5
    conv_name_base = 'conv' + str(stage) + '_blk'
    relu_name_base = 'relu' + str(stage) + '_blk'
    pool_name_base = 'pool' + str(stage)

    x = BatchNormalization(epsilon=eps,
                           axis=concat_axis,
                           name=conv_name_base + '_bn')(x)
    x = Scale(axis=concat_axis, name=conv_name_base + '_scale')(x)
    x = Activation('relu', name=relu_name_base)(x)
    x = Convolution2D(int(nb_filter * compression),
                      1,
                      1,
                      name=conv_name_base,
                      bias=False)(x)

    if dropout_rate:
        x = Dropout(dropout_rate)(x)

    x = AveragePooling2D((2, 2), strides=(2, 2), name=pool_name_base)(x)

    return x
def original_squeezenet(input_shape, output_size):

    img_input = Input(shape=input_shape, name='Input_New')
    x = Conv2D(64, (3, 3), strides=(2, 2), padding='valid',
               name='conv1')(img_input)
    x = Activation('relu', name='relu_conv1')(x)
    x = MaxPooling2D(pool_size=(3, 3), strides=(2, 2), name='pool1')(x)

    x = fire_module(x, fire_id=2, squeeze=16, expand=64)
    x = fire_module(x, fire_id=3, squeeze=16, expand=64)
    x = MaxPooling2D(pool_size=(3, 3), strides=(2, 2), name='pool3')(x)

    x = fire_module(x, fire_id=4, squeeze=32, expand=128)
    x = fire_module(x, fire_id=5, squeeze=32, expand=128)
    x = MaxPooling2D(pool_size=(3, 3), strides=(2, 2), name='pool5')(x)

    x = fire_module(x, fire_id=6, squeeze=48, expand=192)
    x = fire_module(x, fire_id=7, squeeze=48, expand=192)
    x = fire_module(x, fire_id=8, squeeze=64, expand=256)
    x = fire_module(x, fire_id=9, squeeze=64, expand=256)

    Dropout_10 = Dropout(name='Dropout_10', rate=0.5)(x)
    Convolution2D_41 = Convolution2D(name='Convolution2D_41',
                                     kernel_size=(1, 1),
                                     activation='linear',
                                     filters=1000)(Dropout_10)
    AveragePooling2D_1 = AveragePooling2D(name='AveragePooling2D_1',
                                          pool_size=(13, 13),
                                          strides=(1, 1))(Convolution2D_41)
    Flatten_1 = Flatten(name='Flatten_1')(AveragePooling2D_1)

    Dense_Output = Dense(name='Dense_Output',
                         units=output_size,
                         activation='softmax')(
                             Flatten_1)  # new layer; must be trained

    model = Model([img_input], [Dense_Output])
    return model
Example #3
0
def __transition_block(ip, nb_filter, compression=1.0, weight_decay=1e-4):
    ''' Apply BatchNorm, Relu 1x1, Conv2D, optional compression, dropout and Maxpooling2D
    Args:
        ip: keras tensor
        nb_filter: number of filters
        compression: calculated as 1 - reduction. Reduces the number of feature maps
                    in the transition block.
        dropout_rate: dropout rate
        weight_decay: weight decay factor
    Returns: keras tensor, after applying batch_norm, relu-conv, dropout, maxpool
    '''
    concat_axis = 1 if K.image_data_format() == 'channels_first' else -1

    x = BatchNormalization(axis=concat_axis, epsilon=1.1e-5)(ip)
    x = Activation('relu')(x)
    x = Conv2D(int(nb_filter * compression), (1, 1), kernel_initializer='he_normal', padding='same', use_bias=False,
               kernel_regularizer=l2(weight_decay))(x)
    x = AveragePooling2D((2, 2), strides=(2, 2))(x)

    # squeeze and excite block
    x = squeeze_excite_block(x)

    return x
Example #4
0
def transition(x, nb_filter, dropout_rate=None, weight_decay=1E-4):
    """Apply BatchNorm, Relu 1x1Conv2D, optional dropout and Maxpooling2D
    :param x: keras model
    :param nb_filter: int -- number of filters
    :param dropout_rate: int -- dropout rate
    :param weight_decay: int -- weight decay factor
    :returns: model
    :rtype: keras model, after applying batch_norm, relu-conv, dropout, maxpool
    """

    x = Activation('relu')(x)
    x = Convolution2D(nb_filter,
                      1,
                      1,
                      init="he_uniform",
                      border_mode="same",
                      bias=False,
                      W_regularizer=l2(weight_decay))(x)
    if dropout_rate:
        x = Dropout(dropout_rate)(x)
    x = AveragePooling2D((2, 2), strides=(2, 2))(x)

    return x
def inception_block_3a(X):
    X_3x3 = Conv2D(96, (1, 1), data_format='channels_first', name='inception_5a_3x3_conv1')(X)
    X_3x3 = BatchNormalization(axis=1, epsilon=0.00001, name='inception_5a_3x3_bn1')(X_3x3)
    X_3x3 = Activation('relu')(X_3x3)
    X_3x3 = ZeroPadding2D(padding=(1, 1), data_format='channels_first')(X_3x3)
    X_3x3 = Conv2D(384, (3, 3), data_format='channels_first', name='inception_5a_3x3_conv2')(X_3x3)
    X_3x3 = BatchNormalization(axis=1, epsilon=0.00001, name='inception_5a_3x3_bn2')(X_3x3)
    X_3x3 = Activation('relu')(X_3x3)

    
    X_pool = AveragePooling2D(pool_size=(3, 3), strides=(3, 3), data_format='channels_first')(X)
    X_pool = Conv2D(96, (1, 1), data_format='channels_first', name='inception_5a_pool_conv')(X_pool)
    X_pool = BatchNormalization(axis=1, epsilon=0.00001, name='inception_5a_pool_bn')(X_pool)
    X_pool = Activation('relu')(X_pool)
    X_pool = ZeroPadding2D(padding=(1, 1), data_format='channels_first')(X_pool)

    X_1x1 = Conv2D(256, (1, 1), data_format='channels_first', name='inception_5a_1x1_conv')(X)
    X_1x1 = BatchNormalization(axis=1, epsilon=0.00001, name='inception_5a_1x1_bn')(X_1x1)
    X_1x1 = Activation('relu')(X_1x1)

    inception = concatenate([X_3x3, X_pool, X_1x1], axis=1)

    return inception    
def inception_block_3a(X):
    X_3x3 = fr_utils.conv2d_bn(X,
                               layer='inception_5a_3x3',
                               cv1_out=96,
                               cv1_filter=(1, 1),
                               cv2_out=384,
                               cv2_filter=(3, 3),
                               cv2_strides=(1, 1),
                               padding=(1, 1))
    X_pool = AveragePooling2D(pool_size=(3, 3), strides=(3, 3), data_format='channels_first')(X)
    X_pool = fr_utils.conv2d_bn(X_pool,
                                layer='inception_5a_pool',
                                cv1_out=96,
                                cv1_filter=(1, 1),
                                padding=(1, 1))
    X_1x1 = fr_utils.conv2d_bn(X,
                               layer='inception_5a_1x1',
                               cv1_out=256,
                               cv1_filter=(1, 1))

    inception = concatenate([X_3x3, X_pool, X_1x1], axis=1)

    return inception
Example #7
0
def transition(x, nb_filter, dropout_rate=None, weight_decay=1E-4, compression_rate=0.5):
    """Apply BatchNorm, Relu 1x1Conv2D, optional dropout and Maxpooling2D
    :param x: keras model
    :param nb_filter: int -- number of filters
    :param dropout_rate: int -- dropout rate
    :param weight_decay: int -- weight decay factor
    :returns: model
    :rtype: keras model, after applying batch_norm, relu-conv, dropout, maxpool
    """
    nb_filter = int(nb_filter*compression_rate)
    x = BatchNormalization(gamma_regularizer=l2(weight_decay),
                           beta_regularizer=l2(weight_decay))(x)
    x = PReLU()(x)
    x = Conv2D(nb_filter, (1,1),
               kernel_initializer="he_uniform",
               padding="same",
               use_bias=False,
               kernel_regularizer=l2(weight_decay))(x)
    if dropout_rate:
        x = Dropout(dropout_rate)(x)
    x = AveragePooling2D()(x)

    return x, nb_filter
Example #8
0
def transition(ip, nb_filter, dropout_rate=None, weight_decay=1E-4):
    ''' Apply BatchNorm, Relu 1x1, Conv2D, optional dropout and Maxpooling2D

    Args:
        ip: keras tensor
        nb_filter: number of filters
        dropout_rate: dropout rate
        weight_decay: weight decay factor

    Returns: keras tensor, after applying batch_norm, relu-conv, dropout, maxpool

    '''

    x = BatchNormalization(mode=0, axis=concat_axis, gamma_regularizer=l2(weight_decay),
                           beta_regularizer=l2(weight_decay))(ip)
    x = Activation('relu')(x)
    x = Convolution2D(nb_filter, 1, 1, init="he_uniform", border_mode="same", bias=False,
                      W_regularizer=l2(weight_decay))(x)
    if dropout_rate:
        x = Dropout(dropout_rate)(x)
    x = AveragePooling2D((2, 2), strides=(2, 2))(x)

    return x
Example #9
0
def inception_B(X):
    if K.image_data_format() == 'channels_first':
        channel_axis = 1
    else:
        channel_axis = -1

    branch_0 = conv2d_bn(X, 384, 1, 1)

    branch_1 = conv2d_bn(X, 192, 1, 1)
    branch_1 = conv2d_bn(branch_1, 224, 1, 7)
    branch_1 = conv2d_bn(branch_1, 256, 7, 1)

    branch_2 = conv2d_bn(X, 192, 1, 1)
    branch_2 = conv2d_bn(branch_2, 192, 7, 1)
    branch_2 = conv2d_bn(branch_2, 224, 1, 7)
    branch_2 = conv2d_bn(branch_2, 224, 7, 1)
    branch_2 = conv2d_bn(branch_2, 256, 1, 7)

    branch_3 = AveragePooling2D((3, 3), strides=(1, 1), padding='same')(X)
    branch_3 = conv2d_bn(branch_3, 128, 1, 1)

    X = concatenate([branch_0, branch_1, branch_2, branch_3], axis=channel_axis)
    return X
def block_inception_a(input):
    if K.image_dim_ordering() == "th":
        channel_axis = 1
    else:
        channel_axis = -1

    branch_0 = conv2d_bn(input, 96, 1, 1)

    branch_1 = conv2d_bn(input, 64, 1, 1)
    branch_1 = conv2d_bn(branch_1, 96, 3, 3)

    branch_2 = conv2d_bn(input, 64, 1, 1)
    branch_2 = conv2d_bn(branch_2, 96, 3, 3)
    branch_2 = conv2d_bn(branch_2, 96, 3, 3)

    branch_3 = AveragePooling2D((3, 3), strides=(1, 1),
                                border_mode='same')(input)
    branch_3 = conv2d_bn(branch_3, 96, 1, 1)

    x = merge([branch_0, branch_1, branch_2, branch_3],
              mode='concat',
              concat_axis=channel_axis)
    return x
def inception_block_2a(X):
    if K.image_data_format() == 'channels_first':
        channel_axis = 1
    else:
        channel_axis = -1
    X_3x3 = conv2d_bn(X,
                      layer='inception_4a_3x3',
                      cv1_out=96,
                      cv1_filter=(1, 1),
                      cv2_out=192,
                      cv2_filter=(3, 3),
                      cv2_strides=(1, 1),
                      padding=(1, 1))
    X_5x5 = conv2d_bn(X,
                      layer='inception_4a_5x5',
                      cv1_out=32,
                      cv1_filter=(1, 1),
                      cv2_out=64,
                      cv2_filter=(5, 5),
                      cv2_strides=(1, 1),
                      padding=(2, 2))

    X_pool = AveragePooling2D(pool_size=(3, 3),
                              strides=(3, 3),
                              data_format='channels_first')(X)
    X_pool = conv2d_bn(X_pool,
                       layer='inception_4a_pool',
                       cv1_out=128,
                       cv1_filter=(1, 1),
                       padding=(2, 2))
    X_1x1 = conv2d_bn(X,
                      layer='inception_4a_1x1',
                      cv1_out=256,
                      cv1_filter=(1, 1))
    inception = Concatenate(axis=channel_axis)([X_3x3, X_5x5, X_pool, X_1x1])

    return inception
Example #12
0
def dense_cnn(input, nclass):
    _dropout_rate = 0.2
    _weight_decay = 1e-4

    _nb_filter = 32
    # conv 64 5*5 s=2
    x = Conv2D(_nb_filter, (5, 5), strides=(2, 2), kernel_initializer='he_normal', padding='same',
               use_bias=False, kernel_regularizer=l2(_weight_decay))(input)

    # 64 + 8 * 8 = 128
    x, _nb_filter = dense_block(x, 8, _nb_filter, 8, None, _weight_decay)
    # 128
    x, _nb_filter = transition_block(x, 64, _dropout_rate, 2, _weight_decay)

    # 128 + 8 * 8 = 192
    x, _nb_filter = dense_block(x, 8, _nb_filter, 8, None, _weight_decay)
    # 192 -> 128
    x, _nb_filter = transition_block(x, 64, _dropout_rate, 2, _weight_decay)

    # 128 + 8 * 8 = 192
    x, _nb_filter = dense_block(x, 8, _nb_filter, 8, None, _weight_decay)

    x = BatchNormalization(axis=-1, epsilon=1.1e-5)(x) #input 32 output 4*4*128
    x = Activation('relu')(x)
    x = AveragePooling2D((4, 1), strides=(4, 1))(x)

    x = Permute((2, 1, 3), name='permute')(x)

    # x = dense_blstm(x)  # gru

    x = TimeDistributed(Flatten(), name='flatten')(x)  # no-gru
    y_pred = Dense(nclass, name='out', activation='softmax')(x)

    # basemodel = Model(inputs=input, outputs=y_pred)
    # basemodel.summary()

    return y_pred
Example #13
0
def ResNet50(input_shape=(224, 224, 3)):

    X_input = Input(input_shape)

    X = ZeroPadding2D((3, 3))(X_input)

    X = Conv2D(64, (7, 7), strides=(2, 2), name='conv1', kernel_initializer=glorot_uniform(seed=0))(X)
    X = BatchNormalization(axis=3, name='bn_conv1')(X)
    X = Activation('relu')(X)
    X = MaxPooling2D((3, 3), strides=(2, 2))(X)

    X = convolutional_block(X, f=3, filters=[64, 64, 256], stage=2, block='a', s=1)
    X = identity_block(X, 3, [64, 64, 256], stage=2, block='b')
    X = identity_block(X, 3, [64, 64, 256], stage=2, block='c')


    X = convolutional_block(X, f=3, filters=[128, 128, 512], stage=3, block='a', s=2)
    X = identity_block(X, 3, [128, 128, 512], stage=3, block='b')
    X = identity_block(X, 3, [128, 128, 512], stage=3, block='c')
    X = identity_block(X, 3, [128, 128, 512], stage=3, block='d')

    X = convolutional_block(X, f=3, filters=[256, 256, 1024], stage=4, block='a', s=2)
    X = identity_block(X, 3, [256, 256, 1024], stage=4, block='b')
    X = identity_block(X, 3, [256, 256, 1024], stage=4, block='c')
    X = identity_block(X, 3, [256, 256, 1024], stage=4, block='d')
    X = identity_block(X, 3, [256, 256, 1024], stage=4, block='e')
    X = identity_block(X, 3, [256, 256, 1024], stage=4, block='f')

    X = X = convolutional_block(X, f=3, filters=[512, 512, 2048], stage=5, block='a', s=2)
    X = identity_block(X, 3, [512, 512, 2048], stage=5, block='b')
    X = identity_block(X, 3, [512, 512, 2048], stage=5, block='c')

    X = AveragePooling2D(pool_size=(2, 2), padding='same')(X)
    
    model = Model(inputs=X_input, outputs=X, name='ResNet50')

    return model
Example #14
0
def __transition_block(ip,
                       nb_filter,
                       compression=1.0,
                       dropout_rate=None,
                       weight_decay=1E-4):
    ''' Apply BatchNorm, Relu 1x1, Conv2D, optional compression, dropout and Maxpooling2D

    Args:
        ip: keras tensor
        nb_filter: number of filters
        compression: calculated as 1 - reduction. Reduces the number of feature maps
                    in the transition block.
        dropout_rate: dropout rate
        weight_decay: weight decay factor

    Returns: keras tensor, after applying batch_norm, relu-conv, dropout, maxpool
    '''

    concat_axis = 1 if K.image_dim_ordering() == "th" else -1

    x = BatchNormalization(mode=0,
                           axis=concat_axis,
                           gamma_regularizer=l2(weight_decay),
                           beta_regularizer=l2(weight_decay))(ip)
    x = Activation('relu')(x)
    x = Convolution2D(int(nb_filter * compression),
                      1,
                      1,
                      init="he_uniform",
                      border_mode="same",
                      bias=False,
                      W_regularizer=l2(weight_decay))(x)
    if dropout_rate:
        x = Dropout(dropout_rate)(x)
    x = AveragePooling2D((2, 2), strides=(2, 2))(x)

    return x
Example #15
0
def create_model(MAX_QRY_LENGTH = 50, MAX_DOC_LENGTH = 2900, NUM_OF_FEATS = 10, PSGS_SIZE = [(50, 1)], NUM_OF_FILTERS = 5, tau = 1):
	alpha_size = len(PSGS_SIZE)
	psgMat = Input(shape = (MAX_QRY_LENGTH, MAX_DOC_LENGTH, 1,), name="passage")
	homoMat = Input(shape = (NUM_OF_FEATS, ), name="h_feats")
	# Convolution2D, Meaning pooling and Max pooling.
	# Conv2D, Mean pooling, Max pooling
	M, K, r = [], [], []
	for idx, PSG_SIZE in enumerate(PSGS_SIZE):
		tau = PSG_SIZE[0] / 2
		pool_size = (MAX_QRY_LENGTH - PSG_SIZE[0]) / tau + 1
		# Convolution
		m_1 = Convolution2D(filters=NUM_OF_FILTERS, kernel_size=PSG_SIZE, strides=tau, padding='valid', name="pConv2D_" + str(idx))(psgMat)
		M.append(m_1)
		# Mean pooling
		k_1 = AveragePooling2D(pool_size=(pool_size, 1), strides=1, name="pAvePool_" + str(idx))(M[idx])
		K.append(k_1)
		# Max Pooling
		r_1 = GlobalMaxPooling2D(name="pMaxPool_" + str(idx))(K[idx])
		r.append(r_1)
	concat_r = concatenate(r)
	# Fusion Matrix and predict relevance
	# get h(q, d)
	# MLP(DENSE(len(r(q,d))))
	phi_h = Dense(alpha_size, activation="softmax", name="TrainMat")(homoMat)
	dot_prod = dot([concat_r, phi_h], axes = 1, name="rel_dot")
	# tanh(dot(r.transpose * h))
	pred = Activation("tanh", name="activation_tanh")(dot_prod)
	
	# We now have everything we need to define our model.
	model = Model(inputs = [psgMat, homoMat], outputs = pred)
	model.summary()
	'''
	from keras.utils import plot_model
	plot_model(model, to_file='model.png')
	'''
	return model
Example #16
0
def get(input_shape, num_classes, residual_unit_cls, units_per_block):
    """As described in [1]"""
    x = Input(shape=input_shape)
    conv1 = Conv2D(filters=64,
                   kernel_size=(7, 7),
                   strides=(2, 2),
                   padding='same',
                   kernel_initializer='glorot_normal')(x)
    norm1 = BatchNormalization(axis=3)(conv1)
    relu1 = Activation('relu')(norm1)
    current = MaxPooling2D(pool_size=(3, 3), strides=(2, 2),
                           padding='same')(relu1)
    filters = 64
    for i, units in enumerate(units_per_block):
        current = ResidualBlock(units,
                                filters,
                                residual_unit_cls,
                                is_first_block=(i == 0))(current)
        filters *= 2
    relu1 = Activation('relu')(current)
    avg_pool = AveragePooling2D(pool_size=(7, 7), strides=(1, 1))(relu1)
    flatten1 = Flatten()(avg_pool)
    dense = Dense(units=num_classes, activation='softmax')(flatten1)
    return Model(inputs=x, outputs=dense)
Example #17
0
    def __func25__(self, input_shape):
        from keras.layers import Input
        from keras.models import Model
        from keras.layers.pooling import AveragePooling2D
        from keras.layers.core import Lambda
        from keras import backend as K
        from Executer import utils

        inception_4e = Input(shape=input_shape)
        inception_5a_pool = Lambda(lambda x: x**2,
                                   name='power2_5a')(inception_4e)
        inception_5a_pool = AveragePooling2D(pool_size=(3, 3),
                                             strides=(3, 3))(inception_5a_pool)
        inception_5a_pool = Lambda(lambda x: x * 9,
                                   name='mult9_5a')(inception_5a_pool)
        inception_5a_pool = Lambda(lambda x: K.sqrt(x),
                                   name='sqrt_5a')(inception_5a_pool)
        inception_5a_pool = utils.conv2d_bn(inception_5a_pool,
                                            layer='inception_5a_pool',
                                            cv1_out=96,
                                            cv1_filter=(1, 1),
                                            padding=(1, 1))
        model = Model(inputs=inception_4e, outputs=inception_5a_pool)
        return model
Example #18
0
def model_cam(model_input,
			  gap_input,
			  gap_spacial_size,
			  num_classes,
			  cam_conv_layer_name):
	"""Build CAM model architecture
	
	# Arguments
		model_input: input tensor of CAM model
		gap_input: input tensor to cam gap layers
		gap_spacial_size: average pooling size
		cam_conv_layer_name: the name of new added conv layer

	"""
	x = Convolution2D(1024, 3, 3, 
					  activation='relu', 
					  border_mode='same',
					  name=cam_conv_layer_name)(gap_input)
	# Add GAP layer
	x = AveragePooling2D((gap_spacial_size, gap_spacial_size))(x)
	x = Flatten()(x)
	predictions = Dense(num_classes, activation='softmax')(x)
	model = Model(input=model_input, output=predictions)
	return model
Example #19
0
def inception_block_2a(X):
    X_3x3 = fr_utils.conv2d_bn(X,
                           layer='inception_4a_3x3',
                           cv1_out=96,
                           cv1_filter=(1, 1),
                           cv2_out=192,
                           cv2_filter=(3, 3),
                           cv2_strides=(1, 1),
                           padding=(1, 1))
    X_5x5 = fr_utils.conv2d_bn(X,
                           layer='inception_4a_5x5',
                           cv1_out=32,
                           cv1_filter=(1, 1),
                           cv2_out=64,
                           cv2_filter=(5, 5),
                           cv2_strides=(1, 1),
                           padding=(2, 2))

    # X_pool = AveragePooling2D(pool_size=(3, 3), strides=(3, 3), data_format='channels_first')(X)
    X_pool = AveragePooling2D(pool_size=(3, 3), strides=(1, 1),padding='same', data_format='channels_first')(X)
    X_pool = fr_utils.conv2d_bn(X_pool,
                           layer='inception_4a_pool',
                           cv1_out=128,
                           cv1_filter=(1, 1))
    # X_pool = fr_utils.conv2d_bn(X_pool,
    #                        layer='inception_4a_pool',
    #                        cv1_out=128,
    #                        cv1_filter=(1, 1),
    #                        padding=(2, 2))
    X_1x1 = fr_utils.conv2d_bn(X,
                           layer='inception_4a_1x1',
                           cv1_out=256,
                           cv1_filter=(1, 1))
    inception = concatenate([X_3x3, X_5x5, X_pool, X_1x1], axis=1)

    return inception
Example #20
0
inception_3b_3x3 = Activation('relu')(inception_3b_3x3)

inception_3b_5x5 = Conv2D(32, (1, 1),
                          name='inception_3b_5x5_conv1')(inception_3a)
inception_3b_5x5 = BatchNormalization(
    axis=3, epsilon=0.00001, name='inception_3b_5x5_bn1')(inception_3b_5x5)
inception_3b_5x5 = Activation('relu')(inception_3b_5x5)
inception_3b_5x5 = ZeroPadding2D(padding=(2, 2))(inception_3b_5x5)
inception_3b_5x5 = Conv2D(64, (5, 5),
                          name='inception_3b_5x5_conv2')(inception_3b_5x5)
inception_3b_5x5 = BatchNormalization(
    axis=3, epsilon=0.00001, name='inception_3b_5x5_bn2')(inception_3b_5x5)
inception_3b_5x5 = Activation('relu')(inception_3b_5x5)

inception_3b_pool = Lambda(lambda x: x**2, name='power2_3b')(inception_3a)
inception_3b_pool = AveragePooling2D(pool_size=(3, 3),
                                     strides=(3, 3))(inception_3b_pool)
inception_3b_pool = Lambda(lambda x: x * 9, name='mult9_3b')(inception_3b_pool)
inception_3b_pool = Lambda(lambda x: K.sqrt(x),
                           name='sqrt_3b')(inception_3b_pool)
inception_3b_pool = Conv2D(64, (1, 1),
                           name='inception_3b_pool_conv')(inception_3b_pool)
inception_3b_pool = BatchNormalization(
    axis=3, epsilon=0.00001, name='inception_3b_pool_bn')(inception_3b_pool)
inception_3b_pool = Activation('relu')(inception_3b_pool)
inception_3b_pool = ZeroPadding2D(padding=(4, 4))(inception_3b_pool)

inception_3b_1x1 = Conv2D(64, (1, 1),
                          name='inception_3b_1x1_conv')(inception_3a)
inception_3b_1x1 = BatchNormalization(
    axis=3, epsilon=0.00001, name='inception_3b_1x1_bn')(inception_3b_1x1)
inception_3b_1x1 = Activation('relu')(inception_3b_1x1)
Example #21
0
def builtModel():
    myInput = Input(shape=(96, 96, 3))

    x = ZeroPadding2D(padding=(3, 3), input_shape=(96, 96, 3))(myInput)
    x = Conv2D(64, (7, 7), strides=(2, 2), name='conv1')(x)
    x = BatchNormalization(axis=3, epsilon=0.00001, name='bn1')(x)
    x = Activation('relu')(x)
    x = ZeroPadding2D(padding=(1, 1))(x)
    x = MaxPooling2D(pool_size=3, strides=2)(x)
    x = Lambda(lambda x: tf.nn.lrn(x, alpha=1e-4, beta=0.75), name='lrn_1')(x)
    x = Conv2D(64, (1, 1), name='conv2')(x)
    x = BatchNormalization(axis=3, epsilon=0.00001, name='bn2')(x)
    x = Activation('relu')(x)
    x = ZeroPadding2D(padding=(1, 1))(x)
    x = Conv2D(192, (3, 3), name='conv3')(x)
    x = BatchNormalization(axis=3, epsilon=0.00001, name='bn3')(x)
    x = Activation('relu')(x)
    Lambda(lambda x: tf.nn.lrn(x, alpha=1e-4, beta=0.75), name='lrn_2')(x)
    x = ZeroPadding2D(padding=(1, 1))(x)
    x = MaxPooling2D(pool_size=3, strides=2)(x)

    # Inception3a
    inception_3a_3x3 = Conv2D(96, (1, 1), name='inception_3a_3x3_conv1')(x)
    inception_3a_3x3 = BatchNormalization(
        axis=3, epsilon=0.00001, name='inception_3a_3x3_bn1')(inception_3a_3x3)
    inception_3a_3x3 = Activation('relu')(inception_3a_3x3)
    inception_3a_3x3 = ZeroPadding2D(padding=(1, 1))(inception_3a_3x3)
    inception_3a_3x3 = Conv2D(128, (3, 3),
                              name='inception_3a_3x3_conv2')(inception_3a_3x3)
    inception_3a_3x3 = BatchNormalization(
        axis=3, epsilon=0.00001, name='inception_3a_3x3_bn2')(inception_3a_3x3)
    inception_3a_3x3 = Activation('relu')(inception_3a_3x3)

    inception_3a_5x5 = Conv2D(16, (1, 1), name='inception_3a_5x5_conv1')(x)
    inception_3a_5x5 = BatchNormalization(
        axis=3, epsilon=0.00001, name='inception_3a_5x5_bn1')(inception_3a_5x5)
    inception_3a_5x5 = Activation('relu')(inception_3a_5x5)
    inception_3a_5x5 = ZeroPadding2D(padding=(2, 2))(inception_3a_5x5)
    inception_3a_5x5 = Conv2D(32, (5, 5),
                              name='inception_3a_5x5_conv2')(inception_3a_5x5)
    inception_3a_5x5 = BatchNormalization(
        axis=3, epsilon=0.00001, name='inception_3a_5x5_bn2')(inception_3a_5x5)
    inception_3a_5x5 = Activation('relu')(inception_3a_5x5)

    inception_3a_pool = MaxPooling2D(pool_size=3, strides=2)(x)
    inception_3a_pool = Conv2D(
        32, (1, 1), name='inception_3a_pool_conv')(inception_3a_pool)
    inception_3a_pool = BatchNormalization(
        axis=3, epsilon=0.00001,
        name='inception_3a_pool_bn')(inception_3a_pool)
    inception_3a_pool = Activation('relu')(inception_3a_pool)
    inception_3a_pool = ZeroPadding2D(padding=((3, 4), (3,
                                                        4)))(inception_3a_pool)

    inception_3a_1x1 = Conv2D(64, (1, 1), name='inception_3a_1x1_conv')(x)
    inception_3a_1x1 = BatchNormalization(
        axis=3, epsilon=0.00001, name='inception_3a_1x1_bn')(inception_3a_1x1)
    inception_3a_1x1 = Activation('relu')(inception_3a_1x1)

    inception_3a = concatenate([
        inception_3a_3x3, inception_3a_5x5, inception_3a_pool, inception_3a_1x1
    ],
                               axis=3)

    # Inception3b
    inception_3b_3x3 = Conv2D(96, (1, 1),
                              name='inception_3b_3x3_conv1')(inception_3a)
    inception_3b_3x3 = BatchNormalization(
        axis=3, epsilon=0.00001, name='inception_3b_3x3_bn1')(inception_3b_3x3)
    inception_3b_3x3 = Activation('relu')(inception_3b_3x3)
    inception_3b_3x3 = ZeroPadding2D(padding=(1, 1))(inception_3b_3x3)
    inception_3b_3x3 = Conv2D(128, (3, 3),
                              name='inception_3b_3x3_conv2')(inception_3b_3x3)
    inception_3b_3x3 = BatchNormalization(
        axis=3, epsilon=0.00001, name='inception_3b_3x3_bn2')(inception_3b_3x3)
    inception_3b_3x3 = Activation('relu')(inception_3b_3x3)

    inception_3b_5x5 = Conv2D(32, (1, 1),
                              name='inception_3b_5x5_conv1')(inception_3a)
    inception_3b_5x5 = BatchNormalization(
        axis=3, epsilon=0.00001, name='inception_3b_5x5_bn1')(inception_3b_5x5)
    inception_3b_5x5 = Activation('relu')(inception_3b_5x5)
    inception_3b_5x5 = ZeroPadding2D(padding=(2, 2))(inception_3b_5x5)
    inception_3b_5x5 = Conv2D(64, (5, 5),
                              name='inception_3b_5x5_conv2')(inception_3b_5x5)
    inception_3b_5x5 = BatchNormalization(
        axis=3, epsilon=0.00001, name='inception_3b_5x5_bn2')(inception_3b_5x5)
    inception_3b_5x5 = Activation('relu')(inception_3b_5x5)

    inception_3b_pool = Lambda(lambda x: x**2, name='power2_3b')(inception_3a)
    inception_3b_pool = AveragePooling2D(pool_size=(3, 3),
                                         strides=(3, 3))(inception_3b_pool)
    inception_3b_pool = Lambda(lambda x: x * 9,
                               name='mult9_3b')(inception_3b_pool)
    inception_3b_pool = Lambda(lambda x: K.sqrt(x),
                               name='sqrt_3b')(inception_3b_pool)
    inception_3b_pool = Conv2D(
        64, (1, 1), name='inception_3b_pool_conv')(inception_3b_pool)
    inception_3b_pool = BatchNormalization(
        axis=3, epsilon=0.00001,
        name='inception_3b_pool_bn')(inception_3b_pool)
    inception_3b_pool = Activation('relu')(inception_3b_pool)
    inception_3b_pool = ZeroPadding2D(padding=(4, 4))(inception_3b_pool)

    inception_3b_1x1 = Conv2D(64, (1, 1),
                              name='inception_3b_1x1_conv')(inception_3a)
    inception_3b_1x1 = BatchNormalization(
        axis=3, epsilon=0.00001, name='inception_3b_1x1_bn')(inception_3b_1x1)
    inception_3b_1x1 = Activation('relu')(inception_3b_1x1)

    inception_3b = concatenate([
        inception_3b_3x3, inception_3b_5x5, inception_3b_pool, inception_3b_1x1
    ],
                               axis=3)

    # Inception3c
    inception_3c_3x3 = Conv2D(128, (1, 1),
                              strides=(1, 1),
                              name='inception_3c_3x3_conv1')(inception_3b)
    inception_3c_3x3 = BatchNormalization(
        axis=3, epsilon=0.00001, name='inception_3c_3x3_bn1')(inception_3c_3x3)
    inception_3c_3x3 = Activation('relu')(inception_3c_3x3)
    inception_3c_3x3 = ZeroPadding2D(padding=(1, 1))(inception_3c_3x3)
    inception_3c_3x3 = Conv2D(256, (3, 3),
                              strides=(2, 2),
                              name='inception_3c_3x3_conv' +
                              '2')(inception_3c_3x3)
    inception_3c_3x3 = BatchNormalization(axis=3,
                                          epsilon=0.00001,
                                          name='inception_3c_3x3_bn' +
                                          '2')(inception_3c_3x3)
    inception_3c_3x3 = Activation('relu')(inception_3c_3x3)

    inception_3c_5x5 = Conv2D(32, (1, 1),
                              strides=(1, 1),
                              name='inception_3c_5x5_conv1')(inception_3b)
    inception_3c_5x5 = BatchNormalization(
        axis=3, epsilon=0.00001, name='inception_3c_5x5_bn1')(inception_3c_5x5)
    inception_3c_5x5 = Activation('relu')(inception_3c_5x5)
    inception_3c_5x5 = ZeroPadding2D(padding=(2, 2))(inception_3c_5x5)
    inception_3c_5x5 = Conv2D(64, (5, 5),
                              strides=(2, 2),
                              name='inception_3c_5x5_conv' +
                              '2')(inception_3c_5x5)
    inception_3c_5x5 = BatchNormalization(axis=3,
                                          epsilon=0.00001,
                                          name='inception_3c_5x5_bn' +
                                          '2')(inception_3c_5x5)
    inception_3c_5x5 = Activation('relu')(inception_3c_5x5)

    inception_3c_pool = MaxPooling2D(pool_size=3, strides=2)(inception_3b)
    inception_3c_pool = ZeroPadding2D(padding=((0, 1), (0,
                                                        1)))(inception_3c_pool)

    inception_3c = concatenate(
        [inception_3c_3x3, inception_3c_5x5, inception_3c_pool], axis=3)

    #inception 4a
    inception_4a_3x3 = Conv2D(96, (1, 1),
                              strides=(1, 1),
                              name='inception_4a_3x3_conv' + '1')(inception_3c)
    inception_4a_3x3 = BatchNormalization(axis=3,
                                          epsilon=0.00001,
                                          name='inception_4a_3x3_bn' +
                                          '1')(inception_4a_3x3)
    inception_4a_3x3 = Activation('relu')(inception_4a_3x3)
    inception_4a_3x3 = ZeroPadding2D(padding=(1, 1))(inception_4a_3x3)
    inception_4a_3x3 = Conv2D(192, (3, 3),
                              strides=(1, 1),
                              name='inception_4a_3x3_conv' +
                              '2')(inception_4a_3x3)
    inception_4a_3x3 = BatchNormalization(axis=3,
                                          epsilon=0.00001,
                                          name='inception_4a_3x3_bn' +
                                          '2')(inception_4a_3x3)
    inception_4a_3x3 = Activation('relu')(inception_4a_3x3)

    inception_4a_5x5 = Conv2D(32, (1, 1),
                              strides=(1, 1),
                              name='inception_4a_5x5_conv1')(inception_3c)
    inception_4a_5x5 = BatchNormalization(
        axis=3, epsilon=0.00001, name='inception_4a_5x5_bn1')(inception_4a_5x5)
    inception_4a_5x5 = Activation('relu')(inception_4a_5x5)
    inception_4a_5x5 = ZeroPadding2D(padding=(2, 2))(inception_4a_5x5)
    inception_4a_5x5 = Conv2D(64, (5, 5),
                              strides=(1, 1),
                              name='inception_4a_5x5_conv' +
                              '2')(inception_4a_5x5)
    inception_4a_5x5 = BatchNormalization(axis=3,
                                          epsilon=0.00001,
                                          name='inception_4a_5x5_bn' +
                                          '2')(inception_4a_5x5)
    inception_4a_5x5 = Activation('relu')(inception_4a_5x5)

    inception_4a_pool = Lambda(lambda x: x**2, name='power2_4a')(inception_3c)
    inception_4a_pool = AveragePooling2D(pool_size=(3, 3),
                                         strides=(3, 3))(inception_4a_pool)
    inception_4a_pool = Lambda(lambda x: x * 9,
                               name='mult9_4a')(inception_4a_pool)
    inception_4a_pool = Lambda(lambda x: K.sqrt(x),
                               name='sqrt_4a')(inception_4a_pool)

    inception_4a_pool = Conv2D(128, (1, 1),
                               strides=(1, 1),
                               name='inception_4a_pool_conv' +
                               '')(inception_4a_pool)
    inception_4a_pool = BatchNormalization(axis=3,
                                           epsilon=0.00001,
                                           name='inception_4a_pool_bn' +
                                           '')(inception_4a_pool)
    inception_4a_pool = Activation('relu')(inception_4a_pool)
    inception_4a_pool = ZeroPadding2D(padding=(2, 2))(inception_4a_pool)

    inception_4a_1x1 = Conv2D(256, (1, 1),
                              strides=(1, 1),
                              name='inception_4a_1x1_conv' + '')(inception_3c)
    inception_4a_1x1 = BatchNormalization(axis=3,
                                          epsilon=0.00001,
                                          name='inception_4a_1x1_bn' +
                                          '')(inception_4a_1x1)
    inception_4a_1x1 = Activation('relu')(inception_4a_1x1)

    inception_4a = concatenate([
        inception_4a_3x3, inception_4a_5x5, inception_4a_pool, inception_4a_1x1
    ],
                               axis=3)

    #inception4e
    inception_4e_3x3 = Conv2D(160, (1, 1),
                              strides=(1, 1),
                              name='inception_4e_3x3_conv' + '1')(inception_4a)
    inception_4e_3x3 = BatchNormalization(axis=3,
                                          epsilon=0.00001,
                                          name='inception_4e_3x3_bn' +
                                          '1')(inception_4e_3x3)
    inception_4e_3x3 = Activation('relu')(inception_4e_3x3)
    inception_4e_3x3 = ZeroPadding2D(padding=(1, 1))(inception_4e_3x3)
    inception_4e_3x3 = Conv2D(256, (3, 3),
                              strides=(2, 2),
                              name='inception_4e_3x3_conv' +
                              '2')(inception_4e_3x3)
    inception_4e_3x3 = BatchNormalization(axis=3,
                                          epsilon=0.00001,
                                          name='inception_4e_3x3_bn' +
                                          '2')(inception_4e_3x3)
    inception_4e_3x3 = Activation('relu')(inception_4e_3x3)

    inception_4e_5x5 = Conv2D(64, (1, 1),
                              strides=(1, 1),
                              name='inception_4e_5x5_conv' + '1')(inception_4a)
    inception_4e_5x5 = BatchNormalization(axis=3,
                                          epsilon=0.00001,
                                          name='inception_4e_5x5_bn' +
                                          '1')(inception_4e_5x5)
    inception_4e_5x5 = Activation('relu')(inception_4e_5x5)
    inception_4e_5x5 = ZeroPadding2D(padding=(2, 2))(inception_4e_5x5)
    inception_4e_5x5 = Conv2D(128, (5, 5),
                              strides=(2, 2),
                              name='inception_4e_5x5_conv' +
                              '2')(inception_4e_5x5)
    inception_4e_5x5 = BatchNormalization(axis=3,
                                          epsilon=0.00001,
                                          name='inception_4e_5x5_bn' +
                                          '2')(inception_4e_5x5)
    inception_4e_5x5 = Activation('relu')(inception_4e_5x5)

    inception_4e_pool = MaxPooling2D(pool_size=3, strides=2)(inception_4a)
    inception_4e_pool = ZeroPadding2D(padding=((0, 1), (0,
                                                        1)))(inception_4e_pool)

    inception_4e = concatenate(
        [inception_4e_3x3, inception_4e_5x5, inception_4e_pool], axis=3)

    #inception5a
    inception_5a_3x3 = Conv2D(96, (1, 1),
                              strides=(1, 1),
                              name='inception_5a_3x3_conv' + '1')(inception_4e)
    inception_5a_3x3 = BatchNormalization(axis=3,
                                          epsilon=0.00001,
                                          name='inception_5a_3x3_bn' +
                                          '1')(inception_5a_3x3)
    inception_5a_3x3 = Activation('relu')(inception_5a_3x3)
    inception_5a_3x3 = ZeroPadding2D(padding=(1, 1))(inception_5a_3x3)
    inception_5a_3x3 = Conv2D(384, (3, 3),
                              strides=(1, 1),
                              name='inception_5a_3x3_conv' +
                              '2')(inception_5a_3x3)
    inception_5a_3x3 = BatchNormalization(axis=3,
                                          epsilon=0.00001,
                                          name='inception_5a_3x3_bn' +
                                          '2')(inception_5a_3x3)
    inception_5a_3x3 = Activation('relu')(inception_5a_3x3)

    inception_5a_pool = Lambda(lambda x: x**2, name='power2_5a')(inception_4e)
    inception_5a_pool = AveragePooling2D(pool_size=(3, 3),
                                         strides=(3, 3))(inception_5a_pool)
    inception_5a_pool = Lambda(lambda x: x * 9,
                               name='mult9_5a')(inception_5a_pool)
    inception_5a_pool = Lambda(lambda x: K.sqrt(x),
                               name='sqrt_5a')(inception_5a_pool)

    inception_5a_pool = Conv2D(96, (1, 1),
                               strides=(1, 1),
                               name='inception_5a_pool_conv' +
                               '')(inception_5a_pool)
    inception_5a_pool = BatchNormalization(axis=3,
                                           epsilon=0.00001,
                                           name='inception_5a_pool_bn' +
                                           '')(inception_5a_pool)
    inception_5a_pool = Activation('relu')(inception_5a_pool)
    inception_5a_pool = ZeroPadding2D(padding=(1, 1))(inception_5a_pool)

    inception_5a_1x1 = Conv2D(256, (1, 1),
                              strides=(1, 1),
                              name='inception_5a_1x1_conv' + '')(inception_4e)
    inception_5a_1x1 = BatchNormalization(axis=3,
                                          epsilon=0.00001,
                                          name='inception_5a_1x1_bn' +
                                          '')(inception_5a_1x1)
    inception_5a_1x1 = Activation('relu')(inception_5a_1x1)

    inception_5a = concatenate(
        [inception_5a_3x3, inception_5a_pool, inception_5a_1x1], axis=3)

    #inception_5b
    inception_5b_3x3 = Conv2D(96, (1, 1),
                              strides=(1, 1),
                              name='inception_5b_3x3_conv' + '1')(inception_5a)
    inception_5b_3x3 = BatchNormalization(axis=3,
                                          epsilon=0.00001,
                                          name='inception_5b_3x3_bn' +
                                          '1')(inception_5b_3x3)
    inception_5b_3x3 = Activation('relu')(inception_5b_3x3)
    inception_5b_3x3 = ZeroPadding2D(padding=(1, 1))(inception_5b_3x3)
    inception_5b_3x3 = Conv2D(384, (3, 3),
                              strides=(1, 1),
                              name='inception_5b_3x3_conv' +
                              '2')(inception_5b_3x3)
    inception_5b_3x3 = BatchNormalization(axis=3,
                                          epsilon=0.00001,
                                          name='inception_5b_3x3_bn' +
                                          '2')(inception_5b_3x3)
    inception_5b_3x3 = Activation('relu')(inception_5b_3x3)

    inception_5b_pool = MaxPooling2D(pool_size=3, strides=2)(inception_5a)

    inception_5b_pool = Conv2D(96, (1, 1),
                               strides=(1, 1),
                               name='inception_5b_pool_conv' +
                               '')(inception_5b_pool)
    inception_5b_pool = BatchNormalization(axis=3,
                                           epsilon=0.00001,
                                           name='inception_5b_pool_bn' +
                                           '')(inception_5b_pool)
    inception_5b_pool = Activation('relu')(inception_5b_pool)

    inception_5b_pool = ZeroPadding2D(padding=(1, 1))(inception_5b_pool)

    inception_5b_1x1 = Conv2D(256, (1, 1),
                              strides=(1, 1),
                              name='inception_5b_1x1_conv' + '')(inception_5a)
    inception_5b_1x1 = BatchNormalization(axis=3,
                                          epsilon=0.00001,
                                          name='inception_5b_1x1_bn' +
                                          '')(inception_5b_1x1)
    inception_5b_1x1 = Activation('relu')(inception_5b_1x1)

    inception_5b = concatenate(
        [inception_5b_3x3, inception_5b_pool, inception_5b_1x1], axis=3)

    av_pool = AveragePooling2D(pool_size=(3, 3), strides=(1, 1))(inception_5b)
    reshape_layer = Flatten()(av_pool)
    dense_layer = Dense(128, name='dense_layer')(reshape_layer)
    norm_layer = Lambda(lambda x: K.l2_normalize(x, axis=1),
                        name='norm_layer')(dense_layer)

    # Final Model
    model = Model(inputs=[myInput], outputs=norm_layer)
    return model
Example #22
0
def create_model():
    myInput = Input(shape=(150, 150, 3))

    x = ZeroPadding2D(padding=(3, 3), input_shape=(96, 96, 3))(myInput)
    x = Conv2D(64, (7, 7), strides=(2, 2), name='conv1')(x)
    x = BatchNormalization(axis=3, epsilon=0.00001, name='bn1')(x)
    x = Activation('relu')(x)
    x = ZeroPadding2D(padding=(1, 1))(x)
    x = MaxPooling2D(pool_size=3, strides=2)(x)
    x = Lambda(LRN2D, name='lrn_1')(x)
    x = Conv2D(64, (1, 1), name='conv2')(x)
    x = BatchNormalization(axis=3, epsilon=0.00001, name='bn2')(x)
    x = Activation('relu')(x)
    x = ZeroPadding2D(padding=(1, 1))(x)
    x = Conv2D(192, (3, 3), name='conv3')(x)
    x = BatchNormalization(axis=3, epsilon=0.00001, name='bn3')(x)
    x = Activation('relu')(x)
    x = Lambda(LRN2D, name='lrn_2')(x)
    x = ZeroPadding2D(padding=(1, 1))(x)
    x = MaxPooling2D(pool_size=3, strides=2)(x)

    # Inception3a
    inception_3a_3x3 = Conv2D(96, (1, 1), name='inception_3a_3x3_conv1')(x)
    inception_3a_3x3 = BatchNormalization(
        axis=3, epsilon=0.00001, name='inception_3a_3x3_bn1')(inception_3a_3x3)
    inception_3a_3x3 = Activation('relu')(inception_3a_3x3)
    inception_3a_3x3 = ZeroPadding2D(padding=(1, 1))(inception_3a_3x3)
    inception_3a_3x3 = Conv2D(128, (3, 3),
                              name='inception_3a_3x3_conv2')(inception_3a_3x3)
    inception_3a_3x3 = BatchNormalization(
        axis=3, epsilon=0.00001, name='inception_3a_3x3_bn2')(inception_3a_3x3)
    inception_3a_3x3 = Activation('relu')(inception_3a_3x3)

    inception_3a_5x5 = Conv2D(16, (1, 1), name='inception_3a_5x5_conv1')(x)
    inception_3a_5x5 = BatchNormalization(
        axis=3, epsilon=0.00001, name='inception_3a_5x5_bn1')(inception_3a_5x5)
    inception_3a_5x5 = Activation('relu')(inception_3a_5x5)
    inception_3a_5x5 = ZeroPadding2D(padding=(2, 2))(inception_3a_5x5)
    inception_3a_5x5 = Conv2D(32, (5, 5),
                              name='inception_3a_5x5_conv2')(inception_3a_5x5)
    inception_3a_5x5 = BatchNormalization(
        axis=3, epsilon=0.00001, name='inception_3a_5x5_bn2')(inception_3a_5x5)
    inception_3a_5x5 = Activation('relu')(inception_3a_5x5)

    inception_3a_pool = MaxPooling2D(pool_size=3, strides=2)(x)
    inception_3a_pool = Conv2D(
        32, (1, 1), name='inception_3a_pool_conv')(inception_3a_pool)
    inception_3a_pool = BatchNormalization(
        axis=3, epsilon=0.00001,
        name='inception_3a_pool_bn')(inception_3a_pool)
    inception_3a_pool = Activation('relu')(inception_3a_pool)
    inception_3a_pool = ZeroPadding2D(padding=((3, 4), (3,
                                                        4)))(inception_3a_pool)

    inception_3a_1x1 = Conv2D(64, (1, 1), name='inception_3a_1x1_conv')(x)
    inception_3a_1x1 = BatchNormalization(
        axis=3, epsilon=0.00001, name='inception_3a_1x1_bn')(inception_3a_1x1)
    inception_3a_1x1 = Activation('relu')(inception_3a_1x1)

    inception_3a = concatenate([
        inception_3a_3x3, inception_3a_5x5, inception_3a_pool, inception_3a_1x1
    ],
                               axis=3)

    # Inception3b
    inception_3b_3x3 = Conv2D(96, (1, 1),
                              name='inception_3b_3x3_conv1')(inception_3a)
    inception_3b_3x3 = BatchNormalization(
        axis=3, epsilon=0.00001, name='inception_3b_3x3_bn1')(inception_3b_3x3)
    inception_3b_3x3 = Activation('relu')(inception_3b_3x3)
    inception_3b_3x3 = ZeroPadding2D(padding=(1, 1))(inception_3b_3x3)
    inception_3b_3x3 = Conv2D(128, (3, 3),
                              name='inception_3b_3x3_conv2')(inception_3b_3x3)
    inception_3b_3x3 = BatchNormalization(
        axis=3, epsilon=0.00001, name='inception_3b_3x3_bn2')(inception_3b_3x3)
    inception_3b_3x3 = Activation('relu')(inception_3b_3x3)

    inception_3b_5x5 = Conv2D(32, (1, 1),
                              name='inception_3b_5x5_conv1')(inception_3a)
    inception_3b_5x5 = BatchNormalization(
        axis=3, epsilon=0.00001, name='inception_3b_5x5_bn1')(inception_3b_5x5)
    inception_3b_5x5 = Activation('relu')(inception_3b_5x5)
    inception_3b_5x5 = ZeroPadding2D(padding=(2, 2))(inception_3b_5x5)
    inception_3b_5x5 = Conv2D(64, (5, 5),
                              name='inception_3b_5x5_conv2')(inception_3b_5x5)
    inception_3b_5x5 = BatchNormalization(
        axis=3, epsilon=0.00001, name='inception_3b_5x5_bn2')(inception_3b_5x5)
    inception_3b_5x5 = Activation('relu')(inception_3b_5x5)

    inception_3b_pool = AveragePooling2D(pool_size=(3, 3),
                                         strides=(3, 3))(inception_3a)
    inception_3b_pool = Conv2D(
        64, (1, 1), name='inception_3b_pool_conv')(inception_3b_pool)
    inception_3b_pool = BatchNormalization(
        axis=3, epsilon=0.00001,
        name='inception_3b_pool_bn')(inception_3b_pool)
    inception_3b_pool = Activation('relu')(inception_3b_pool)
    inception_3b_pool = ZeroPadding2D(padding=(4, 4))(inception_3b_pool)

    inception_3b_1x1 = Conv2D(64, (1, 1),
                              name='inception_3b_1x1_conv')(inception_3a)
    inception_3b_1x1 = BatchNormalization(
        axis=3, epsilon=0.00001, name='inception_3b_1x1_bn')(inception_3b_1x1)
    inception_3b_1x1 = Activation('relu')(inception_3b_1x1)

    inception_3b = concatenate([
        inception_3b_3x3, inception_3b_5x5, inception_3b_pool, inception_3b_1x1
    ],
                               axis=3)

    # Inception3c
    inception_3c_3x3 = utils.conv2d_bn(inception_3b,
                                       layer='inception_3c_3x3',
                                       cv1_out=128,
                                       cv1_filter=(1, 1),
                                       cv2_out=256,
                                       cv2_filter=(3, 3),
                                       cv2_strides=(2, 2),
                                       padding=(1, 1))

    inception_3c_5x5 = utils.conv2d_bn(inception_3b,
                                       layer='inception_3c_5x5',
                                       cv1_out=32,
                                       cv1_filter=(1, 1),
                                       cv2_out=64,
                                       cv2_filter=(5, 5),
                                       cv2_strides=(2, 2),
                                       padding=(2, 2))

    inception_3c_pool = MaxPooling2D(pool_size=3, strides=2)(inception_3b)
    inception_3c_pool = ZeroPadding2D(padding=((0, 1), (0,
                                                        1)))(inception_3c_pool)

    inception_3c = concatenate(
        [inception_3c_3x3, inception_3c_5x5, inception_3c_pool], axis=3)

    #inception 4a
    inception_4a_3x3 = utils.conv2d_bn(inception_3c,
                                       layer='inception_4a_3x3',
                                       cv1_out=96,
                                       cv1_filter=(1, 1),
                                       cv2_out=192,
                                       cv2_filter=(3, 3),
                                       cv2_strides=(1, 1),
                                       padding=(1, 1))
    inception_4a_5x5 = utils.conv2d_bn(inception_3c,
                                       layer='inception_4a_5x5',
                                       cv1_out=32,
                                       cv1_filter=(1, 1),
                                       cv2_out=64,
                                       cv2_filter=(5, 5),
                                       cv2_strides=(1, 1),
                                       padding=(2, 2))

    inception_4a_pool = AveragePooling2D(pool_size=(3, 3),
                                         strides=(3, 3))(inception_3c)
    inception_4a_pool = utils.conv2d_bn(inception_4a_pool,
                                        layer='inception_4a_pool',
                                        cv1_out=128,
                                        cv1_filter=(1, 1),
                                        padding=(2, 2))
    inception_4a_1x1 = utils.conv2d_bn(inception_3c,
                                       layer='inception_4a_1x1',
                                       cv1_out=256,
                                       cv1_filter=(1, 1))
    inception_4a = concatenate([
        inception_4a_3x3, inception_4a_5x5, inception_4a_pool, inception_4a_1x1
    ],
                               axis=3)

    #inception4e
    inception_4e_3x3 = utils.conv2d_bn(inception_4a,
                                       layer='inception_4e_3x3',
                                       cv1_out=160,
                                       cv1_filter=(1, 1),
                                       cv2_out=256,
                                       cv2_filter=(3, 3),
                                       cv2_strides=(2, 2),
                                       padding=(1, 1))
    inception_4e_5x5 = utils.conv2d_bn(inception_4a,
                                       layer='inception_4e_5x5',
                                       cv1_out=64,
                                       cv1_filter=(1, 1),
                                       cv2_out=128,
                                       cv2_filter=(5, 5),
                                       cv2_strides=(2, 2),
                                       padding=(2, 2))
    inception_4e_pool = MaxPooling2D(pool_size=3, strides=2)(inception_4a)
    inception_4e_pool = ZeroPadding2D(padding=((0, 1), (0,
                                                        1)))(inception_4e_pool)

    inception_4e = concatenate(
        [inception_4e_3x3, inception_4e_5x5, inception_4e_pool], axis=3)

    #inception5a
    inception_5a_3x3 = utils.conv2d_bn(inception_4e,
                                       layer='inception_5a_3x3',
                                       cv1_out=96,
                                       cv1_filter=(1, 1),
                                       cv2_out=384,
                                       cv2_filter=(3, 3),
                                       cv2_strides=(1, 1),
                                       padding=(1, 1))

    inception_5a_pool = AveragePooling2D(pool_size=(3, 3),
                                         strides=(3, 3))(inception_4e)
    inception_5a_pool = utils.conv2d_bn(inception_5a_pool,
                                        layer='inception_5a_pool',
                                        cv1_out=96,
                                        cv1_filter=(1, 1),
                                        padding=(1, 1))
    inception_5a_1x1 = utils.conv2d_bn(inception_4e,
                                       layer='inception_5a_1x1',
                                       cv1_out=256,
                                       cv1_filter=(1, 1))

    inception_5a = concatenate(
        [inception_5a_3x3, inception_5a_pool, inception_5a_1x1], axis=3)

    #inception_5b
    inception_5b_3x3 = utils.conv2d_bn(inception_5a,
                                       layer='inception_5b_3x3',
                                       cv1_out=96,
                                       cv1_filter=(1, 1),
                                       cv2_out=384,
                                       cv2_filter=(3, 3),
                                       cv2_strides=(1, 1),
                                       padding=(1, 1))
    inception_5b_pool = MaxPooling2D(pool_size=3, strides=2)(inception_5a)
    inception_5b_pool = utils.conv2d_bn(inception_5b_pool,
                                        layer='inception_5b_pool',
                                        cv1_out=96,
                                        cv1_filter=(1, 1))
    inception_5b_pool = ZeroPadding2D(padding=(1, 1))(inception_5b_pool)

    inception_5b_1x1 = utils.conv2d_bn(inception_5a,
                                       layer='inception_5b_1x1',
                                       cv1_out=256,
                                       cv1_filter=(1, 1))
    inception_5b = concatenate(
        [inception_5b_3x3, inception_5b_pool, inception_5b_1x1], axis=3)

    av_pool = AveragePooling2D(pool_size=(3, 3), strides=(1, 1))(inception_5b)
    reshape_layer = Flatten()(av_pool)
    dense_layer = Dense(128, name='dense_layer')(reshape_layer)
    norm_layer = Lambda(lambda x: K.l2_normalize(x, axis=1),
                        name='norm_layer')(dense_layer)

    return Model(inputs=[myInput], outputs=norm_layer)
    #with tf.device('/device:GPU:3'):
    #x5 = ResidualR(256, 256, x4pool)   #12x12x256
    #x5 = ResidualR(256, 256, x5)
    #x5 = ResidualR(256, 256, x5)   #12x12x256
    x5 = Conv2D(512, (3, 3), padding='same',
                kernel_initializer='he_normal')(x4pool)
    x5 = BatchNormalization()(x5)
    x5 = layers.LeakyReLU()(x5)
    #x5pool = MaxPooling2D(pool_size=(2,2))(x5)

    #x6 = ResidualR(256, 512, x5pool)   #6x6x512
    #x6 = ResidualR(512, 512, x6)
    #x6 = ResidualR(512, 512, x6)   #6x6x512

    block_shape = K.int_shape(x5)
    xpool = AveragePooling2D(pool_size=(block_shape[1], block_shape[2]),
                             strides=(1, 1))(x5)
    #xpool = MaxPooling2D(pool_size=(2,2))(x6)

    flatten = layers.Flatten()(xpool)

    #dense1 = layers.Dense(512)(flatten)
    #dense1 = layers.LeakyReLU()(dense1)
    #dense1 = layers.Dropout(0.5)(dense1)

    #dense2 = layers.Dense(1024)(dense1)
    #dense2 = layers.LeakyReLU()(dense2)
    #dense2 = layers.Dropout(0.5)(dense2)

    output = Dense(20,
                   use_bias=False,
                   kernel_regularizer=l2(5e-4),
def faceRecoModel(input_shape):
    """
    Implementation of the Inception model used for FaceNet
    
    Arguments:
    input_shape -- shape of the images of the dataset
    Returns:
    model -- a Model() instance in Keras
    """

    # Define the input as a tensor with shape input_shape
    X_input = Input(input_shape)

    # Zero-Padding
    X = ZeroPadding2D((3, 3))(X_input)

    # First Block
    X = Conv2D(64, (7, 7), strides=(2, 2), name='conv1')(X)
    X = BatchNormalization(axis=1, name='bn1')(X)
    X = Activation('relu')(X)

    # Zero-Padding + MAXPOOL
    X = ZeroPadding2D((1, 1))(X)
    X = MaxPooling2D((3, 3), strides=2)(X)

    # Second Block
    X = Conv2D(64, (1, 1), strides=(1, 1), name='conv2')(X)
    X = BatchNormalization(axis=1, epsilon=0.00001, name='bn2')(X)
    X = Activation('relu')(X)

    # Zero-Padding + MAXPOOL
    X = ZeroPadding2D((1, 1))(X)

    # Second Block
    X = Conv2D(192, (3, 3), strides=(1, 1), name='conv3')(X)
    X = BatchNormalization(axis=1, epsilon=0.00001, name='bn3')(X)
    X = Activation('relu')(X)

    # Zero-Padding + MAXPOOL
    X = ZeroPadding2D((1, 1))(X)
    X = MaxPooling2D(pool_size=3, strides=2)(X)

    # Inception 1: a/b/c
    X = inception_block_1a(X)
    X = inception_block_1b(X)
    X = inception_block_1c(X)

    # Inception 2: a/b
    X = inception_block_2a(X)
    X = inception_block_2b(X)

    # Inception 3: a/b
    X = inception_block_3a(X)
    X = inception_block_3b(X)

    # Top layer
    X = AveragePooling2D(pool_size=(3, 3),
                         strides=(1, 1),
                         data_format='channels_first')(X)
    X = Flatten()(X)
    X = Dense(128, name='dense_layer')(X)

    # L2 normalization
    X = Lambda(lambda x: K.l2_normalize(x, axis=1))(X)

    # Create model instance
    model = Model(inputs=X_input, outputs=X, name='FaceRecoModel')

    return model
Example #25
0
def Baseline(nb_classes,
             img_dim,
             depth,
             nb_dense_block,
             growth_rate,
             nb_filter,
             dropout_rate=None,
             weight_decay=1E-4,
             compression=0.5):
    if K.image_dim_ordering() == "th":
        concat_axis = 1
    elif K.image_dim_ordering() == "tf":
        concat_axis = -1
    model_input = Input(shape=(224, 224, 3))
    #init block
    print("init block...")
    #==================================================================================
    # x = ConvBNAct(model_input,32,3,3)
    # x = ConvBNAct(x,64,3,3)
    # if dropout_rate:
    #     x = Dropout(dropout_rate)(x)
    # x_1 = AveragePooling2D((2, 2), strides=(2,2))(x)
    #==================================================================================
    x = Convolution2D(32,
                      5,
                      5,
                      init="he_uniform",
                      border_mode="same",
                      bias=False,
                      W_regularizer=l2(weight_decay),
                      subsample=(2, 2))(model_input)
    x = BatchNormalization(mode=0,
                           axis=-1,
                           gamma_regularizer=l2(weight_decay),
                           beta_regularizer=l2(weight_decay))(x)
    x_1 = Activation('relu')(x)
    #==================================================================================

    #main flow
    print("main flow...")
    #==================================================================================
    #nb_groups = 32
    #slices = [4,8,16]
    nb_block = 4
    c_init = 8
    c_factor = [1, 1, 2, 4]
    cs = [64, 128, 256, 512]

    #stage 1
    #---------------------------------------------------------------
    for g in range(nb_block):
        print("nb block%d" % g)
        merge_adapting_unit = []
        merge_path = []
        merge_block = []
        c = c_init * c_factor[g]
        # merge_block.append(x)
        for i in range(int(cs[g] / c)):
            print("nb block %d nb group %d" % (g, i))
            # res_1 = x
            x = Convolution2D(c,
                              1,
                              1,
                              init="he_uniform",
                              border_mode="same",
                              bias=False,
                              W_regularizer=l2(weight_decay))(x_1)
            merge_block.append(x)
            x = BatchNormalization(mode=0,
                                   axis=-1,
                                   gamma_regularizer=l2(weight_decay),
                                   beta_regularizer=l2(weight_decay))(x)
            x = Activation('relu')(x)
            # x = ConvBNAct(x_1,slices[g],1,1)

            #merge_unit = []
            #merge_unit.append(x)

            x = BottleNeck(x, c, 0.5)
            #x = BottleNeck(x,c,0.5)

            #merge_unit.append(x)
            #x = merge(merge_unit, mode='sum')
            #merge_unit = []
            #merge_unit.append(x)

            x = BottleNeck(x, c, 0.5)
            x = BottleNeck(x, c, 0.5)

            #merge_unit.append(x)
            #x = merge(merge_unit, mode='sum')
            merge_path.append(x)
        x = merge(merge_path, mode='concat', concat_axis=concat_axis)
        block_input = merge(merge_block,
                            mode='concat',
                            concat_axis=concat_axis)
        x_1 = merge([x, block_input], mode='sum')

        if g != nb_block - 1:
            merge_adapting_unit.append(x_1)
            x = BottleNeck(x_1, int(cs[g]), 0.5)
            x = BottleNeck(x, int(cs[g]), 0.5)
            merge_adapting_unit.append(x)
            x = merge(merge_adapting_unit, mode='sum')
            # x = BottleNeck(x,slices[g]*nb_groups*2,0.5)
            x_1 = AveragePooling2D((2, 2), strides=(2, 2))(x)

    #end flow
    print("end flow...")
    #==================================================================================
    merge_end = []
    merge_end.append(x_1)
    x = BottleNeck(x_1, int(cs[g]), 0.5)
    x = BottleNeck(x, int(cs[g]), 0.5)
    merge_end.append(x)
    x = merge(merge_end, mode='sum')
    x = GlobalAveragePooling2D(dim_ordering="tf")(x)
    x = Dense(nb_classes,
              activation='softmax',
              W_regularizer=l2(weight_decay),
              b_regularizer=l2(weight_decay))(x)

    Baseline = Model(input=[model_input], output=[x], name="Baseline")
    #==================================================================================
    #==================================================================================
    #==================================================================================
    #==================================================================================
    #==================================================================================
    #==================================================================================
    return Baseline
    def _build_model(self):
        self._create_submodels()

        # AUTOENCODER #########################################################################################
        outer_input_shape = list(self.input_shape)
        outer_input_shape[0] *= 2
        outer_input_shape[1] *= 2
        ae_input = Input(shape=outer_input_shape,
                         dtype="float32",
                         name=self.name_prefix + "Autoencoder_Input")

        if self.config.tiles_use_global:
            GT_fields = Lambda(lambda x: x[:, ..., 3:],
                               name="Slice_gt_input_{}".format(0))(ae_input)
            GT_fields = AveragePooling2D(pool_size=(2, 2))(GT_fields)

        # 1. slice
        cur_input = Lambda(
            lambda x: x[:, 0:self.config.res_y, 0:self.config.res_x, :3],
            name="Slice_ae_input_{}".format(0))(ae_input)
        if self.config.tiles_use_global:
            cur_input = concatenate([cur_input, GT_fields], axis=3)
        z0 = self._encoder(cur_input)
        output_0 = self._decoder(z0)
        # 2. slice
        cur_input = Lambda(
            lambda x: x[:, 0:self.config.res_y, self.config.res_x:, :3],
            name="Slice_ae_input_{}".format(1))(ae_input)
        if self.config.tiles_use_global:
            cur_input = concatenate([cur_input, GT_fields], axis=3)
        z = self._encoder(cur_input)
        output_1 = self._decoder(z)
        # 3. slice
        cur_input = Lambda(
            lambda x: x[:, self.config.res_y:, 0:self.config.res_x, :3],
            name="Slice_ae_input_{}".format(2))(ae_input)
        if self.config.tiles_use_global:
            cur_input = concatenate([cur_input, GT_fields], axis=3)
        z = self._encoder(cur_input)
        output_2 = self._decoder(z)
        # 4. slice
        cur_input = Lambda(
            lambda x: x[:, self.config.res_y:, self.config.res_x:, :3],
            name="Slice_ae_input_{}".format(3))(ae_input)
        if self.config.tiles_use_global:
            cur_input = concatenate([cur_input, GT_fields], axis=3)
        z = self._encoder(cur_input)
        output_3 = self._decoder(z)

        final_out_0 = concatenate([output_0, output_1], axis=2)
        final_out_1 = concatenate([output_2, output_3], axis=2)
        final_out = concatenate([final_out_0, final_out_1], axis=1)

        # print("final_out: {}".format(final_out.shape))
        # if self.use_c:
        #     final_out_c = Lambda(curl, arguments={'data_format': 'NHWC'})(final_out)
        #     if self.use_c and ("density" in self.config.data_type or "levelset" in self.config.data_type):
        #         # cut of density part of "out" tensor and concatenate with the "velo_out" tensor
        #         final_out = Concatenate(axis=-1)([final_out_c, Lambda(K.expand_dims, arguments={'axis': -1})(Lambda(lambda x: x[...,-1])(final_out))])
        # print("use_c final_out: {}".format(final_out.shape))

        p_pred = self._p_pred(z0)
        print("p_pred: {}".format(p_pred.shape))

        output_list = [final_out, p_pred]

        if self.config.tile_multitile_border > 0:
            # Tile Loss
            border_region_start = (outer_input_shape[0] //
                                   2) - 1 - self.config.tile_multitile_border
            border_region_end = (outer_input_shape[0] //
                                 2) + self.config.tile_multitile_border
            tile_output0 = Lambda(
                lambda x: x[:, border_region_start:border_region_end, :, :],
                name="TileBorderLoss_{}".format(0))(final_out)
            border_region_start = (outer_input_shape[1] //
                                   2) - 1 - self.config.tile_multitile_border
            border_region_end = (outer_input_shape[1] //
                                 2) + self.config.tile_multitile_border
            tile_output1 = Lambda(
                lambda x: x[:, :, border_region_start:border_region_end, :],
                name="TileBorderLoss_{}".format(1))(final_out)
            output_list.append(tile_output0)
            output_list.append(tile_output1)

        if len(self.gpus) > 1:
            with tf.device('/cpu:0'):
                self.model = Model(name=self.name_prefix + "Autoencoder",
                                   inputs=ae_input,
                                   outputs=output_list)
        else:
            self.model = Model(name=self.name_prefix + "Autoencoder",
                               inputs=ae_input,
                               outputs=output_list)
Example #27
0
                              horizontal_flip=True,
                              fill_mode="nearest")

valAug = ImageDataGenerator()

mean = np.array([123.68, 116.779, 103.939], dtype="float32")
trainAug.mean = mean
valAug.mean = mean

#Carga la red ResNet-50
baseModel = ResNet50(weights="imagenet",
                     include_top=False,
                     input_tensor=Input(shape=(224, 224, 3)))

headModel = baseModel.output
headModel = AveragePooling2D(pool_size=(7, 7))(headModel)
headModel = Flatten(name="flatten")(headModel)
headModel = Dense(512, activation="relu")(headModel)
headModel = Dropout(0.5)(headModel)
headModel = Dense(len(lb.classes_), activation="softmax")(headModel)

model = Model(inputs=baseModel.input, outputs=headModel)

for layer in baseModel.layers:
    layer.trainable = False

#Compila el modelo
print("[INFO] Compilando el modelo...")
opt = SGD(lr=1e-4, momentum=0.9, decay=1e-4 / args["epochs"])
model.compile(loss="categorical_crossentropy",
              optimizer=opt,
    block1 = build_resnet_block(hb1, nb_reps = 3, nb_conv = nb_conv,
                                nb_filters = nb_filters,
                                hbp = hbp, wd = wd, data_format = data_format)
    hb2 = HB_2d_conv(hbp, shift = -2)(block1)
    block2 = build_resnet_block(hb2, nb_reps = 3, nb_conv = nb_conv,
                                nb_filters = 2 * nb_filters,
                                hbp = hbp, wd = wd, stride = 2,
                                data_format = data_format)
    hb3 = HB_2d_conv(hbp, shift = -3)(block2)
    block3 = build_resnet_block(hb3, nb_reps = 3,
                                nb_conv = nb_conv, nb_filters = 4 * nb_filters,
                                hbp = hbp, wd = wd, stride = 2,
                                data_format = data_format)
    bn_pre_pool = BatchNormalization(axis = 1)(block3)
    rectifier_pre_pool = Lambda(rectifier)(bn_pre_pool)
    pool = AveragePooling2D(pool_size=(8, 8), data_format = data_format)(rectifier_pre_pool)
    flat = Flatten()(pool)
    dense = Dense(nb_classes, activation = 'softmax',
                   kernel_regularizer = regularizers.l2(wd),
                  use_bias = False)(flat)
    model = Model(inputs = inp, outputs = dense)

    datagen = ImageDataGenerator(width_shift_range = 0.15,
                                 height_shift_range = 0.15,
                                 zoom_range = 0.0,
                                 rotation_range = 0,
                                 horizontal_flip = True,
                                 fill_mode='reflect',
                                 data_format = data_format)

    sgd = SGD(lr = 0.1, momentum = 0.9, decay = 0.00, nesterov = True)
Example #29
0
    def build(input_shape,
              num_outputs,
              block_fn,
              repetitions,
              logits_and_block_endpoints=False,
              original_resnet=False,
              input_tensor=None):
        if input_shape is None and input_tensor is None:
            raise Exception(
                "Input shape should be a tuple (nb_channels, nb_rows, nb_cols)"
            )

        assert K.image_dim_ordering() == 'tf'

        if input_tensor is None:
            input = Input(shape=input_shape, name="input_image")
        else:
            input = input_tensor

        resnet_blocks_endpoints = []

        if original_resnet:
            conv1 = _conv_bn_relu(filters=64,
                                  kernel_size=(7, 7),
                                  strides=(2, 2),
                                  name="resnet_initial_conv1")(input)
            conv1 = MaxPooling2D(pool_size=(3, 3),
                                 strides=(2, 2),
                                 padding="same",
                                 name="resnet_initial_pool1")(conv1)
        else:
            conv1 = _conv_bn_relu(filters=64,
                                  kernel_size=(3, 3),
                                  strides=(1, 1),
                                  name="resnet_initial_conv1")(input)
            conv1 = _conv_bn_relu(filters=64,
                                  kernel_size=(3, 3),
                                  strides=(1, 1),
                                  name="resnet_initial_conv2")(conv1)
            if logits_and_block_endpoints:
                resnet_blocks_endpoints.append(conv1)
            conv1 = MaxPooling2D(pool_size=(2, 2),
                                 padding="same",
                                 name="resnet_initial_pool1")(conv1)

        block = conv1
        filters = 64

        for i, r in enumerate(repetitions):
            block = _residual_block(block_fn,
                                    filters=filters,
                                    repetitions=r,
                                    is_first_layer=(i == 0))(block)
            filters *= 2

            if logits_and_block_endpoints:
                """Save each residual block."""
                resnet_blocks_endpoints.append(block)

        if logits_and_block_endpoints:
            return resnet_blocks_endpoints, input

        block = Graph_utils._bn_relu()(block)

        block_shape = K.int_shape(block)
        pool2 = AveragePooling2D(pool_size=(block_shape[1], block_shape[2]),
                                 strides=(1, 1))(block)
        flatten1 = Flatten()(pool2)
        dense = Dense(units=num_outputs,
                      kernel_initializer="he_normal",
                      activation="softmax")(flatten1)

        model = Model(inputs=input, outputs=dense)
        return model
Example #30
0
def build_model():
    '''
    #先定義好框架
    #第一步從input吃起
    '''

    input_img = Input(shape=(48, 48, 1))
    '''
    先來看一下keras document 的Conv2D
    keras.layers.Conv2D(filters, kernel_size, strides=(1,1), padding='valid', 
                        data_format=None, dilation_rate=(1,1), activation=None, 
                        ues_bias=True, kernel_initializer='glorot_uniform', 
                        bias_initializer='zeros', kernel_regularizer=None, 
                        bias_regularizer=None, activity_regularizer=None, 
                        kernel_constraint=None, bias_constraint=None)
    '''

    # 64個(5*5)filters
    # no padding不會在原有輸入的基礎上添加新的像素
    # 將input放在最後面括號內,也是一種置入"self"參數的方式
    block1 = Conv2D(64, (5, 5), padding='valid', activation='relu')(input_img)
    # 在邊界加上為0的padding,重新變回48*48
    # 表示輸入中維度的順序,channels_last對應輸入尺寸為(batch, height, width, channels)
    block1 = ZeroPadding2D(padding=(2, 2), data_format='channels_last')(block1)
    # Maxpooling也可以設stride
    block1 = MaxPooling2D(pool_size=(5, 5), strides=(2, 2))(block1)

    block2 = Conv2D(64, (3, 3), activation='relu')(block1)
    block2 = ZeroPadding2D(padding=(1, 1), data_format='channels_last')(block2)

    block3 = Conv2D(64, (3, 3), activation='relu')(block2)
    block3 = AveragePooling2D(pool_size=(3, 3), strides=(2, 2))(block3)
    block3 = ZeroPadding2D(padding=(1, 1), data_format='channels_last')(block3)

    block4 = Conv2D(128, (3, 3), activation='relu')(block3)
    block4 = ZeroPadding2D(padding=(1, 1), data_format='channels_last')(block4)

    block5 = Conv2D(128, (3, 3), activation='relu')(block4)
    block5 = ZeroPadding2D(padding=(1, 1), data_format='channels_last')(block5)
    block5 = AveragePooling2D(pool_size=(3, 3), strides=(2, 2))(block5)
    block5 = Flatten()(block5)

    fc1 = Dense(1024, activation=('relu'))(block5)
    fc1 = Dropout(0.5)(fc1)

    fc2 = Dense(1024, activation='relu')(fc1)
    fc2 = Dropout(0.5)(fc2)

    predict = Dense(7)(fc2)
    predict = Activation('softmax')(predict)
    model = Model(inputs=input_img, outputs=predict)

    # opt = SGD(lr=0.1, decay=1e-6, momentum=0.9, nesterov=True)
    # opt = Adam(lr=1e-3)
    opt = Adadelta(lr=0.1, rho=0.95, epsilon=1e-08)
    model.compile(loss='categorical_crossentropy',
                  optimizer=opt,
                  metrics=['accuracy'])
    # 輸出整個模型的摘要資訊,包含簡單的結構表與參數統計
    model.summary()
    return model