Esempio n. 1
0
def main(*args, **kwargs):
    args = argparse.ArgumentParser()
    args.add_argument('name',
                      type=str,
                      choices=list_supported_models(),
                      help='the model name can be found in model_alias.py')
    # basic options
    args.add_argument('--scale',
                      type=int,
                      default=4,
                      help='scale factor, default 4')
    args.add_argument('--channel',
                      type=int,
                      default=3,
                      help='image channels, default 3')
    args.add_argument('--batch',
                      type=int,
                      default=16,
                      help='training batch size, default 16')
    args.add_argument('--epochs',
                      type=int,
                      default=200,
                      help='training epochs, default 200')
    args.add_argument('--steps_per_epoch',
                      type=int,
                      default=200,
                      help='training steps each epoch, default 200')
    args.add_argument('--retrain',
                      type=bool,
                      default=False,
                      help='retrain the model from scratch')
    # dataset options
    args.add_argument('--dataconfig',
                      type=str,
                      default='../Data/datasets.json',
                      help='the path to dataset config json file')
    args.add_argument(
        '--dataset',
        type=str,
        default='91-IMAGE',
        help=
        'specified dataset name(as described in config file, default 91-image')
    args.add_argument(
        '--patch_size',
        type=int,
        default=48,
        help=
        'patch size of cropped training and validating sub-images, default 48')
    args.add_argument('--depth',
                      type=int,
                      default=1,
                      help='image depth used for video sources, default 1')
    args.add_argument(
        '--parallel',
        type=int,
        default=1,
        help='number of cores used to load training sets in parallel')
    args.add_argument('--memory',
                      type=str,
                      default=None,
                      help='limit the memory usage. i.e. 4GB, 100MB')
    # learning options
    args.add_argument('--lr',
                      type=float,
                      default=1e-4,
                      help='initial learning rate, default 1e-4')
    args.add_argument('--lr_decay',
                      type=float,
                      default=1,
                      help='learning rate decay, default 1')
    args.add_argument('--lr_decay_step',
                      type=int,
                      default=1000,
                      help='learning rate decay step')
    # output options
    args.add_argument(
        '--test',
        type=str,
        default=None,
        help='specify a dataset used to test, or use --dataset values if None')
    args.add_argument('--predict',
                      type=str,
                      default=None,
                      help='evaluate model on given files')
    args.add_argument(
        '--savedir',
        type=str,
        default='../Results',
        help='directory to save model checkpoints, default ../Results')
    args.add_argument('--output_color',
                      type=str,
                      default='RGB',
                      choices=('RGB', 'L', 'GRAY', 'Y'),
                      help='output color mode, default RGB')
    args.add_argument('--output_index',
                      type=int,
                      default=-1,
                      help='access index of model outputs to save, default -1')
    args.add_argument(
        '--export_pb',
        type=str,
        default=None,
        help=
        'if not None, specify the path that export trained model into pb format'
    )
    args.add_argument(
        '--comment',
        type=str,
        default=None,
        help='add a suffix to output dir to distinguish each experiments')
    # callbacks
    args.add_argument(
        '--add_noise',
        type=float,
        default=None,
        help='if not None, add noise with given stddev to input features')
    args.add_argument(
        '--add_random_noise',
        type=list,
        default=None,
        help=
        'if not None, add random noise with given stddev bound [low, high, step=1]'
    )
    args.add_argument('--custom_feature_cb',
                      type=str,
                      default=None,
                      help='customized callbacks, defined in `custom_api.py`')

    args = args.parse_args()
    if Path(f'parameters/{args.name}.json').exists():
        model_args = json.load(open(f'parameters/{args.name}.json', mode='r'))
    else:
        print(
            f'[warning] model parameter file not found, use default parameters'
        )
        model_args = dict()
    model = get_model(args.name)(scale=args.scale,
                                 channel=args.channel,
                                 **model_args)

    dataset = load_datasets(args.dataconfig)[args.dataset.upper()]
    dataset.setattr(patch_size=args.patch_size, depth=args.depth)
    save_root = f'{args.savedir}/{model.name}_sc{args.scale}_c{args.channel}'
    if args.comment:
        save_root += '_' + args.comment
    with Environment(model,
                     f'{save_root}/save',
                     f'{save_root}/log',
                     feature_index=model.feature_index,
                     label_index=model.label_index) as env:
        if args.add_noise:
            env.feature_callbacks = [add_noise(args.add_noise)]
        if args.add_random_noise:
            env.feature_callbacks = [add_random_noise(*args.add_random_noise)]
        if args.custom_feature_cb:
            func = args.custom_feature_cb.split(' ')
            for f_name in func:
                env.feature_callbacks += [globals()[f_name]]
        fit_fn = partial(env.fit,
                         args.batch,
                         args.epochs,
                         args.steps_per_epoch,
                         dataset,
                         augmentation=True,
                         restart=args.retrain,
                         learning_rate=args.lr,
                         learning_rate_schedule=lr_decay(
                             'stair',
                             args.lr,
                             decay_step=args.lr_decay_step,
                             decay_rate=args.lr_decay),
                         parallel=args.parallel,
                         memory_usage=args.memory)
        if model.channel > 1:
            fit_fn(convert_to='RGB')
            test_format = 'RGB'
        else:
            fit_fn(convery_to='GRAY')
            # use callback to generate colored images from grayscale ones
            # all models inputs is gray image however
            test_format = 'YUV'
            env.feature_callbacks += [to_gray()]
            env.label_callbacks = [to_gray()]
            if args.output_color == 'RGB':
                env.output_callbacks += [to_rgb()]
        if args.test:
            test_set = load_datasets(args.dataconfig)[args.test.upper()]
            test_set.setattr(patch_size=args.patch_size, depth=args.depth)
        else:
            test_set = dataset
        env.output_callbacks += [
            save_image(f'{save_root}/test', args.output_index)
        ]
        env.test(test_set,
                 convert_to=test_format)  # load image with 3 channels
        if args.predict:
            pth = Path(args.predict)
            if not pth.exists():
                raise ValueError('[Error] File path does not exist')
            if pth.is_dir():
                images = list(pth.glob('*'))
                if not images:
                    images = pth.iterdir()
            elif pth.is_file():
                images = pth
            env.fi, fi_old = 0, env.fi  # upscale directly
            env.output_callbacks[-1] = save_image(f'{save_root}/output',
                                                  args.output_index)
            env.predict(images, convert_to=test_format, depth=args.depth)
            env.fi = fi_old
        elif test_set.pred:
            env.fi, fi_old = 0, env.fi  # upscale directly
            env.output_callbacks[-1] = save_image(f'{save_root}/output',
                                                  args.output_index)
            env.predict(test_set.pred,
                        convert_to=test_format,
                        depth=args.depth)
            env.fi = fi_old
        if args.export_pb:
            env.export(args.export_pb)
