-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmodel_helper.py
75 lines (66 loc) · 2.53 KB
/
model_helper.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
import numpy as np
import keras
from keras.layers import (
Input,
Activation,
Dense,
Flatten,
Dropout,
Conv2D,
MaxPooling2D,
AveragePooling2D,
GlobalAveragePooling2D,
BatchNormalization,
Concatenate)
global ROW_AXIS
global COL_AXIS
global CHANNEL_AXIS
ROW_AXIS = 1
COL_AXIS = 2
CHANNEL_AXIS = 3
def _conv_bn_relu(**conv_params):
filters = conv_params["filters"]
kernel_size = conv_params["kernel_size"]
strides = conv_params.setdefault("strides", (1, 1))
kernel_initializer = conv_params.setdefault("kernel_initializer", "he_normal")
padding = conv_params.setdefault("padding", "same")
def f(input):
relu1 = Activation("relu")(input)
conv1_1 = Conv2D(filters=filters, kernel_size=(1,1),
strides=strides, padding=padding,
kernel_initializer=kernel_initializer)(relu1)
norm1 = BatchNormalization(axis=CHANNEL_AXIS)(conv1_1)
relu2 = Activation("relu")(norm1)
convSpec = Conv2D(filters=filters, kernel_size=kernel_size,
strides=strides, padding=padding,
kernel_initializer=kernel_initializer)(relu2)
norm2 = BatchNormalization(axis=CHANNEL_AXIS)(convSpec)
return norm2
return f
def DoConv1_1(input,filters):
relu = Activation("relu")(input)
conv1_1 = Conv2D(filters=filters, kernel_size=(1,1),
strides=(1,1),
padding="same",
kernel_initializer="he_normal")(relu)
norm = BatchNormalization(axis=CHANNEL_AXIS)(conv1_1)
return norm
def MergeLayer(Input1,Input2):
return Concatenate(axis=3)([Input1,Input2])
def MergeLayers(*Arg):
MergedLayers = Arg[0]
for i in range(1,len(Arg) -1):
MergedLayers = MergeLayer(MergedLayers,Arg[i])
return DoConv1_1(MergedLayers, Arg[-1])
def PoolLayer(Layer,filters):
P1_Layer = AveragePooling2D(pool_size=(1, 1), strides=(2,2), padding='valid')(Layer)
P1_Conv1_1 = Conv2D(filters=filters, kernel_size=(1,1),
strides=(1,1), padding="same",
kernel_initializer="he_normal")(P1_Layer)
P2_Layer = AveragePooling2D(pool_size=(1, 1), strides=(2,2), padding='valid')(Layer)
P2_Conv1_1 = Conv2D(filters=filters, kernel_size=(1,1),
strides=(1,1), padding="same",
kernel_initializer="he_normal")(P2_Layer)
merge = MergeLayer(P1_Conv1_1,P2_Conv1_1)
Norm = BatchNormalization(axis=CHANNEL_AXIS)(merge)
return Norm