Beispiel #1
0
fcn_vgg16 = FCN(input_shape=(224, 224, 3),
                classes=21,
                weight_decay=3e-3,
                weights='imagenet',
                trainable_encoder=True)
optimizer = keras.optimizers.Adam(1e-4)

fcn_vgg16.compile(optimizer=optimizer,
                  loss='categorical_crossentropy',
                  metrics=['accuracy'])

fcn_vgg16.fit_generator(
    datagen.flow_from_imageset(class_mode='categorical',
                               classes=21,
                               batch_size=1,
                               shuffle=True,
                               image_set_loader=train_loader),
    steps_per_epoch=1112,
    epochs=100,
    validation_data=datagen.flow_from_imageset(class_mode='categorical',
                                               classes=21,
                                               batch_size=1,
                                               shuffle=True,
                                               image_set_loader=val_loader),
    validation_steps=1111,
    verbose=1,
    callbacks=[
        lr_reducer, early_stopper, csv_logger, checkpointer, nan_terminator
    ])
Beispiel #2
0
                              patience=100)
csv_logger = CSVLogger('output/{}_fcn_vgg16.csv'.format(
    datetime.datetime.now().isoformat()))

datagen = PascalVocGenerator(**init_args['pascal_voc_generator']['train'])

train_loader = ImageSetLoader(**init_args['image_set_loader']['train'])
val_loader = ImageSetLoader(**init_args['image_set_loader']['val'])

fcn_vgg16 = FCN(basenet='vgg16', input_shape=(500, 500, 3), num_output=21)
fcn_vgg16.compile(optimizer='rmsprop',
                  loss='categorical_crossentropy',
                  metrics=['accuracy', 'categorical_accuracy'])

flow_args = init_args['pascal_voc_generator']['flow_from_imageset']
train_flow_args = flow_args.copy()
train_flow_args['image_set_loader'] = train_loader
val_flow_args = flow_args.copy()
val_flow_args['image_set_loader'] = val_loader

fcn_vgg16.fit_generator(
    datagen.flow_from_imageset(**train_flow_args),
    steps_per_epoch=1112,
    epochs=100,
    validation_data=datagen.flow_from_imageset(**val_flow_args),
    validation_steps=1111,
    verbose=1,
    max_q_size=100,
    callbacks=[lr_reducer, early_stopper, csv_logger])
fcn_vgg16.save('output/fcn_vgg16.h5')
Beispiel #3
0
def main():
    '''
    Main function
    '''

    # Define common arguments
    checkpointer = ModelCheckpoint(filepath='output/fcn_vgg16_weights_tmp.h5',
                                   verbose=1,
                                   save_best_only=True)
    lr_reducer = ReduceLROnPlateau(monitor='val_loss',
                                   factor=np.sqrt(0.1),
                                   cooldown=0,
                                   patience=10,
                                   min_lr=1e-12)
    early_stopper = EarlyStopping(monitor='val_loss',
                                  min_delta=0.001,
                                  patience=30)
    nan_terminator = TerminateOnNaN()
    csv_logger = CSVLogger('output/tmp_fcn_vgg16.csv')

    # Set data generator
    datagen = PascalVocGenerator(image_shape=[224, 224, 3],
                                 image_resample=True,
                                 pixelwise_center=True,
                                 pixel_mean=[115.85100, 110.50989, 102.16182],
                                 pixelwise_std_normalization=True,
                                 pixel_std=[70.30930, 69.41244, 72.60676])

    # Define training set and validation set
    train_loader = ImageSetLoader(*arg_gen('train'))
    val_loader = ImageSetLoader(*arg_gen('val'))

    # Construct model
    fcn_vgg16 = model.fcn_vgg16(input_shape=(224, 224, 3),
                                classes=21,
                                weight_decay=3e-3,
                                weights='imagenet',
                                trainable_encoder=False)

    # Set optimizer
    optimizer = Adam(1e-4)

    # Compile model
    fcn_vgg16.compile(optimizer=optimizer,
                      loss='categorical_crossentropy',
                      metrics=['accuracy'])

    # Fit model with the above generators
    fcn_vgg16.fit_generator(
        datagen.flow_from_imageset(class_mode='categorical',
                                   classes=21,
                                   batch_size=1,
                                   shuffle=True,
                                   image_set_loader=train_loader),
        steps_per_epoch=1112,
        epochs=40,
        validation_data=datagen.flow_from_imageset(
            class_mode='categorical',
            classes=21,
            batch_size=1,
            shuffle=True,
            image_set_loader=val_loader),
        validation_steps=1111,
        verbose=1,
        callbacks=[
            lr_reducer, early_stopper, csv_logger, checkpointer, nan_terminator
        ])

    # Save weights
    fcn_vgg16.save('output/fcn_vgg16.h5')