Download timing.py from yhhugging/PQR3D: direct link, hf CLI and curl.
- Browser
- Download file 3.22 kB
-
https://huggingface.co/yhhugging/PQR3D/resolve/main/timing.py
- Command line
-
hf download hf://yhhugging/PQR3D/timing.py
-
curl -L -o timing.py https://huggingface.co/yhhugging/PQR3D/resolve/main/timing.py
3.22 kB
| import time | |
| import utils | |
| import logging | |
| import argparse | |
| import importlib | |
| import torch | |
| import torch.distributed | |
| import torch.backends.cudnn as cudnn | |
| from mmcv import Config, DictAction | |
| from mmcv.parallel import MMDataParallel | |
| from mmcv.runner import load_checkpoint | |
| from mmdet.apis import set_random_seed | |
| from mmdet3d.datasets import build_dataset, build_dataloader | |
| from mmdet3d.models import build_model | |
| def main(): | |
| parser = argparse.ArgumentParser(description='Validate a detector') | |
| parser.add_argument('--config', required=True) | |
| parser.add_argument('--weights', required=True) | |
| parser.add_argument('--num_warmup', default=10) | |
| parser.add_argument('--samples', default=500) | |
| parser.add_argument('--log-interval', default=50, help='interval of logging') | |
| parser.add_argument('--override', nargs='+', action=DictAction) | |
| args = parser.parse_args() | |
| # parse configs | |
| cfgs = Config.fromfile(args.config) | |
| if args.override is not None: | |
| cfgs.merge_from_dict(args.override) | |
| # register custom module | |
| importlib.import_module('models') | |
| importlib.import_module('loaders') | |
| # MMCV, please shut up | |
| from mmcv.utils.logging import logger_initialized | |
| logger_initialized['root'] = logging.Logger(__name__, logging.WARNING) | |
| logger_initialized['mmcv'] = logging.Logger(__name__, logging.WARNING) | |
| utils.init_logging(None, cfgs.debug) | |
| # you need GPUs | |
| assert torch.cuda.is_available() and torch.cuda.device_count() == 1 | |
| logging.info('Using GPU: %s' % torch.cuda.get_device_name(0)) | |
| torch.cuda.set_device(0) | |
| logging.info('Setting random seed: 0') | |
| set_random_seed(0, deterministic=True) | |
| cudnn.benchmark = True | |
| logging.info('Loading validation set from %s' % cfgs.data.val.data_root) | |
| val_dataset = build_dataset(cfgs.data.val) | |
| val_loader = build_dataloader( | |
| val_dataset, | |
| samples_per_gpu=1, | |
| workers_per_gpu=cfgs.data.workers_per_gpu, | |
| num_gpus=1, | |
| dist=False, | |
| shuffle=False, | |
| seed=0, | |
| ) | |
| logging.info('Creating model: %s' % cfgs.model.type) | |
| model = build_model(cfgs.model) | |
| model.cuda() | |
| assert torch.cuda.device_count() == 1 | |
| model = MMDataParallel(model, [0]) | |
| logging.info('Loading checkpoint from %s' % args.weights) | |
| load_checkpoint( | |
| model, args.weights, map_location='cuda', strict=False, | |
| logger=logging.Logger(__name__, logging.ERROR) | |
| ) | |
| model.eval() | |
| pure_inf_time = 0 | |
| with torch.no_grad(): | |
| for i, data in enumerate(val_loader): | |
| torch.cuda.synchronize() | |
| start_time = time.perf_counter() | |
| model(return_loss=False, rescale=True, **data) | |
| torch.cuda.synchronize() | |
| elapsed = time.perf_counter() - start_time | |
| if i >= args.num_warmup: | |
| pure_inf_time += elapsed | |
| if (i + 1) % args.log_interval == 0: | |
| fps = (i + 1 - args.num_warmup) / pure_inf_time | |
| print(f'Done sample [{i + 1:<3}/ {args.samples}], ' | |
| f'fps: {fps:.1f} sample / s') | |
| if (i + 1) == args.samples: | |
| break | |
| if __name__ == '__main__': | |
| main() | |