det/test.py
def main() -> None:
    """Main function for model inference."""
    args = parse_args()

    assert args.format_only or args.show or args.show_dir, (
        "Please specify at least one operation (save/eval/format/show the "
        "results / save the results) with the argument '--format-only', "
        "'--show' or '--show-dir'"
    )

    cfg = Config.fromfile(args.config)
    if cfg.load_from is None:
        cfg_name = os.path.split(args.config)[-1].replace(
            "_bdd100k.py", ".pth"
        )
        cfg.load_from = MODEL_SERVER + cfg_name
    if args.cfg_options is not None:
        cfg.merge_from_dict(args.cfg_options)
    # set cudnn_benchmark
    if cfg.get("cudnn_benchmark", False):
        torch.backends.cudnn.benchmark = True

    cfg.model.pretrained = None
    if cfg.model.get("neck"):
        if isinstance(cfg.model.neck, list):
            for neck_cfg in cfg.model.neck:
                if neck_cfg.get("rfp_backbone"):
                    if neck_cfg.rfp_backbone.get("pretrained"):
                        neck_cfg.rfp_backbone.pretrained = None
        elif cfg.model.neck.get("rfp_backbone"):
            if cfg.model.neck.rfp_backbone.get("pretrained"):
                cfg.model.neck.rfp_backbone.pretrained = None

    # in case the test dataset is concatenated
    samples_per_gpu = 1
    if isinstance(cfg.data.test, dict):
        cfg.data.test.test_mode = True  # type: ignore
        samples_per_gpu = cfg.data.test.pop("samples_per_gpu", 1)
        if samples_per_gpu > 1:
            # Replace 'ImageToTensor' to 'DefaultFormatBundle'
            cfg.data.test.pipeline = replace_ImageToTensor(  # type: ignore
                cfg.data.test.pipeline  # type: ignore
            )
    elif isinstance(cfg.data.test, list):
        for ds_cfg in cfg.data.test:
            ds_cfg.test_mode = True
        samples_per_gpu = max(
            [ds_cfg.pop("samples_per_gpu", 1) for ds_cfg in cfg.data.test]
        )
        if samples_per_gpu > 1:
            for ds_cfg in cfg.data.test:
                ds_cfg.pipeline = replace_ImageToTensor(ds_cfg.pipeline)

    # init distributed env first, since logger depends on the dist info.
    if args.launcher == "none":
        distributed = False
    else:
        distributed = True
        init_dist(args.launcher, **cfg.dist_params)

    rank, _ = get_dist_info()

    # build the dataloader
    dataset = build_dataset(cfg.data.test)
    data_loader = build_dataloader(
        dataset,
        samples_per_gpu=samples_per_gpu,
        workers_per_gpu=cfg.data.workers_per_gpu,
        dist=distributed,
        shuffle=False,
    )

    # build the model and load checkpoint
    cfg.model.train_cfg = None
    model = build_detector(cfg.model, test_cfg=cfg.get("test_cfg"))
    fp16_cfg = cfg.get("fp16", None)
    if fp16_cfg is not None:
        wrap_fp16_model(model)
    checkpoint = load_checkpoint(model, cfg.load_from, map_location="cpu")
    if args.fuse_conv_bn:
        model = fuse_conv_bn(model)
    # old versions did not save class info in checkpoints, this walkaround is
    # for backward compatibility
    if "CLASSES" in checkpoint.get("meta", {}):
        model.CLASSES = checkpoint["meta"]["CLASSES"]
    else:
        model.CLASSES = dataset.CLASSES

    if not distributed:
        model = MMDataParallel(model, device_ids=[0])
        outputs = single_gpu_test(
            model, data_loader, args.show, args.show_dir, args.show_score_thr
        )
    else:
        model = MMDistributedDataParallel(
            model.cuda(),
            device_ids=[torch.cuda.current_device()],
            broadcast_buffers=False,
        )
        outputs = multi_gpu_test(
            model, data_loader, args.tmpdir, args.gpu_collect
        )

    rank, _ = get_dist_info()
    if rank == 0:
        if args.format_only:
            dataset.convert_format(outputs, args.format_dir)
