|
|
|
"""This file is for benchmark dataloading process. The command line to run this
|
|
file is:
|
|
|
|
$ python -m cProfile -o program.prof tools/analysis/bench_processing.py
|
|
configs/task/method/[config filename]
|
|
|
|
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 os
|
|
|
|
import mmcv
|
|
from mmcv import Config
|
|
|
|
from mmaction import __version__
|
|
from mmaction.datasets import build_dataloader, build_dataset
|
|
from mmaction.utils import get_root_logger
|
|
|
|
|
|
def main():
|
|
parser = argparse.ArgumentParser(description='Benchmark dataloading')
|
|
parser.add_argument('config', help='train config file path')
|
|
args = parser.parse_args()
|
|
cfg = Config.fromfile(args.config)
|
|
|
|
|
|
logger = get_root_logger()
|
|
logger.info(f'MMAction2 Version: {__version__}')
|
|
logger.info(f'Config: {cfg.text}')
|
|
|
|
|
|
ann_file_bench = 'benchlist.txt'
|
|
if not os.path.exists(ann_file_bench):
|
|
with open(cfg.ann_file_train) as f:
|
|
lines = f.readlines()[:256]
|
|
with open(ann_file_bench, 'w') as f1:
|
|
f1.writelines(lines)
|
|
cfg.data.train.ann_file = ann_file_bench
|
|
|
|
dataset = build_dataset(cfg.data.train)
|
|
data_loader = build_dataloader(
|
|
dataset,
|
|
videos_per_gpu=cfg.data.videos_per_gpu,
|
|
workers_per_gpu=0,
|
|
persistent_workers=False,
|
|
num_gpus=1,
|
|
dist=False)
|
|
|
|
|
|
prog_bar = mmcv.ProgressBar(
|
|
len(dataset) - 5 * cfg.data.videos_per_gpu, start=False)
|
|
for i, data in enumerate(data_loader):
|
|
if i == 5:
|
|
prog_bar.start()
|
|
for _ in data['imgs']:
|
|
if i < 5:
|
|
continue
|
|
prog_bar.update()
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|
|
|