Beispiel #1
0
    model = ResNet50(input_shape=input_shape,
                     weights=None,
                     classes=num_classes)
elif runmodel == "MNET":
    from keras.applications.mobilenet import MobileNet
    model = MobileNet(input_shape=input_shape,
                      weights=None,
                      classes=num_classes)
elif runmodel == "CNN2":
    model = keras.models.load_model("leaf.CNN.h5")
elif runmodel == "CNN":
    # Create the model
    model = Sequential()
    model.add(
        Conv2D(64, (3, 3),
               input_shape=input_shape,
               padding='same',
               activation='relu',
               kernel_constraint=maxnorm(3)))
    model.add(MaxPooling2D(pool_size=(2, 2)))
    model.add(
        Conv2D(128, (3, 3),
               padding='same',
               activation='relu',
               kernel_constraint=maxnorm(3)))
    model.add(MaxPooling2D(pool_size=(2, 2)))
    model.add(
        Conv2D(256, (3, 3),
               padding='same',
               activation='relu',
               kernel_constraint=maxnorm(3)))
    model.add(MaxPooling2D(pool_size=(2, 2)))
Beispiel #2
0
def DefineArchitecture(architectureName, classes, customImageSize):
    if architectureName == "VGG16":
        imageSize = 224
        baseModel = VGG16(weights='imagenet', include_top=True)

    elif architectureName == "VGG19":
        imageSize = 224
        baseModel = VGG19(weights='imagenet', include_top=True)

    elif architectureName == "ResNet50":
        imageSize = 224
        baseModel = ResNet50(weights='imagenet', include_top=True)

    elif architectureName == "InceptionV3":
        imageSize = 299
        baseModel = InceptionV3(weights='imagenet', include_top=True)

    elif architectureName == "InceptionResNetV2":
        imageSize = 299
        baseModel = InceptionResNetV2(weights='imagenet', include_top=True)

    elif architectureName == "MobileNet":
        imageSize = 224
        baseModel = MobileNet(weights='imagenet', include_top=True)

    elif architectureName == "MobileNetV2":
        imageSize = 224
        baseModel = MobileNetV2(weights='imagenet', include_top=True)

    elif architectureName == "DenseNet121":
        imageSize = 224
        baseModel = DenseNet121(weights='imagenet', include_top=True)

    elif architectureName == "DenseNet169":
        imageSize = 224
        baseModel = DenseNet169(weights='imagenet', include_top=True)

    elif architectureName == "DenseNet201":
        imageSize = 224
        baseModel = DenseNet201(weights='imagenet', include_top=True)

    elif architectureName == "Custom Model (1-Layer Network w 32 Filters)":
        imageSize = customImageSize

        baseModel = Sequential()
        baseModel.add(
            Conv2D(32, (3, 3),
                   activation='relu',
                   input_shape=(customImageSize, customImageSize, 3)))
        baseModel.add(MaxPooling2D(pool_size=(2, 2)))
        baseModel.add(Flatten())
        baseModel.add(Dense(128, activation='relu'))
        baseModel.add(Dropout(0.5))
        baseModel.add(Dense(classes, activation='softmax'))

    elif architectureName == "Custom Model (2-Layer Network)":
        imageSize = customImageSize

        baseModel = Sequential()
        baseModel.add(
            Conv2D(32, (3, 3),
                   activation='relu',
                   input_shape=(customImageSize, customImageSize, 3)))
        baseModel.add(MaxPooling2D(pool_size=(2, 2)))
        baseModel.add(Conv2D(32, (3, 3), activation='relu'))
        baseModel.add(MaxPooling2D(pool_size=(2, 2)))
        baseModel.add(Flatten())
        baseModel.add(Dense(128, activation='relu'))
        baseModel.add(Dropout(0.5))
        baseModel.add(Dense(classes, activation='softmax'))

    elif architectureName == "Custom Model (1-Layer Network w 64 Filters)":
        imageSize = customImageSize

        baseModel = Sequential()
        baseModel.add(
            Conv2D(64, (3, 3),
                   activation='relu',
                   input_shape=(customImageSize, customImageSize, 3)))
        baseModel.add(MaxPooling2D(pool_size=(2, 2)))
        baseModel.add(Flatten())
        baseModel.add(Dense(128, activation='relu'))
        baseModel.add(Dropout(0.5))
        baseModel.add(Dense(classes, activation='softmax'))

    elif architectureName == "Custom Model (1-Layer Network w 128 Filters)":
        imageSize = customImageSize

        baseModel = Sequential()
        baseModel.add(
            Conv2D(customImageSize, (3, 3),
                   activation='relu',
                   input_shape=(customImageSize, customImageSize, 3)))
        baseModel.add(MaxPooling2D(pool_size=(2, 2)))
        baseModel.add(Flatten())
        baseModel.add(Dense(128, activation='relu'))
        baseModel.add(Dropout(0.5))
        baseModel.add(Dense(classes, activation='softmax'))

    elif architectureName == "Custom Model (3-Layers)":
        imageSize = customImageSize

        baseModel = Sequential()
        baseModel.add(
            Conv2D(32, (3, 3),
                   activation='relu',
                   input_shape=(customImageSize, customImageSize, 3)))
        baseModel.add(MaxPooling2D(pool_size=(2, 2)))
        baseModel.add(Conv2D(32, (3, 3), activation='relu'))
        baseModel.add(MaxPooling2D(pool_size=(2, 2)))
        baseModel.add(Conv2D(64, (3, 3), activation='relu'))
        baseModel.add(MaxPooling2D(pool_size=(2, 2)))
        baseModel.add(Flatten())
        baseModel.add(Dense(128, activation='relu'))
        baseModel.add(Dropout(0.5))
        baseModel.add(Dense(classes, activation='softmax'))

    elif architectureName == "Custom Model (CFCN-Shallow)":
        imageSize = customImageSize

        # Create CNN architecture
        modelInput = Input(shape=(customImageSize, customImageSize, 3))

        padding_1 = ZeroPadding2D(padding=1)(modelInput)
        conv2D_1a = Conv2D(32, (5, 5), strides=(2, 2),
                           activation='relu')(padding_1)
        conv2D_1b = Conv2D(32, (11, 11), strides=(4, 4),
                           activation='relu')(modelInput)
        # conv2D_1c = Conv2D(32, (5,5), activation='relu')(modelInput)
        conv2D_1 = Conv2D(32, (3, 3), activation='relu')(modelInput)
        pool_1 = MaxPooling2D((2, 2), strides=(2, 2))(conv2D_1)

        merged1 = keras.layers.concatenate([pool_1, conv2D_1a])

        conv2D_2a = Conv2D(64, (5, 5), strides=(2, 2),
                           activation='relu')(merged1)
        conv2D_2 = Conv2D(64, (3, 3), activation='relu')(merged1)
        # pool_2a = MaxPooling2D((4, 4), strides=(4,4))(conv2D_1c)
        pool_2 = MaxPooling2D((2, 2), strides=(2, 2))(conv2D_2)

        merged2 = keras.layers.concatenate([pool_2, conv2D_2a, conv2D_1b])

        padding_2 = ZeroPadding2D(padding=1)(merged2)
        conv2D_3a = Conv2D(128, (5, 5), strides=(2, 2),
                           activation='relu')(padding_2)
        conv2D_3 = Conv2D(128, (3, 3), activation='relu')(merged2)
        pool_3 = MaxPooling2D((2, 2), strides=(2, 2))(conv2D_3)

        merged3 = keras.layers.concatenate([pool_3, conv2D_3a])

        dense = Flatten()(merged3)
        output = Dense(128, activation='relu')(dense)
        dropout = Dropout(0.5)(output)
        predictions = Dense(classes, activation='softmax')(dropout)
        baseModel = Model(inputs=modelInput, outputs=predictions)

    elif architectureName == "Custom Model (Linear-5 layers)":
        imageSize = customImageSize

        baseModel = Sequential()
        baseModel.add(
            Conv2D(128, (3, 3),
                   activation='relu',
                   input_shape=(customImageSize, customImageSize, 3)))
        baseModel.add(MaxPooling2D(pool_size=(2, 2)))
        baseModel.add(Conv2D(64, (3, 3), activation='relu'))
        baseModel.add(MaxPooling2D(pool_size=(2, 2)))
        baseModel.add(Conv2D(32, (3, 3), activation='relu'))
        baseModel.add(MaxPooling2D(pool_size=(2, 2)))
        baseModel.add(Conv2D(32, (3, 3), activation='relu'))
        baseModel.add(MaxPooling2D(pool_size=(2, 2)))
        baseModel.add(Conv2D(32, (3, 3), activation='relu'))
        baseModel.add(Flatten())
        baseModel.add(Dropout(0.5))
        baseModel.add(
            Dense(128,
                  activation='relu',
                  kernel_regularizer=regularizers.l2(0.01)))
        baseModel.add(Dropout(0.5))
        baseModel.add(
            Dense(64,
                  activation='relu',
                  kernel_regularizer=regularizers.l2(0.01)))
        baseModel.add(Dense(classes, activation='softmax'))

    elif architectureName == "Custom Model (CFNC-Deep)":
        imageSize = customImageSize

        # Create CNN architecture
        modelInput = Input(shape=(customImageSize, customImageSize, 3))

        padding_1 = ZeroPadding2D(padding=1)(modelInput)

        conv2D_1a = Conv2D(128, (3, 3), activation='relu')(modelInput)
        conv2d_1b = Conv2D(128, (5, 5), strides=(2, 2),
                           activation='relu')(padding_1)
        conv2d_1c = Conv2D(128, (11, 11), strides=(4, 4),
                           activation='relu')(modelInput)

        pool_1 = MaxPooling2D((2, 2), strides=(2, 2))(conv2D_1a)

        merged_1 = keras.layers.concatenate([pool_1, conv2d_1b])

        conv2D_2a = Conv2D(64, (3, 3), activation='relu')(merged_1)
        conv2D_2b = Conv2D(64, (5, 5), strides=(2, 2),
                           activation='relu')(merged_1)

        pool_2 = MaxPooling2D((2, 2), strides=(2, 2))(conv2D_2a)

        merged_2 = keras.layers.concatenate([pool_2, conv2D_2b, conv2d_1c])

        pool_2a = MaxPooling2D((2, 2), strides=(2, 2))(merged_2)

        padding_2 = ZeroPadding2D(padding=1)(merged_2)

        conv2D_3a = Conv2D(32, (3, 3), activation='relu')(merged_2)
        conv2D_3b = Conv2D(32, (5, 5), strides=(2, 2),
                           activation='relu')(padding_2)
        conv2D_2c = Conv2D(64, (11, 11), strides=(4, 4),
                           activation='relu')(padding_2)

        pool_3 = MaxPooling2D((2, 2), strides=(2, 2))(conv2D_3a)

        merged_3 = keras.layers.concatenate([pool_3, conv2D_3b])

        padding_3 = ZeroPadding2D(padding=1)(merged_3)

        conv2D_4a = Conv2D(32, (3, 3), activation='relu')(merged_3)
        conv2D_4b = Conv2D(32, (5, 5), strides=(2, 2),
                           activation='relu')(padding_3)
        conv2D_4c = Conv2D(32, (5, 5), strides=(2, 2),
                           activation='relu')(pool_2a)
        conv2D_4d = Conv2D(32, (7, 7), strides=(2, 2),
                           activation='relu')(merged_3)

        pool_4 = MaxPooling2D((2, 2), strides=(2, 2))(conv2D_4a)

        merged_4 = keras.layers.concatenate(
            [pool_4, conv2D_4b, conv2D_2c, conv2D_4c])

        conv2D_5 = Conv2D(32, (3, 3), activation='relu')(merged_4)

        merged_5 = keras.layers.concatenate([conv2D_5, conv2D_4d])

        flatten = Flatten()(merged_5)
        dropout = Dropout(0.5)(flatten)
        dense_1 = Dense(128, activation='relu')(dropout)
        dropout = Dropout(0.5)(dense_1)
        dense_1 = Dense(64, activation='relu')(dropout)
        predictions = Dense(classes, activation='softmax')(dropout)

        baseModel = Model(inputs=modelInput, outputs=predictions)

    return imageSize, baseModel