Exemple #1
0
def main():

    parser = argparse.ArgumentParser(
        formatter_class=argparse.ArgumentDefaultsHelpFormatter)
    parser.add_argument('--config-file',
                        type=str,
                        default='',
                        help='path to config file')
    parser.add_argument('--output-name', type=str, default='model')
    parser.add_argument('--verbose',
                        default=False,
                        action='store_true',
                        help='Verbose mode for onnx.export')
    args = parser.parse_args()

    cfg = get_default_config()
    if args.config_file:
        cfg.merge_from_file(args.config_file)
    cfg.freeze()

    model = build_model(
        name=cfg.model.name,
        num_classes=1041,  # Does not matter in conversion
        loss=cfg.loss.name,
        pretrained=False,
        use_gpu=True,
        feature_dim=cfg.model.feature_dim,
        fpn=cfg.model.fpn,
        fpn_dim=cfg.model.fpn_dim,
        gap_as_conv=cfg.model.gap_as_conv,
        input_size=(cfg.data.height, cfg.data.width),
        IN_first=cfg.model.IN_first)

    load_pretrained_weights(model, cfg.model.load_weights)
    model.eval()

    _, transform = build_transforms(cfg.data.height,
                                    cfg.data.width,
                                    transforms=cfg.data.transforms,
                                    norm_mean=cfg.data.norm_mean,
                                    norm_std=cfg.data.norm_std,
                                    apply_masks_to_test=False)

    input_size = (cfg.data.height, cfg.data.width, 3)
    img = np.random.rand(*input_size).astype(np.float32)
    img = np.uint8(img * 255)
    im = Image.fromarray(img)
    blob = transform(im).unsqueeze(0)

    torch.onnx.export(
        model,
        blob,
        args.output_name + '.onnx',
        verbose=False,
        export_params=True,
        input_names=['data'],
        output_names=['reid_embedding'],
        opset_version=9)  # 9th version resolves nearest upsample issue
def main():
    parser = argparse.ArgumentParser(
        formatter_class=argparse.ArgumentDefaultsHelpFormatter)
    parser.add_argument('--config-file',
                        type=str,
                        default='',
                        help='path to config file')
    parser.add_argument('-s',
                        '--sources',
                        type=str,
                        nargs='+',
                        help='source datasets (delimited by space)')
    parser.add_argument('-t',
                        '--targets',
                        type=str,
                        nargs='+',
                        help='target datasets (delimited by space)')
    parser.add_argument('--root',
                        type=str,
                        default='',
                        help='path to data root')
    parser.add_argument('opts',
                        default=None,
                        nargs=argparse.REMAINDER,
                        help='Modify config options using the command-line')
    args = parser.parse_args()

    cfg = get_default_config()
    cfg.use_gpu = torch.cuda.is_available()
    if args.config_file:
        cfg.merge_from_file(args.config_file)
    reset_config(cfg, args)
    cfg.merge_from_list(args.opts)
    cfg.freeze()
    set_random_seed(cfg.train.seed)

    log_name = 'test.log' if cfg.test.evaluate else 'train.log'
    log_name += time.strftime('-%Y-%m-%d-%H-%M-%S')
    sys.stdout = Logger(osp.join(cfg.data.save_dir, log_name))

    print('Show configuration\n{}\n'.format(cfg))
    print('Collecting env info ...')
    print('** System info **\n{}\n'.format(collect_env_info()))

    if cfg.use_gpu:
        torch.backends.cudnn.benchmark = True

    datamanager = build_datamanager(cfg)

    print('Building model: {}'.format(cfg.model.name))
    model = build_model(
        name=cfg.model.name,
        num_classes=datamanager.num_train_pids,
        loss=cfg.loss.name,
        pretrained=cfg.model.pretrained,
        use_gpu=cfg.use_gpu,
        dropout_prob=cfg.model.dropout_prob,
        feature_dim=cfg.model.feature_dim,
        fpn=cfg.model.fpn.enable,
        fpn_dim=cfg.model.fpn.dim,
        gap_as_conv=cfg.model.gap_as_conv,
        input_size=(cfg.data.height, cfg.data.width),
        IN_first=cfg.model.IN_first,
        fpn_process=cfg.model.fpn.process,
    )
    num_params, flops = compute_model_complexity(
        model, (1, 3, cfg.data.height, cfg.data.width))
    print('Model complexity: params={:,} flops={:,}'.format(num_params, flops))

    if cfg.model.load_weights and check_isfile(cfg.model.load_weights):
        load_pretrained_weights(model, cfg.model.load_weights)

    if cfg.use_gpu:
        model = nn.DataParallel(model).cuda()

    optimizer = torchreid.optim.build_optimizer(model, **optimizer_kwargs(cfg))
    scheduler = build_lr_scheduler(optimizer, **lr_scheduler_kwargs(cfg))

    if cfg.model.resume and check_isfile(cfg.model.resume):
        args.start_epoch = resume_from_checkpoint(cfg.model.resume,
                                                  model,
                                                  optimizer=optimizer)

    if len(cfg.model.openvino.name):
        openvino_model = OpenVINOModel(cfg.model.openvino.name,
                                       cfg.model.openvino.cpu_extension)
    else:
        openvino_model = None

    print('Building {}-engine for {}-reid'.format(cfg.loss.name,
                                                  cfg.data.type))
    engine = build_engine(cfg,
                          datamanager,
                          model,
                          optimizer,
                          scheduler,
                          openvino_model=openvino_model)
    engine.run(**engine_run_kwargs(cfg))
Exemple #3
0
    # data_manager
    data_manager = build_data_manager(cfg)

    model = osnet_x1_0(num_classes=data_manager.num_train_pids,
                       loss=cfg.loss.name,
                       pretrained=cfg.model.pretrained,
                       use_gpu=cfg.use_gpu)
    if cfg.model.load_weights:
        load_pretrained_weights(model, cfg.model.load_weights)
    model = model.cuda()
    optimizer = build_optimizer(model, **optimizer_kwargs(cfg))
    scheduler = build_scheduler(optimizer, **lr_scheduler_kwargs(cfg))

    # print(model)
    engine = build_engine(cfg, data_manager, model, optimizer, scheduler)
    engine.run(**engine_run_kwargs(cfg))


if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument(
        '--config-file',
        type=str,
        default='./config/im_osnet_x1_0_softmax_256x128_amsgrad_cosine.yaml')
    args = parser.parse_args()
    cfg = get_default_config()
    cfg.use_gpu = torch.cuda.is_available()
    if args.config_file:
        cfg.merge_from_file(args.config_file)
    train(cfg)