a b/modelMB.py
1
import numpy as np
2
import os
3
import skimage.io as io
4
import skimage.transform as trans
5
import numpy as np
6
from keras.models import *
7
from keras.layers import *
8
from keras.optimizers import *
9
from keras.callbacks import ModelCheckpoint, LearningRateScheduler
10
from keras import backend as keras
11
import tensorflow as tf
12
from keras import initializers
13
from keras import regularizers
14
15
16
def mb(pretrained_weights=None, input_size=(256, 256, 3)):
17
    inputs = Input(input_size)
18
    paddings = tf.constant([[0, 0], [1, 1], [1, 1], [0, 0], [0, 0]])  # only pads dim 2 and 3 (h and w)
19
20
21
    [ inputtemp, inputspet,inputsct] = Lambda(tf.split, arguments={'axis': 3, 'num_or_size_splits': 3})(inputs)
22
23
    conv1ct = Conv2D(64, 3, activation='relu', padding='same', kernel_initializer='he_normal')(inputsct)
24
    conv1ct = Conv2D(64, 3, activation='relu', padding='same', kernel_initializer='he_normal')(conv1ct)
25
    pool1ct = MaxPooling2D(pool_size=(2, 2))(conv1ct)
26
    conv2ct = Conv2D(64, 3, activation='relu', padding='same', kernel_initializer='he_normal')(pool1ct)
27
    conv2ct = Conv2D(64, 3, activation='relu', padding='same', kernel_initializer='he_normal')(conv2ct)
28
    pool2ct = MaxPooling2D(pool_size=(2, 2))(conv2ct)
29
    conv3ct = Conv2D(64, 3, activation='relu', padding='same', kernel_initializer='he_normal')(pool2ct)
30
    conv3ct = Conv2D(64, 3, activation='relu', padding='same', kernel_initializer='he_normal')(conv3ct)
31
    pool3ct = MaxPooling2D(pool_size=(2, 2))(conv3ct)
32
    conv4ct = Conv2D(64, 3, activation='relu', padding='same', kernel_initializer='he_normal')(pool3ct)
33
    conv4ct = Conv2D(64, 3, activation='relu', padding='same', kernel_initializer='he_normal')(conv4ct)
34
    drop4ct = Dropout(0.5)(conv4ct)
35
    pool4ct = MaxPooling2D(pool_size=(2, 2))(conv4ct)
36
37
    conv1pet = Conv2D(64, 3, activation='relu', padding='same', kernel_initializer='he_normal')(inputspet)
38
    conv1pet = Conv2D(64, 3, activation='relu', padding='same', kernel_initializer='he_normal')(conv1pet)
39
    pool1pet = MaxPooling2D(pool_size=(2, 2))(conv1pet)
40
    conv2pet = Conv2D(64, 3, activation='relu', padding='same', kernel_initializer='he_normal')(pool1pet)
41
    conv2pet = Conv2D(64, 3, activation='relu', padding='same', kernel_initializer='he_normal')(conv2pet)
42
    pool2pet = MaxPooling2D(pool_size=(2, 2))(conv2pet)
43
    conv3pet = Conv2D(64, 3, activation='relu', padding='same', kernel_initializer='he_normal')(pool2pet)
44
    conv3pet = Conv2D(64, 3, activation='relu', padding='same', kernel_initializer='he_normal')(conv3pet)
45
    pool3pet = MaxPooling2D(pool_size=(2, 2))(conv3pet)
46
    conv4pet = Conv2D(64, 3, activation='relu', padding='same', kernel_initializer='he_normal')(pool3pet)
47
    conv4pet = Conv2D(64, 3, activation='relu', padding='same', kernel_initializer='he_normal')(conv4pet)
48
    drop4pet = Dropout(0.5)(conv4pet)
49
    pool4pet = MaxPooling2D(pool_size=(2, 2))(conv4pet)
50
51
    conj4 = concatenate([pool4ct, pool4pet], axis=3)
52
53
54
55
    up5 = Conv2D(64, 2, activation='relu', padding='same', kernel_initializer='he_normal')(
56
        UpSampling2D(size=(2, 2))(conj4))
57
    conv5 = Conv2D(64, 3, activation='relu', padding='same', kernel_initializer='he_normal')(up5)
58
    conv5 = Conv2D(64, 3, activation='relu', padding='same', kernel_initializer='he_normal')(conv5)
59
60
61
    up6 = Conv2D(64, 2, activation='relu', padding='same', kernel_initializer='he_normal')(
62
        UpSampling2D(size=(2, 2))(conv5))
63
    conv6 = Conv2D(64, 3, activation='relu', padding='same', kernel_initializer='he_normal')(up6)
64
    conv6 = Conv2D(64, 3, activation='relu', padding='same', kernel_initializer='he_normal')(conv6)
65
66
67
    up7 = Conv2D(64, 2, activation='relu', padding='same', kernel_initializer='he_normal')(
68
        UpSampling2D(size=(2, 2))(conv6))
69
70
    conv7 = Conv2D(64, 3, activation='relu', padding='same', kernel_initializer='he_normal')(up7)
71
    conv7 = Conv2D(64, 3, activation='relu', padding='same', kernel_initializer='he_normal')(conv7)
72
73
74
    up8 = Conv2D(64, 2, activation='relu', padding='same', kernel_initializer='he_normal')(
75
        UpSampling2D(size=(2, 2))(conv7))
76
77
    conv8 = Conv2D(64, 3, activation='relu', padding='same', kernel_initializer='he_normal')(up8)
78
    conv8 = Conv2D(64, 3, activation='relu', padding='same', kernel_initializer='he_normal')(conv8)
79
80
    conv9 = Conv2D(4, 3, activation='relu', padding='same', kernel_initializer='he_normal')(conv8)
81
    conv10 = Conv2D(1, 1, activation='sigmoid')(conv9)
82
83
    model = Model(input=inputs, output=conv10)
84
85
    model.compile(optimizer=Adam(lr=1e-4), loss='binary_crossentropy', metrics=['accuracy'])
86
87
88
    if (pretrained_weights):
89
        model.load_weights(pretrained_weights)
90
91
    return model