Esempio n. 1
0
def check_print():
    base_model = resnet.ResNet101(include_top=False,
                                  weights='imagenet',
                                  input_shape=(224, 224, 3),
                                  classes=17,
                                  backend=keras.backend,
                                  layers=keras.layers,
                                  models=keras.models,
                                  utils=keras.utils)
    base_model.trainable = False
    x = base_model.output
    #x = GlobalMaxPooling2D()(x)
    #x = Dense(2048, activation='relu')(x)
    #x = BatchNormalization()(x)
    x = Flatten()(x)
    #x = Dropout(0.5)(x)
    #x = Dense(2048,activation='relu')(x)
    x = Dropout(0.5)(x)
    #x = Dense(2048,activation='relu',kernel_regularizer=l2(0.0003))(x)
    predictions = Dense(NB_CLASS, activation='softmax')(x)
    model = Model(inputs=base_model.input, outputs=predictions)
    model.summary()
    model.compile(optimizer=Adam(lr=0.00005,
                                 beta_1=0.9,
                                 beta_2=0.99,
                                 epsilon=1e-08,
                                 decay=1e-6),
                  loss='categorical_crossentropy',
                  metrics=['accuracy'])
    return model
Esempio n. 2
0
def rmac(input_shape, num_rois):

    #load ResNet101
    resnet101_model = resnet.ResNet101(include_top=True, weights='imagenet', input_tensor=None, input_shape=(3, 224, 224),
                                        pooling=None, classes=1000, backend=keras.backend, layers=keras.layers, models=keras.models, utils=keras.utils)
    # Load VGG16
    #vgg16_model = VGG16('', input_shape)
    # vgg16_model = VGG16(include_top=True, weights='imagenet', input_tensor=None, input_shape=(3, 224, 224), pooling=None, classes=1000)

    # Regions as input
    in_roi = Input(shape=(num_rois, 4), name='input_roi')

    #reshape
#    xxx = K.permute_dimensions(vgg16_model.layers[-5].output, (0, 3, 1, 2))    

    # ROI pooling
    layer_name = resnet101_model.layers[-4].name
    layer_output = resnet101_model.layers[-4].output
    print("layer name : " + layer_name)
    print(layer_output)
    # print('layer name : ' + vgg16_model.layers[-5].name)
    # print(vgg16_model.layers[-5].output)
    x = RoiPooling([1], num_rois)([layer_output, in_roi])

    # Normalization
    x = Lambda(lambda x: K.l2_normalize(x, axis=2), name='norm1')(x)

    # PCA
    x = TimeDistributed(Dense(2048, name='pca',
                              kernel_initializer='identity',
                              bias_initializer='zeros'))(x)

    # Normalization
    x = Lambda(lambda x: K.l2_normalize(x, axis=2), name='pca_norm')(x)

    # Addition
    rmac = Lambda(addition, output_shape=(2048,), name='rmac')(x)

    # # Normalization
    rmac_norm = Lambda(lambda x: K.l2_normalize(x, axis=1), name='rmac_norm')(rmac)

    # Define model
    model = Model([resnet101_model.input, in_roi], rmac_norm)

    # Load PCA weights
    #todo pca layer is trained by data ???
    mat = scipy.io.loadmat(utils.DATA_DIR + utils.PCA_FILE)
    b = np.squeeze(mat['bias'], axis=1)
    w = np.transpose(mat['weights'])
    model.layers[-4].set_weights([w, b])

    return model
def ResNet101(*args, **kwargs):
    return resnet.ResNet101(*args, **kwargs)