Esempio n. 2
0
def main(*args, **kwargs):
    args = argparse.ArgumentParser()
    args.add_argument('name',
                      type=str,
                      choices=list_supported_models(),
                      help='the model name can be found in model_alias.py')
    args.add_argument('--scale',
                      type=int,
                      default=3,
                      help='scale factor, default 3')
    args.add_argument('--channel',
                      type=int,
                      default=1,
                      help='image channels, default 1')
    args.add_argument('--dataconfig',
                      type=str,
                      default='../Data/datasets.json',
                      help='the path to dataset config json file')
    args.add_argument(
        '--dataset',
        type=str,
        default='91-IMAGE',
        help=
        'specified dataset name(as described in config file, default 91-image')
    args.add_argument('--batch',
                      type=int,
                      default=64,
                      help='training batch size, default 64')
    args.add_argument('--epochs',
                      type=int,
                      default=200,
                      help='training epochs, default 200')
    args.add_argument(
        '--patch_size',
        type=int,
        default=48,
        help=
        'patch size of cropped training and validating sub-images, default 48')
    args.add_argument(
        '--strides',
        type=int,
        default=48,
        help='crop stride if random_patches is set 0, default 48')
    args.add_argument('--depth',
                      type=int,
                      default=1,
                      help='image1 depth used for video sources, default 1')
    args.add_argument(
        '--random_patches',
        type=int,
        default=0,
        help=
        'if set more than 0, use random crop to generate `random_patches` sub-image1 batches'
    )
    args.add_argument('--retrain',
                      type=int,
                      default=0,
                      help='retrain the model from scratch, default 0')
    args.add_argument('--lr',
                      type=float,
                      default=1e-4,
                      help='initial learning rate, default 1e-4')
    args.add_argument('--lr_decay',
                      type=float,
                      default=1,
                      help='learning rate decay, default 1')
    args.add_argument('--lr_decay_step',
                      type=int,
                      default=1000,
                      help='learning rate decay step')
    args.add_argument(
        '--add_noise',
        type=float,
        default=None,
        help='if not None, add noise with given stddev to input features')
    args.add_argument(
        '--add_random_noise',
        type=list,
        default=None,
        help=
        'if not None, add random noise with given stddev bound [low, high, step=1]'
    )
    args.add_argument(
        '--test',
        type=str,
        default=None,
        help='specify a dataset used to test, or use --dataset values if None')
    args.add_argument('--predict',
                      type=str,
                      default=None,
                      help='evaluate model on given files')
    args.add_argument(
        '--savedir',
        type=str,
        default='../Results',
        help='directory to save model checkpoints, default ../Results')
    args.add_argument('--output_color',
                      type=str,
                      default='RGB',
                      choices=('RGB', 'L', 'GRAY', 'Y'),
                      help='output color mode, default RGB')
    args.add_argument('--output_index',
                      type=int,
                      default=-1,
                      help='access index of model outputs to save, default -1')
    args.add_argument(
        '--export_pb',
        type=str,
        default=None,
        help=
        'if not None, specify the path that export trained model into pb format'
    )
    args.add_argument('--comment', type=str, default=None)
    args.add_argument('--custom_feature_cb', type=str, default=None)

    args = args.parse_args()
    model_args = json.load(open(f'parameters/{args.name}.json', mode='r'))

    model = get_model(args.name)(scale=args.scale,
                                 channel=args.channel,
                                 **model_args)
    dataset = load_datasets(args.dataconfig)[args.dataset.upper()]
    dataset.setattr(patch_size=args.patch_size,
                    strides=args.strides,
                    depth=args.depth)
    if args.random_patches:
        dataset.setattr(random=True,
                        max_patches=args.batch * args.random_patches)
    save_root = f'{args.savedir}/{model.name}_sc{args.scale}_c{args.channel}'
    if args.comment:
        save_root += '_' + args.comment
    with Environment(model,
                     f'{save_root}/save',
                     f'{save_root}/log',
                     feature_index=model.feature_index,
                     label_index=model.label_index) as env:
        if args.add_noise:
            env.feature_callbacks = [add_noise(args.add_noise)]
        if args.add_random_noise:
            env.feature_callbacks = [add_random_noise(*args.add_random_noise)]
        if args.custom_feature_cb:
            func = args.custom_feature_cb.split(' ')
            for f_name in func:
                env.feature_callbacks += [globals()[f_name]]
        fit_fn = partial(env.fit,
                         args.batch,
                         args.epochs,
                         dataset,
                         restart=args.retrain,
                         learning_rate=args.lr,
                         learning_rate_schedule=lr_decay(
                             'stair',
                             args.lr,
                             decay_step=args.lr_decay_step,
                             decay_rate=args.lr_decay))
        if model.channel > 1:
            fit_fn(convert_to='RGB')
            test_format = 'RGB'
        else:
            fit_fn(convery_to='GRAY')
            # use callback to generate colored images from grayscale ones
            # all models inputs is gray image1 however
            test_format = 'YUV'
            env.feature_callbacks += [to_gray()]
            env.label_callbacks = [to_gray()]
            if args.output_color == 'RGB':
                env.output_callbacks += [to_rgb()]
        if args.test:
            test_set = load_datasets(args.dataconfig)[args.test.upper()]
            test_set.setattr(patch_size=args.patch_size,
                             strides=args.strides,
                             depth=args.depth)
        else:
            test_set = dataset
        env.output_callbacks += [
            save_image(f'{save_root}/test', args.output_index)
        ]
        env.test(test_set,
                 convert_to=test_format)  # load image1 with 3 channels
        if args.predict:
            pth = Path(args.predict)
            if not pth.exists():
                raise ValueError('[Error] File path does not exist')
            images = pth.rglob('*')
            env.fi, fi_old = 0, env.fi  # upscale directly
            env.output_callbacks[-1] = save_image(f'{save_root}/output',
                                                  args.output_index)
            env.predict(images, convert_to=test_format)
            env.fi = fi_old
    if args.export_pb:
        model = get_model(args.name)(scale=args.scale, rgb_input=True)
        with Environment(model,
                         f'{save_root}/save',
                         f'{save_root}/log',
                         feature_index=model.feature_index,
                         label_index=model.label_index) as env:
            env.export(args.export_pb)
