Spaces:
Sleeping
Sleeping
Upload tf_models.py with huggingface_hub
Browse files- tf_models.py +76 -0
tf_models.py
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import tensorflow as tf
|
| 2 |
+
from tensorflow.keras import layers
|
| 3 |
+
|
| 4 |
+
def downsample(filters, size, apply_instancenorm=True):
|
| 5 |
+
initializer = tf.random_normal_initializer(0., 0.02)
|
| 6 |
+
result = tf.keras.Sequential()
|
| 7 |
+
result.add(layers.Conv2D(filters, size, strides=2, padding='same',
|
| 8 |
+
kernel_initializer=initializer, use_bias=False))
|
| 9 |
+
if apply_instancenorm:
|
| 10 |
+
result.add(tf.keras.layers.GroupNormalization(groups=-1))
|
| 11 |
+
result.add(layers.LeakyReLU())
|
| 12 |
+
return result
|
| 13 |
+
|
| 14 |
+
def upsample(filters, size, apply_dropout=False):
|
| 15 |
+
initializer = tf.random_normal_initializer(0., 0.02)
|
| 16 |
+
result = tf.keras.Sequential()
|
| 17 |
+
result.add(layers.Conv2DTranspose(filters, size, strides=2, padding='same',
|
| 18 |
+
kernel_initializer=initializer, use_bias=False))
|
| 19 |
+
result.add(tf.keras.layers.GroupNormalization(groups=-1))
|
| 20 |
+
if apply_dropout:
|
| 21 |
+
result.add(layers.Dropout(0.5))
|
| 22 |
+
result.add(layers.ReLU())
|
| 23 |
+
return result
|
| 24 |
+
|
| 25 |
+
def resnet_block(filters, size=3):
|
| 26 |
+
initializer = tf.random_normal_initializer(0., 0.02)
|
| 27 |
+
result = tf.keras.Sequential()
|
| 28 |
+
result.add(layers.Conv2D(filters, size, padding='same', kernel_initializer=initializer, use_bias=False))
|
| 29 |
+
result.add(tf.keras.layers.GroupNormalization(groups=-1))
|
| 30 |
+
result.add(layers.ReLU())
|
| 31 |
+
result.add(layers.Conv2D(filters, size, padding='same', kernel_initializer=initializer, use_bias=False))
|
| 32 |
+
result.add(tf.keras.layers.GroupNormalization(groups=-1))
|
| 33 |
+
return result
|
| 34 |
+
|
| 35 |
+
def Generator(output_channels=3, num_resnet=9):
|
| 36 |
+
inputs = layers.Input(shape=[256, 256, 3])
|
| 37 |
+
|
| 38 |
+
# Downsampling
|
| 39 |
+
x = layers.Conv2D(64, 7, padding='same', kernel_initializer=tf.random_normal_initializer(0., 0.02), use_bias=False)(inputs)
|
| 40 |
+
x = tf.keras.layers.GroupNormalization(groups=-1)(x)
|
| 41 |
+
x = layers.ReLU()(x)
|
| 42 |
+
|
| 43 |
+
x = downsample(128, 3)(x)
|
| 44 |
+
x = downsample(256, 3)(x)
|
| 45 |
+
|
| 46 |
+
# Residual blocks
|
| 47 |
+
for _ in range(num_resnet):
|
| 48 |
+
res = resnet_block(256)(x)
|
| 49 |
+
x = layers.Add()([x, res])
|
| 50 |
+
|
| 51 |
+
# Upsampling
|
| 52 |
+
x = upsample(128, 3)(x)
|
| 53 |
+
x = upsample(64, 3)(x)
|
| 54 |
+
|
| 55 |
+
last = layers.Conv2D(output_channels, 7, padding='same', activation='tanh',
|
| 56 |
+
kernel_initializer=tf.random_normal_initializer(0., 0.02))(x)
|
| 57 |
+
|
| 58 |
+
return tf.keras.Model(inputs=inputs, outputs=last)
|
| 59 |
+
|
| 60 |
+
def Discriminator():
|
| 61 |
+
initializer = tf.random_normal_initializer(0., 0.02)
|
| 62 |
+
inputs = layers.Input(shape=[256, 256, 3])
|
| 63 |
+
|
| 64 |
+
down1 = downsample(64, 4, False)(inputs) # (bs, 128, 128, 64)
|
| 65 |
+
down2 = downsample(128, 4)(down1) # (bs, 64, 64, 128)
|
| 66 |
+
down3 = downsample(256, 4)(down2) # (bs, 32, 32, 256)
|
| 67 |
+
|
| 68 |
+
zero_pad1 = layers.ZeroPadding2D()(down3) # (bs, 34, 34, 256)
|
| 69 |
+
conv = layers.Conv2D(512, 4, strides=1, kernel_initializer=initializer, use_bias=False)(zero_pad1)
|
| 70 |
+
norm1 = tf.keras.layers.GroupNormalization(groups=-1)(conv)
|
| 71 |
+
leaky_relu = layers.LeakyReLU()(norm1)
|
| 72 |
+
|
| 73 |
+
zero_pad2 = layers.ZeroPadding2D()(leaky_relu)
|
| 74 |
+
last = layers.Conv2D(1, 4, strides=1, kernel_initializer=initializer)(zero_pad2)
|
| 75 |
+
|
| 76 |
+
return tf.keras.Model(inputs=inputs, outputs=last)
|