def resnet50_block(inputs, num_pyramid): bn_axis = 3 # TODO outputs = [] x = layers.ZeroPadding2D(padding=(3, 3), name='conv1_pad')(inputs) x = layers.Conv2D(64, (7, 7), strides=(2, 2), padding='valid', kernel_initializer='he_normal', name='conv1')(x) x = batch_norm(axis=bn_axis, name='bn_conv1')(x) x = layers.Activation('relu')(x) x = layers.ZeroPadding2D(padding=(1, 1), name='pool1_pad')(x) x = layers.MaxPooling2D((3, 3), strides=(2, 2))(x) x = conv_block(x, 3, [64, 64, 256], stage=2, block='a', strides=(1, 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') if num_pyramid > 3: outputs.append(x) # 1/4 x = conv_block(x, 3, [128, 128, 512], stage=3, block='a') 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') if num_pyramid > 2: outputs.append(x) # 1/8 x = conv_block(x, 3, [256, 256, 1024], stage=4, block='a') 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') if num_pyramid > 1: outputs.append(x) # 1/16 x = conv_block(x, 3, [512, 512, 2048], stage=5, block='a') x = identity_block(x, 3, [512, 512, 2048], stage=5, block='b') x = identity_block(x, 3, [512, 512, 2048], stage=5, block='c') outputs.append(x) # 1/32 return outputs
def Discriminator(img_size=img_size,channels=channels): initializer=tf.random_normal_initializer(0.,.02) inp=tkl.Input(shape=[img_size,img_size,channels], name='input_img') tar=tkl.Input(shape=[img_size,img_size,channels], name='target_img') x=tkl.concatenate([inp,tar]) ds1=downsample(64,4,False)(x) ds2=downsample(192,4)(ds1) ds3=downsample(256,4)(ds2) zero_pad1=tkl.ZeroPadding2D()(ds3) conv=tkl.Conv2D( 512,4,strides=1,kernel_initializer=initializer, use_bias=False)(zero_pad1) batchnorm1=tkl.BatchNormalization()(conv) leaky_relu=tkl.LeakyReLU()(batchnorm1) zero_pad2=tkl.ZeroPadding2D()(leaky_relu) last=tkl.Conv2D( 1,4,strides=1,kernel_initializer=initializer)(zero_pad2) return tf.keras.Model(inputs=[inp,tar],outputs=last)