def _unet(n_classes, encoder, l1_skip_conn=True, input_height=512, input_width=704): img_input, levels = encoder(input_height=input_height, input_width=input_width) [f1, f2, f3, f4, f5] = levels o = f4 o = (ZeroPadding2D((1, 1), data_format=IMAGE_ORDERING))(o) o = (Conv2D(512, (3, 3), padding='valid', data_format=IMAGE_ORDERING))(o) o = (BatchNormalization())(o) o = (UpSampling2D((2, 2), data_format=IMAGE_ORDERING))(o) o = (concatenate([o, f3], axis=MERGE_AXIS)) o = (ZeroPadding2D((1, 1), data_format=IMAGE_ORDERING))(o) o = (Conv2D(256, (3, 3), padding='valid', data_format=IMAGE_ORDERING))(o) o = (BatchNormalization())(o) o = (UpSampling2D((2, 2), data_format=IMAGE_ORDERING))(o) o = (concatenate([o, f2], axis=MERGE_AXIS)) o = (ZeroPadding2D((1, 1), data_format=IMAGE_ORDERING))(o) o = (Conv2D(128, (3, 3), padding='valid', data_format=IMAGE_ORDERING))(o) o = (BatchNormalization())(o) o = (UpSampling2D((2, 2), data_format=IMAGE_ORDERING))(o) if l1_skip_conn: o = (concatenate([o, f1], axis=MERGE_AXIS)) o = (ZeroPadding2D((1, 1), data_format=IMAGE_ORDERING))(o) o = (Conv2D(64, (3, 3), padding='valid', data_format=IMAGE_ORDERING))(o) o = (BatchNormalization())(o) o = (UpSampling2D((2, 2), data_format=IMAGE_ORDERING))(o) if l1_skip_conn: o = (concatenate([o, img_input], axis=MERGE_AXIS)) o = (ZeroPadding2D((1, 1), data_format=IMAGE_ORDERING))(o) o = (Conv2D(64, (3, 3), padding='valid', data_format=IMAGE_ORDERING))(o) o = (BatchNormalization())(o) o = Conv2D(n_classes, (3, 3), padding='same', data_format=IMAGE_ORDERING)(o) model = get_segmentation_model(img_input, o) return model
up1 = np.concatenate([UpSampling2D((2, 2))(conv3), conv2], axis=-1) conv4 = Conv2D(64, (3, 3), activation='relu', padding='same')(up1) conv4 = Dropout(0.2)(conv4) conv4 = Conv2D(64, (3, 3), activation='relu', padding='same')(conv4) up2 = np.concatenate([UpSampling2D((2, 2))(conv4), conv1], axis=-1) conv5 = Conv2D(32, (3, 3), activation='relu', padding='same')(up2) conv5 = Dropout(0.2)(conv5) conv5 = Conv2D(32, (3, 3), activation='relu', padding='same')(conv5) out = Conv2D(n_classes, (1, 1), padding='same')(conv5) from keras_segmentation.models.model_utils import get_segmentation_model model = get_segmentation_model(img_input, out) # this would build the segmentation model #%% from https://segmentation-models.readthedocs.io/en/latest/tutorial.html from segmentation_models import Unet from segmentation_models import get_preprocessing from segmentation_models.losses import bce_jaccard_loss from segmentation_models.metrics import iou_score BACKBONE = 'resnet34' preprocess_input = get_preprocessing(BACKBONE) # load your data #x_train, y_train, x_val, y_val = load_data(...) # preprocess input
conv2 = Dropout(0.2)(conv2) conv2 = Conv2D(64, (3, 3), activation='relu', padding='same')(conv2) pool2 = MaxPooling2D((2, 2))(conv2) conv3 = Conv2D(128, (3, 3), activation='relu', padding='same')(pool2) conv3 = Dropout(0.2)(conv3) conv3 = Conv2D(128, (3, 3), activation='relu', padding='same')(conv3) up1 = concatenate([UpSampling2D((2, 2))(conv3), conv2], axis=-1) conv4 = Conv2D(64, (3, 3), activation='relu', padding='same')(up1) conv4 = Dropout(0.2)(conv4) conv4 = Conv2D(64, (3, 3), activation='relu', padding='same')(conv4) up2 = concatenate([UpSampling2D((2, 2))(conv4), conv1], axis=-1) conv5 = Conv2D(32, (3, 3), activation='relu', padding='same')(up2) conv5 = Dropout(0.2)(conv5) conv5 = Conv2D(32, (3, 3), activation='relu', padding='same')(conv5) out = Conv2D(256, (1, 1), padding='same')(conv5) CNN_model = get_segmentation_model(img_input, out) CNN_model.train( train_images = train_x_filepath, train_annotations = train_y_filepath, val_images = test_x_filepath, val_annotations = test_y_filepath, checkpoints_path = checkpoints_filepath, auto_resume_checkpoint=True, epochs=5, steps_per_epoch=128, verify_dataset=False ) out1 = CNN_model.predict_segmentation( inp=example1, out_fname="drive/Shared drives/Data Mining Project/Data/output1.png" )