Spaces:
Sleeping
Sleeping
import os | |
import numpy as np | |
import pandas as pd | |
import cv2 | |
import tensorflow as tf | |
from tensorflow.python.keras import Sequential | |
from tensorflow.keras import layers, optimizers | |
from tensorflow.keras.layers import * | |
from tensorflow.keras.models import Model | |
from tensorflow.keras.initializers import glorot_uniform | |
from tensorflow.keras.utils import plot_model | |
from tensorflow.keras.callbacks import ReduceLROnPlateau, EarlyStopping, ModelCheckpoint, LearningRateScheduler | |
import tensorflow.keras.backend as K | |
# lets create model now | |
def resblock(X, f): | |
''' | |
function for creating res block | |
''' | |
X_copy = X #copy of input | |
# main path | |
X = Conv2D(f, kernel_size=(1,1), kernel_initializer='he_normal')(X) | |
X = BatchNormalization()(X) | |
X = Activation('relu')(X) | |
X = Conv2D(f, kernel_size=(3,3), padding='same', kernel_initializer='he_normal')(X) | |
X = BatchNormalization()(X) | |
# shortcut path | |
X_copy = Conv2D(f, kernel_size=(1,1), kernel_initializer='he_normal')(X_copy) | |
X_copy = BatchNormalization()(X_copy) | |
# Adding the output from main path and short path together | |
X = Add()([X, X_copy]) | |
X = Activation('relu')(X) | |
return X | |
def upsample_concat(x, skip): | |
''' | |
funtion for upsampling image | |
''' | |
X = UpSampling2D((2,2))(x) | |
merge = Concatenate()([X, skip]) | |
return merge | |
def load_model(): | |
input_shape = (256,256,3) | |
X_input = Input(input_shape) #iniating tensor of input shape | |
# Stage 1 | |
conv_1 = Conv2D(16, 3, activation='relu', padding='same', kernel_initializer='he_normal')(X_input) | |
conv_1 = BatchNormalization()(conv_1) | |
conv_1 = Conv2D(16, 3, activation='relu', padding='same', kernel_initializer='he_normal')(conv_1) | |
conv_1 = BatchNormalization()(conv_1) | |
pool_1 = MaxPool2D((2,2))(conv_1) | |
# stage 2 | |
conv_2 = resblock(pool_1, 32) | |
pool_2 = MaxPool2D((2,2))(conv_2) | |
# Stage 3 | |
conv_3 = resblock(pool_2, 64) | |
pool_3 = MaxPool2D((2,2))(conv_3) | |
# Stage 4 | |
conv_4 = resblock(pool_3, 128) | |
pool_4 = MaxPool2D((2,2))(conv_4) | |
# Stage 5 (bottle neck) | |
conv_5 = resblock(pool_4, 256) | |
# Upsample Stage 1 | |
up_1 = upsample_concat(conv_5, conv_4) | |
up_1 = resblock(up_1, 128) | |
# Upsample Stage 2 | |
up_2 = upsample_concat(up_1, conv_3) | |
up_2 = resblock(up_2, 64) | |
# Upsample Stage 3 | |
up_3 = upsample_concat(up_2, conv_2) | |
up_3 = resblock(up_3, 32) | |
# Upsample Stage 4 | |
up_4 = upsample_concat(up_3, conv_1) | |
up_4 = resblock(up_4, 16) | |
# final output | |
out = Conv2D(1, (1,1), kernel_initializer='he_normal', padding='same', activation='sigmoid')(up_4) | |
seg_model = Model(X_input, out) | |
return seg_model |