-
Notifications
You must be signed in to change notification settings - Fork 29
/
XNet.py
115 lines (93 loc) · 4.08 KB
/
XNet.py
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
from keras.models import Model
from keras.layers import Input, Concatenate, Conv2D, MaxPooling2D, UpSampling2D, Dropout, Cropping2D
from keras.layers import BatchNormalization, Reshape, Layer
from keras.layers import Activation, Flatten, Dense
from keras.optimizers import *
from keras.callbacks import ModelCheckpoint, LearningRateScheduler
from keras.metrics import categorical_accuracy
from keras import backend as K
from keras import losses
def model(input_shape=(64,64,3), classes=3, kernel_size = 3, filter_depth = (64,128,256,512,0)):
img_input = Input(shape=input_shape)
# Encoder
conv1 = Conv2D(filter_depth[0], (kernel_size, kernel_size), padding="same")(img_input)
batch1 = BatchNormalization()(conv1)
act1 = Activation("relu")(batch1)
pool1 = MaxPooling2D(pool_size=(2, 2))(act1)
#100x100
conv2 = Conv2D(filter_depth[1], (kernel_size, kernel_size), padding="same")(pool1)
batch2 = BatchNormalization()(conv2)
act2 = Activation("relu")(batch2)
pool2 = MaxPooling2D(pool_size=(2, 2))(act2)
#50x50
conv3 = Conv2D(filter_depth[2], (kernel_size, kernel_size), padding="same")(pool2)
batch3 = BatchNormalization()(conv3)
act3 = Activation("relu")(batch3)
pool3 = MaxPooling2D(pool_size=(2, 2))(act3)
#25x25
#Flat
conv4 = Conv2D(filter_depth[3], (kernel_size, kernel_size), padding="same")(pool3)
batch4 = BatchNormalization()(conv4)
act4 = Activation("relu")(batch4)
#25x25
conv5 = Conv2D(filter_depth[3], (kernel_size, kernel_size), padding="same")(act4)
batch5 = BatchNormalization()(conv5)
act5 = Activation("relu")(batch5)
#25x25
#Up
up6 = UpSampling2D(size=(2, 2))(act5)
conv6 = Conv2D(filter_depth[2], (kernel_size, kernel_size), padding="same")(up6)
batch6 = BatchNormalization()(conv6)
act6 = Activation("relu")(batch6)
concat6 = Concatenate()([act3,act6])
#50x50
up7 = UpSampling2D(size=(2, 2))(concat6)
conv7 = Conv2D(filter_depth[1], (kernel_size, kernel_size), padding="same")(up7)
batch7 = BatchNormalization()(conv7)
act7 = Activation("relu")(batch7)
concat7 = Concatenate()([act2,act7])
#100x100
#Down
conv8 = Conv2D(filter_depth[1], (kernel_size, kernel_size), padding="same")(concat7)
batch8 = BatchNormalization()(conv8)
act8 = Activation("relu")(batch8)
pool8 = MaxPooling2D(pool_size=(2, 2))(act8)
#50x50
conv9 = Conv2D(filter_depth[2], (kernel_size, kernel_size), padding="same")(pool8)
batch9 = BatchNormalization()(conv9)
act9 = Activation("relu")(batch9)
pool9 = MaxPooling2D(pool_size=(2, 2))(act9)
#25x25
#Flat
conv10 = Conv2D(filter_depth[3], (kernel_size, kernel_size), padding="same")(pool9)
batch10 = BatchNormalization()(conv10)
act10 = Activation("relu")(batch10)
#25x25
conv11 = Conv2D(filter_depth[3], (kernel_size, kernel_size), padding="same")(act10)
batch11 = BatchNormalization()(conv11)
act11 = Activation("relu")(batch11)
#25x25
#Encoder
up12 = UpSampling2D(size=(2, 2))(act11)
conv12 = Conv2D(filter_depth[2], (kernel_size, kernel_size), padding="same")(up12)
batch12 = BatchNormalization()(conv12)
act12 = Activation("relu")(batch12)
concat12 = Concatenate()([act9,act12])
#50x50
up13 = UpSampling2D(size=(2, 2))(concat12)
conv13 = Conv2D(filter_depth[1], (kernel_size, kernel_size), padding="same")(up13)
batch13 = BatchNormalization()(conv13)
act13 = Activation("relu")(batch13)
concat13 = Concatenate()([act8,act13])
#100x100
up14 = UpSampling2D(size=(2, 2))(concat13)
conv14 = Conv2D(filter_depth[0], (kernel_size, kernel_size), padding="same")(up14)
batch14 = BatchNormalization()(conv14)
act14 = Activation("relu")(batch14)
concat14 = Concatenate()([act1,act14])
#200x200
conv15 = Conv2D(classes, (1,1), padding="valid")(concat14)
reshape15 = Reshape((input_shape[0]*input_shape[1],classes))(conv15)
act15 = Activation("softmax")(reshape15)
model = Model(img_input, act15)
return model