-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfunctions.py
More file actions
91 lines (63 loc) · 2.34 KB
/
functions.py
File metadata and controls
91 lines (63 loc) · 2.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
import tensorflow as tf
CLASSES = 1
COLORS = ['red']
SAMPLE_SIZE = (256, 256)
#OUTPUT_SIZE = (1080, 1920)
def input_layer():
return tf.keras.layers.Input(shape=SAMPLE_SIZE + (3,))
def downsample_block(filters, size, batch_norm=True):
initializer = tf.keras.initializers.GlorotNormal()
result = tf.keras.Sequential()
result.add(
tf.keras.layers.Conv2D(filters, size, strides=2, padding='same',
kernel_initializer=initializer, use_bias=False))
if batch_norm:
result.add(tf.keras.layers.BatchNormalization())
result.add(tf.keras.layers.LeakyReLU())
return result
def upsample_block(filters, size, dropout=False):
initializer = tf.keras.initializers.GlorotNormal()
result = tf.keras.Sequential()
result.add(
tf.keras.layers.Conv2DTranspose(filters, size, strides=2, padding='same',
kernel_initializer=initializer, use_bias=False))
result.add(tf.keras.layers.BatchNormalization())
if dropout:
result.add(tf.keras.layers.Dropout(0.25))
result.add(tf.keras.layers.ReLU())
return result
def output_layer(size):
initializer = tf.keras.initializers.GlorotNormal()
return tf.keras.layers.Conv2DTranspose(CLASSES, size, strides=2, padding='same',
kernel_initializer=initializer, activation='sigmoid')
downsample_stack = [
downsample_block(64, 4, batch_norm=False),
downsample_block(128, 4),
downsample_block(256, 4),
downsample_block(512, 4),
downsample_block(512, 4),
downsample_block(512, 4),
downsample_block(512, 4),
]
upsample_stack = [
upsample_block(512, 4, dropout=True),
upsample_block(512, 4, dropout=True),
upsample_block(512, 4, dropout=True),
upsample_block(256, 4),
upsample_block(128, 4),
upsample_block(64, 4)
]
def create_layers():
inp_layer = input_layer()
out_layer = output_layer(4)
x = inp_layer
downsample_skips = []
for block in downsample_stack:
x = block(x)
downsample_skips.append(x)
downsample_skips = reversed(downsample_skips[:-1])
for up_block, down_block in zip(upsample_stack, downsample_skips):
x = up_block(x)
x = tf.keras.layers.Concatenate()([x, down_block])
out_layer = out_layer(x)
return inp_layer, out_layer