Main function for model inference.
Main function for model inference.
Main function for model inference .
def main() -> None:
    args = parse_args()
    assert args.format_only or args.show or args.show_dir, (
        "Please specify at least one operation (save/eval/format/show the "
        "results / save the results) with the argument '--format-only', "
        "'--show' or '--show-dir'"
    )
    cfg = Config.fromfile(args.config)
    if cfg.load_from is None:
        cfg_name = os.path.split(args.config)[-1].replace(
            "_bdd100k.py", ".pth"
        )
        cfg.load_from = MODEL_SERVER + cfg_name
    if args.cfg_options is not None:
        cfg.merge_from_dict(args.cfg_options)
    if cfg.get("cudnn_benchmark", False):
        torch.backends.cudnn.benchmark = True
    cfg.model.pretrained = None
    if cfg.model.get("neck"):
        if isinstance(cfg.model.neck, list):
            for neck_cfg in cfg.model.neck:
                if neck_cfg.get("rfp_backbone"):
                    if neck_cfg.rfp_backbone.get("pretrained"):
                        neck_cfg.rfp_backbone.pretrained = None
        elif cfg.model.neck.get("rfp_backbone"):
            if cfg.model.neck.rfp_backbone.get("pretrained"):
                cfg.model.neck.rfp_backbone.pretrained = None
    samples_per_gpu = 1
    if isinstance(cfg.data.test, dict):
        cfg.data.test.test_mode = True  
        samples_per_gpu = cfg.data.test.pop("samples_per_gpu", 1)
        if samples_per_gpu > 1:
            cfg.data.test.pipeline = replace_ImageToTensor(  
                cfg.data.test.pipeline  
            )
    elif isinstance(cfg.data.test, list):
        for ds_cfg in cfg.data.test:
            ds_cfg.test_mode = True
        samples_per_gpu = max(
            [ds_cfg.pop("samples_per_gpu", 1) for ds_cfg in cfg.data.test]
        )
        if samples_per_gpu > 1:
            for ds_cfg in cfg.data.test:
                ds_cfg.pipeline = replace_ImageToTensor(ds_cfg.pipeline)
    if args.launcher == "none":
        distributed = False
    else:
        distributed = True
        init_dist(args.launcher, **cfg.dist_params)
    rank, _ = get_dist_info()
    dataset = build_dataset(cfg.data.test)
    data_loader = build_dataloader(
        dataset,
        samples_per_gpu=samples_per_gpu,
        workers_per_gpu=cfg.data.workers_per_gpu,
        dist=distributed,
        shuffle=False,
    )
    cfg.model.train_cfg = None
    model = build_detector(cfg.model, test_cfg=cfg.get("test_cfg"))
    fp16_cfg = cfg.get("fp16", None)
    if fp16_cfg is not None:
        wrap_fp16_model(model)
    checkpoint = load_checkpoint(model, cfg.load_from, map_location="cpu")
    if args.fuse_conv_bn:
        model = fuse_conv_bn(model)
    if "CLASSES" in checkpoint.get("meta", {}):
        model.CLASSES = checkpoint["meta"]["CLASSES"]
    else:
        model.CLASSES = dataset.CLASSES
    if not distributed:
        model = MMDataParallel(model, device_ids=[0])
        outputs = single_gpu_test(
            model, data_loader, args.show, args.show_dir, args.show_score_thr
        )
    else:
        model = MMDistributedDataParallel(
            model.cuda(),
            device_ids=[torch.cuda.current_device()],
            broadcast_buffers=False,
        )
        outputs = multi_gpu_test(
            model, data_loader, args.tmpdir, args.gpu_collect
        )
    rank, _ = get_dist_info()
    if rank == 0:
        if args.format_only:
            dataset.convert_format(outputs, args.format_dir)
