Spaces:
Sleeping
Sleeping
from keras.models import Model | |
from keras.layers import Input, concatenate, Conv2D, MaxPooling2D, Conv2DTranspose | |
from keras.optimizers import Adam | |
from src.config.config import IMG_ROWS, IMG_COLS, SMOOTH | |
from keras import backend as K | |
def dice_coef(y_true, y_pred): | |
y_true_f = K.flatten(y_true) | |
y_pred_f = K.flatten(y_pred) | |
intersection = K.sum(y_true_f * y_pred_f) | |
return (2. * intersection + SMOOTH) / (K.sum(y_true_f) + K.sum(y_pred_f) + SMOOTH) | |
def dice_coef_loss(y_true, y_pred): | |
return -dice_coef(y_true, y_pred) | |
def get_unet(): | |
inputs = Input((IMG_ROWS, IMG_COLS, 1)) | |
conv1 = Conv2D(32, (3, 3), activation='relu', padding='same')(inputs) | |
conv1 = Conv2D(32, (3, 3), activation='relu', padding='same')(conv1) | |
pool1 = MaxPooling2D(pool_size=(2, 2))(conv1) | |
conv2 = Conv2D(64, (3, 3), activation='relu', padding='same')(pool1) | |
conv2 = Conv2D(64, (3, 3), activation='relu', padding='same')(conv2) | |
pool2 = MaxPooling2D(pool_size=(2, 2))(conv2) | |
conv3 = Conv2D(128, (3, 3), activation='relu', padding='same')(pool2) | |
conv3 = Conv2D(128, (3, 3), activation='relu', padding='same')(conv3) | |
pool3 = MaxPooling2D(pool_size=(2, 2))(conv3) | |
conv4 = Conv2D(256, (3, 3), activation='relu', padding='same')(pool3) | |
conv4 = Conv2D(256, (3, 3), activation='relu', padding='same')(conv4) | |
pool4 = MaxPooling2D(pool_size=(2, 2))(conv4) | |
conv5 = Conv2D(512, (3, 3), activation='relu', padding='same')(pool4) | |
conv5 = Conv2D(512, (3, 3), activation='relu', padding='same')(conv5) | |
up6 = concatenate([Conv2DTranspose(256, (2, 2), strides=(2, 2), padding='same')(conv5), conv4], axis=3) | |
conv6 = Conv2D(256, (3, 3), activation='relu', padding='same')(up6) | |
conv6 = Conv2D(256, (3, 3), activation='relu', padding='same')(conv6) | |
up7 = concatenate([Conv2DTranspose(128, (2, 2), strides=(2, 2), padding='same')(conv6), conv3], axis=3) | |
conv7 = Conv2D(128, (3, 3), activation='relu', padding='same')(up7) | |
conv7 = Conv2D(128, (3, 3), activation='relu', padding='same')(conv7) | |
up8 = concatenate([Conv2DTranspose(64, (2, 2), strides=(2, 2), padding='same')(conv7), conv2], axis=3) | |
conv8 = Conv2D(64, (3, 3), activation='relu', padding='same')(up8) | |
conv8 = Conv2D(64, (3, 3), activation='relu', padding='same')(conv8) | |
up9 = concatenate([Conv2DTranspose(32, (2, 2), strides=(2, 2), padding='same')(conv8), conv1], axis=3) | |
conv9 = Conv2D(32, (3, 3), activation='relu', padding='same')(up9) | |
conv9 = Conv2D(32, (3, 3), activation='relu', padding='same')(conv9) | |
conv10 = Conv2D(1, (1, 1), activation='sigmoid')(conv9) | |
model = Model(inputs=[inputs], outputs=[conv10]) | |
model.compile(optimizer=Adam(learning_rate=1e-3), loss=dice_coef_loss, metrics=[dice_coef]) | |
return model |