def resume_routine_vgg(config, weights_path, verbose=(2, 2), nb_epoch_finetune=15, nb_epoch_after=50, stiefel_observed=None, stiefel_lr=0.01, by_name=False): """ Finetune the ResNet-DCov Returns ------- """ image_gen = ImageDataGeneratorAdvanced( TARGET_SIZE, RESCALE_SMALL, True, horizontal_flip=True, ) resume_model_with_config(VGG16_o2, config, weights_path=weights_path, title='minc2500_VGG', verbose=verbose, image_gen=image_gen, nb_epoch_after=nb_epoch_after, nb_epoch_finetune=nb_epoch_finetune, stiefel_lr=stiefel_lr, stiefel_observed=stiefel_observed, by_name=by_name)
def test_routine_resnet(config): """ Finetune the ResNet-DCov Returns ------- """ nb_epoch_finetune = 2 nb_epoch_after = 50 title = 'test_minc_orig_cov' image_gen = ImageDataGeneratorAdvanced( TARGET_SIZE, RESCALE_SMALL, True, horizontal_flip=True, # preprocessing_function=preprocess_image_for_imagenet # channelwise_std_normalization=True ) run_finetune(ResNet50_o2, mincorig_finetune, input_shape, config, image_gen, nb_classes=nb_classes, nb_epoch_finetune=nb_epoch_finetune, nb_epoch_after=nb_epoch_after, title=title, verbose=(2, 1))
def run_routine_resnet_multibranch(config, verbose=(2, 2), nb_epoch_finetune=15, nb_epoch_after=50, stiefel_observed=None, stiefel_lr=0.01): """ Finetune the ResNet-DCov Returns ------- """ image_gen = ImageDataGeneratorAdvanced( TARGET_SIZE, RESCALE_SMALL, True, horizontal_flip=True, preprocessing_function=preprocess_image_for_imagenet) run_model_with_config(ResNet50_o2_multibranch, config, title='minc_orig_resnet_MB', verbose=verbose, image_gen=image_gen, nb_epoch_after=nb_epoch_after, nb_epoch_finetune=nb_epoch_finetune, stiefel_lr=stiefel_lr, stiefel_observed=stiefel_observed)
def baseline_finetune_resnet(exp): nb_epoch_finetune = 10 nb_epoch_after = 50 if exp == 1: model = ResNet50_o1(denses=[], nb_classes=nb_classes, input_shape=input_shape, freeze_conv=True) model.name = 'baseline_resnet' elif exp == 2: last_conv_feature_maps = [1024, 512] model = ResNet50_o1(denses=[], nb_classes=nb_classes, input_shape=input_shape, freeze_conv=True, last_conv_feature_maps=last_conv_feature_maps) model.name = 'baseline_resnet_with_1x1' else: return image_gen = ImageDataGeneratorAdvanced( TARGET_SIZE, RESCALE_SMALL, True, horizontal_flip=True, ) mincorig_finetune(model, image_gen=image_gen, title='mincorig_finetune_resnet', nb_epoch_finetune=nb_epoch_finetune, nb_epoch_after=nb_epoch_after, batch_size=32, early_stop=True)
def run_routine_resnet_multibranch(config, verbose=(2, 2), nb_epoch_finetune=15, nb_epoch_after=50, stiefel_observed=None, stiefel_lr=0.01): """ Finetune the ResNet-DCov Returns ------- """ image_gen = ImageDataGeneratorAdvanced( TARGET_SIZE, RESCALE_SMALL, True, horizontal_flip=True, ) finetune_model_with_config(ResNet50_o2_multibranch, imagenet_finetune, config, nb_classes, title='ImageNet_ResNet_MB', verbose=verbose, image_gen=image_gen, nb_epoch_after=nb_epoch_after, nb_epoch_finetune=nb_epoch_finetune, stiefel_lr=stiefel_lr, stiefel_observed=stiefel_observed)
def loadImageNet( image_gen=None, batch_size=32, ): # Absolute paths IMAGENET_PATH = '/home/kyu/.keras/datasets/ILSVRC2015' TARGET_SIZE = (224, 224) RESCALE_SMALL = 256 # ImageNet generator imageNetLoader = ImageNetLoader(IMAGENET_PATH) if image_gen is None: iamge_gen = ImageDataGeneratorAdvanced( TARGET_SIZE, RESCALE_SMALL, True, horizontal_flip=True, preprocessing_function=preprocess_image_for_imagenet # channelwise_std_normalization=True ) train = imageNetLoader.generator('train', image_data_generator=image_gen, batch_size=batch_size) valid = imageNetLoader.generator('valid', image_data_generator=image_gen, batch_size=batch_size) # test = imageNetLoader.generator('valid', image_data_generator=gen) return train, valid
def baseline_finetune_bilinear(exp=1): nb_epoch_finetune = 1 nb_epoch_after = 100 if exp == 1: model = VGG16_bilinear(nb_class=nb_classes, input_shape=input_shape, freeze_conv=True) model.name = 'baseline_vgg16_bilinear' image_gen = ImageDataGeneratorAdvanced( TARGET_SIZE, RESCALE_SMALL, True, horizontal_flip=True, preprocessing_function=preprocess_image_for_imagenet # channelwise_std_normalization=True ) weight_path = '/home/kyu/.keras/models/minc_finetune_vgg16_bilinear-baseline_vgg16_bilinear_1.weights_100' minc2500_finetune(model, image_gen=image_gen, title='minc_finetune_vgg16_bilinear', nb_epoch_finetune=nb_epoch_finetune, nb_epoch_after=nb_epoch_after, weight_path=weight_path, load=True, batch_size=32, early_stop=True, lr_decay=False, lr=0.05)
def resume_routine_resnet_multibranch(config, verbose=(2, 2), weights_path='', nb_epoch_finetune=0, nb_epoch_after=50, stiefel_observed=None, stiefel_lr=0.01, by_name=False): """ Finetune the ResNet-DCov Returns ------- """ image_gen = ImageDataGeneratorAdvanced( TARGET_SIZE, RESCALE_SMALL, True, horizontal_flip=True, ) resume_model_with_config(ResNet50_o2_multibranch, config, weights_path=weights_path, title='mit_indoor_resnet_MB', verbose=verbose, image_gen=image_gen, nb_epoch_after=nb_epoch_after, nb_epoch_finetune=nb_epoch_finetune, stiefel_lr=stiefel_lr, stiefel_observed=stiefel_observed, by_name=by_name)
def run_routine_resnet(config, verbose=(2,2), nb_epoch_finetune=15, nb_epoch_after=50, stiefel_observed=None, stiefel_lr=0.01): """ Finetune the ResNet-DCov Returns ------- """ image_gen = ImageDataGeneratorAdvanced(TARGET_SIZE, RESCALE_SMALL, True, horizontal_flip=True, ) monitor_class = (O2Transform, SecondaryStatistic) # monitor_metrics = ['weight_norm',] # monitor_metrics = ['output_norm',] monitor_metrics = ['matrix_image',] if stiefel_observed is None: run_finetune(ResNet50_o2, mincorig_finetune, nb_classes=nb_classes, input_shape=input_shape, config=config, nb_epoch_finetune=nb_epoch_finetune, nb_epoch_after=nb_epoch_after, image_gen=image_gen, title='minc_orig_resnet50', verbose=verbose, monitor_classes=monitor_class, monitor_measures=monitor_metrics) else: run_finetune_with_Stiefel_layer(ResNet50_o2, mincorig_finetune, nb_classes=nb_classes, input_shape=input_shape, config=config, nb_epoch_finetune=nb_epoch_finetune, nb_epoch_after=nb_epoch_after, image_gen=image_gen, title='minc_orig_resnet50_stiefel', verbose=verbose, monitor_classes=monitor_class, monitor_measures=monitor_metrics, observed_keywords=stiefel_observed, lr=stiefel_lr)
def baseline_finetune_vgg(exp=1): nb_epoch_finetune = 10 nb_epoch_after = 50 if exp == 1: model = VGG16_o1(denses=[4096, 4096], nb_classes=nb_classes, input_shape=input_shape, freeze_conv=True, last_conv=False) model.name = 'baseline_vgg16' elif exp == 2: model = VGG16_o1(denses=[4096, 4096], nb_classes=nb_classes, input_shape=input_shape, freeze_conv=True, last_conv=True) model.name = 'baseline_vgg16_with_1x1' image_gen = ImageDataGeneratorAdvanced( TARGET_SIZE, RESCALE_SMALL, True, horizontal_flip=True, preprocessing_function=preprocess_image_for_imagenet # channelwise_std_normalization=True ) minc2500_finetune(model, image_gen=image_gen, title='minc2500_finetune_vgg16', nb_epoch_finetune=nb_epoch_finetune, nb_epoch_after=nb_epoch_after, batch_size=32, early_stop=True)
def run_residual_cov_resnet(exp): """ Finetune the ResNet-DCov Returns ------- m """ nb_epoch_finetune = 50 nb_epoch_after = 50 config = get_residual_cov_experiment(exp) title = 'minc2500_residual_cov' image_gen = ImageDataGeneratorAdvanced( TARGET_SIZE, RESCALE_SMALL, True, horizontal_flip=True, # preprocessing_function=preprocess_image_for_imagenet # channelwise_std_normalization=True ) run_finetune(ResNet50_o2, minc2500_finetune, input_shape, config, image_gen, nb_classes=nb_classes, nb_epoch_finetune=nb_epoch_finetune, nb_epoch_after=nb_epoch_after, title=title, verbose=(2, 1))
def run_routine_vgg(config, verbose=(2, 2), nb_epoch_finetune=15, nb_epoch_after=50, stiefel_observed=None, stiefel_lr=0.01): """ Finetune the ResNet-DCov Returns ------- """ image_gen = ImageDataGeneratorAdvanced( TARGET_SIZE, RESCALE_SMALL, True, horizontal_flip=True, preprocessing_function=preprocess_image_for_imagenet) monitor_class = (O2Transform, SecondaryStatistic) # monitor_metrics = ['weight_norm',] # monitor_metrics = ['output_norm',] monitor_metrics = [ 'matrix_image', ] run_model_with_config(VGG16_o2, config, title='minc2500_VGG16', verbose=verbose, image_gen=image_gen, nb_epoch_after=nb_epoch_after, nb_epoch_finetune=nb_epoch_finetune, stiefel_lr=stiefel_lr, stiefel_observed=stiefel_observed)
def test_routine_vgg(exp=1): """ Finetune the ResNet-DCov Returns ------- """ nb_epoch_finetune = 10 nb_epoch_after = 10 image_gen = ImageDataGeneratorAdvanced( TARGET_SIZE, RESCALE_SMALL, True, horizontal_flip=True, preprocessing_function=preprocess_image_for_imagenet # channelwise_std_normalization=True ) config = get_experiment_settings(exp) cov_branch = config.cov_branch cov_mode = config.cov_mode cov_regularizer = config.cov_regularizer early_stop = config.early_stop print("Running experiment {}".format(exp)) for param in config.params: for mode in config.mode_list: for cov_output in config.cov_outputs: print("Run routine 1 param {}, mode {}, covariance output {}". format(param, mode, cov_output)) model = VGG16_o2( parametrics=param, mode=mode, cov_branch=cov_branch, cov_mode=cov_mode, nb_classes=nb_classes, cov_branch_output=cov_output, input_shape=input_shape, freeze_conv=True, cov_regularizer=cov_regularizer, last_conv_feature_maps=config.last_conv_feature_maps) mincorig_finetune(model, title='minc_orig_cov_{}_wv{}_{}'.format( cov_branch, str(cov_output), cov_mode), nb_epoch_after=nb_epoch_after, nb_epoch_finetune=nb_epoch_finetune, image_gen=image_gen, batch_size=32, early_stop=early_stop, log=False, verbose=1)
def baseline_VGG(): model = VGG16_o1(denses=[1024], nb_classes=nb_classes, input_shape=input_shape) model.name = 'baseline_vgg16' image_gen = ImageDataGeneratorAdvanced( TARGET_SIZE, RESCALE_SMALL, True, horizontal_flip=True, preprocessing_function=preprocess_image_for_imagenet # channelwise_std_normalization=True ) dtd_fitting(model, image_gen)
def run_model_with_config(model, config, title='minc2500', image_gen=None, verbose=(2, 2), nb_epoch_finetune=15, nb_epoch_after=50, stiefel_observed=None, stiefel_lr=0.01): """ Finetune the ResNet-DCov Returns ------- """ if image_gen is None: image_gen = ImageDataGeneratorAdvanced( TARGET_SIZE, RESCALE_SMALL, True, horizontal_flip=True, ) monitor_class = (O2Transform, SecondaryStatistic) # monitor_metrics = ['weight_norm',] # monitor_metrics = ['output_norm',] monitor_metrics = [ 'matrix_image', ] finetune_model_with_config( model, minc2500_finetune, config, nb_classes, input_shape, title=title, image_gen=image_gen, verbose=verbose, nb_epoch_finetune=nb_epoch_finetune, nb_epoch_after=nb_epoch_after, stiefel_observed=stiefel_observed, stiefel_lr=stiefel_lr, )
def resume_model_with_config(model, config, title='cifar10', image_gen=None, weights_path='', verbose=(2, 2), nb_epoch_finetune=0, nb_epoch_after=50, stiefel_observed=None, stiefel_lr=0.0001, by_name=False): """ Finetune the ResNet-DCov Returns ------- """ if image_gen is None: image_gen = ImageDataGeneratorAdvanced(TARGET_SIZE, RESCALE_SMALL, True, horizontal_flip=True, ) monitor_class = (O2Transform, SecondaryStatistic) # monitor_metrics = ['weight_norm',] # monitor_metrics = ['output_norm',] monitor_metrics = ['matrix_image', ] if stiefel_observed is None: resume_finetune(model, cifar_train, weights_path=weights_path, nb_classes=nb_classes, input_shape=input_shape, config=config, nb_epoch_finetune=nb_epoch_finetune, nb_epoch_after=nb_epoch_after, image_gen=image_gen, title=title, verbose=verbose, monitor_classes=monitor_class, monitor_measures=monitor_metrics, by_name=by_name) else: resume_finetune_with_Stiefel_layer(model, cifar_train, weights_path=weights_path, nb_classes=nb_classes, input_shape=input_shape, config=config, nb_epoch_finetune=nb_epoch_finetune, nb_epoch_after=nb_epoch_after, image_gen=image_gen, title=title+'-stiefel', verbose=verbose, monitor_classes=monitor_class, monitor_measures=monitor_metrics, observed_keywords=stiefel_observed, lr=stiefel_lr, by_name=by_name)
TARGET_SIZE = (224, 224) RESCALE_SMALL = 256 BATCH_SIZE = 32 NB_EPOCH = 1000 VERBOSE = 1 SAVE_LOG = True VALIDATION = True # Xray Loader xray_loader = XrayLoader() gen = ImageDataGeneratorAdvanced( TARGET_SIZE, RESCALE_SMALL, True, horizontal_flip=True, preprocessing_function=preprocess_image_for_imagenet # channelwise_std_normalization=True ) train = xray_loader.generator('train', batch_size=BATCH_SIZE) test = xray_loader.generator('test', batch_size=BATCH_SIZE) # train = xray_loader.generator('train', batch_size=BATCH_SIZE, image_data_generator=gen) # test = xray_loader.generator('test', batch_size=BATCH_SIZE, image_data_generator=gen) def fit_model(model, load=False, save=True, title='swisscom', nb_epoch=10): # sgd = SGD(lr=0.0001, decay=1e-6, momentum=0.9, nesterov=False) sgd = SGDWithWeightnorm(lr=0.0001, decay=1e-6, momentum=0.9) model.compile(loss='categorical_crossentropy',