mmocr/tools/benchmark_processing.py

60 lines
1.6 KiB
Python

#!/usr/bin/env python
"""This file is for benchmark data loading process. It can also be used to
refresh the memcached cache. The command line to run this file is:
$ python -m cProfile -o program.prof tools/analysis/benchmark_processing.py
configs/task/method/[config filename]
Note: When debugging, the `workers_per_gpu` in the config should be set to 0
during benchmark.
It use cProfile to record cpu running time and output to program.prof
To visualize cProfile output program.prof, use Snakeviz and run:
$ snakeviz program.prof
"""
import argparse
import mmcv
from mmcv import Config
from mmdet.datasets import build_dataloader
from mmocr.datasets import build_dataset
assert build_dataset is not None
def main():
parser = argparse.ArgumentParser(description='Benchmark data loading')
parser.add_argument('config', help='Train config file path.')
args = parser.parse_args()
cfg = Config.fromfile(args.config)
dataset = build_dataset(cfg.data.train)
# prepare data loaders
if 'imgs_per_gpu' in cfg.data:
cfg.data.samples_per_gpu = cfg.data.imgs_per_gpu
data_loader = build_dataloader(
dataset,
cfg.data.samples_per_gpu,
cfg.data.workers_per_gpu,
1,
dist=False,
seed=None)
# Start progress bar after first 5 batches
prog_bar = mmcv.ProgressBar(
len(dataset) - 5 * cfg.data.samples_per_gpu, start=False)
for i, data in enumerate(data_loader):
if i == 5:
prog_bar.start()
for _ in range(len(data['img'])):
if i < 5:
continue
prog_bar.update()
if __name__ == '__main__':
main()