Esempio n. 3
0
def main(*args, **kwargs):
    args = argparse.ArgumentParser()
    args.add_argument('name', type=str, choices=list_supported_models(),
                      help='the model name can be found in model_alias.py')
    args.add_argument('--scale', type=int, default=3, help='scale factor')
    args.add_argument('--dataconfig', type=str, default='../Data/datasets.json',
                      help='the path to dataset config json file')
    args.add_argument('--dataset', type=str, default='91-IMAGE',
                      help='specified dataset name(as described in config file')
    args.add_argument('--batch', type=int, default=64, help='training batch size')
    args.add_argument('--epochs', type=int, default=200, help='training epochs')
    args.add_argument('--patch_size', type=int, default=48,
                      help='patch size of cropped training and validating sub-images')
    args.add_argument('--strides', type=int, default=48, help='crop stride if random_patches is set 0')
    args.add_argument('--depth', type=int, default=1, help='image1 depth used for video sources')
    args.add_argument('--random_patches', type=int, default=0,
                      help='if set more than 0, use random crop to generate `random_patches` sub-image1 batches')
    args.add_argument('--retrain', type=int, default=0, help='retrain the model from scratch')
    args.add_argument('--lr', type=float, default=1e-4, help='initial learning rate')
    args.add_argument('--lr_decay', type=float, default=1, help='learning rate decay')
    args.add_argument('--lr_decay_step', type=int, default=1000, help='learning rate decay step')
    args.add_argument('--add_noise', type=float, default=None,
                      help='if not None, add noise with given stddev to input features')
    args.add_argument('--add_random_noise', type=list, default=None,
                      help='if not None, add random noise with given stddev bound [low, high, step=1]')
    args.add_argument('--test', type=bool, default=True, help='test model and save tested images')
    args.add_argument('--savedir', type=str, default='../Results', help='directory to save model checkpoints')
    args.add_argument('--output_color', type=str, default='RGB', choices=('RGB', 'L', 'GRAY', 'Y'),
                      help='output color mode')
    args.add_argument('--export_pb', type=str, default=None,
                      help='if not None, specify the path that export trained model into pb format')

    args = args.parse_args()
    model_args = json.load(open(f'parameters/{args.name}.json', mode='r'))

    model = get_model(args.name)(scale=args.scale, **model_args)
    dataset = load_datasets(args.dataconfig)[args.dataset.upper()]
    dataset.setattr(patch_size=args.patch_size, strides=args.strides, depth=args.depth)
    if args.random_patches:
        dataset.setattr(random=True, max_patches=args.batch * args.random_patches)
    with Environment(model, f'{args.savedir}/{model.name}/save', f'{args.savedir}/{model.name}/log',
                     feature_index=model.feature_index, label_index=model.label_index) as env:
        if args.add_noise:
            env.feature_callbacks = [add_noise(args.add_noise)]
        if args.add_random_noise:
            env.feature_callbacks = [add_random_noise(*args.add_random_noise)]

        env.fit(args.batch, args.epochs, dataset, restart=args.retrain,
                learning_rate=args.lr,
                learning_rate_schedule=lr_decay('stair', args.lr,
                                                decay_step=args.lr_decay_step,
                                                decay_rate=args.lr_decay))
        if args.test:
            # use callback to generate colored images from grayscale ones
            # all models inputs is gray image1 however
            env.feature_callbacks += [to_gray()]
            env.label_callbacks = [to_gray()]
            if args.output_color == 'RGB':
                env.output_callbacks += [to_rgb()]
            env.output_callbacks += [save_image(f'../Results/{model.name}/test')]
            env.test(dataset, convert_to_gray=False)  # load image1 with 3 channels
    if args.export_pb:
        model = get_model(args.name)(scale=args.scale, rgb_input=True)
        with Environment(model, f'../Results/{model.name}/save', f'../Results/{model.name}/log') as env:
            env.export(args.export_pb)