def main ( ) -> None : args = parse_args ( ) assert args . format_only or args . show or args . show_dir , ( "Please specify at least one operation (save/eval/format/show the " "results / save the results) with the argument '--format-only', " "'--show' or '--show-dir'" ) cfg = Config . fromfile ( args . config ) if cfg . load_from is None : cfg_name = os . path . split ( args . config ) [ - 1 ] . replace ( "_bdd100k.py" , ".pth" ) cfg . load_from = MODEL_SERVER + cfg_name if args . cfg_options is not None : cfg . merge_from_dict ( args . cfg_options ) if cfg . get ( "cudnn_benchmark" , False ) : torch . backends . cudnn . benchmark = True cfg . model . pretrained = None if cfg . model . get ( "neck" ) : if isinstance ( cfg . model . neck , list ) : for neck_cfg in cfg . model . neck : if neck_cfg . get ( "rfp_backbone" ) : if neck_cfg . rfp_backbone . get ( "pretrained" ) : neck_cfg . rfp_backbone . pretrained = None elif cfg . model . neck . get ( "rfp_backbone" ) : if cfg . model . neck . rfp_backbone . get ( "pretrained" ) : cfg . model . neck . rfp_backbone . pretrained = None samples_per_gpu = 1 if isinstance ( cfg . data . test , dict ) : cfg . data . test . test_mode = True samples_per_gpu = cfg . data . test . pop ( "samples_per_gpu" , 1 ) if samples_per_gpu > 1 : cfg . data . test . pipeline = replace_ImageToTensor ( cfg . data . test . pipeline ) elif isinstance ( cfg . data . test , list ) : for ds_cfg in cfg . data . test : ds_cfg . test_mode = True samples_per_gpu = max ( [ ds_cfg . pop ( "samples_per_gpu" , 1 ) for ds_cfg in cfg . data . test ] ) if samples_per_gpu > 1 : for ds_cfg in cfg . data . test : ds_cfg . pipeline = replace_ImageToTensor ( ds_cfg . pipeline ) if args . launcher == "none" : distributed = False else : distributed = True init_dist ( args . launcher , ** cfg . dist_params ) rank , _ = get_dist_info ( ) dataset = build_dataset ( cfg . data . test ) data_loader = build_dataloader ( dataset , samples_per_gpu = samples_per_gpu , workers_per_gpu = cfg . data . workers_per_gpu , dist = distributed , shuffle = False , ) cfg . model . train_cfg = None model = build_detector ( cfg . model , test_cfg = cfg . get ( "test_cfg" ) ) fp16_cfg = cfg . get ( "fp16" , None ) if fp16_cfg is not None : wrap_fp16_model ( model ) checkpoint = load_checkpoint ( model , cfg . load_from , map_location = "cpu" ) if args . fuse_conv_bn : model = fuse_conv_bn ( model ) if "CLASSES" in checkpoint . get ( "meta" , { } ) : model . CLASSES = checkpoint [ "meta" ] [ "CLASSES" ] else : model . CLASSES = dataset . CLASSES if not distributed : model = MMDataParallel ( model , device_ids = [ 0 ] ) outputs = single_gpu_test ( model , data_loader , args . show , args . show_dir , args . show_score_thr ) else : model = MMDistributedDataParallel ( model . cuda ( ) , device_ids = [ torch . cuda . current_device ( ) ] , broadcast_buffers = False , ) outputs = multi_gpu_test ( model , data_loader , args . tmpdir , args . gpu_collect ) rank , _ = get_dist_info ( ) if rank == 0 : if args . format_only : dataset . convert_format ( outputs , args . format_dir )
Main function for model inference.
Main function for model inference .
"""Main function for model inference.""" # set cudnn_benchmark # in case the test dataset is concatenated # type: ignore # Replace 'ImageToTensor' to 'DefaultFormatBundle' # type: ignore # type: ignore # init distributed env first, since logger depends on the dist info. # build the dataloader # build the model and load checkpoint # old versions did not save class info in checkpoints, this walkaround is # for backward compatibility