其实就是把mmdet里的FPS Benchmark改成mmocr里的,mmdet里的FPS Benchmark链接为:https://mmdetection.readthedocs.io/en/latest/useful_tools.html?highlight=fps#fps-benchmark,运行时执行python -m torch.distributed.launch --nproc_per_node=1 --master_port=29500 tools/ana_fps.py configs/textdet/drrg/drrg_r50_adam.py res/drrg_adam_pre/epoch_200.pth --launcher pytorch
我把这个文件放在了tools/ana_fps.py 里,仅供参考。
具体代码如下:

# Copyright (c) OpenMMLab. All rights reserved.
import argparse
import copy
import os
import timeimport torch
from mmcv import Config, DictAction
from mmcv.cnn import fuse_conv_bn
from mmcv.parallel import MMDistributedDataParallel
from mmcv.runner import init_dist, load_checkpoint, wrap_fp16_modelfrom mmdet.datasets import replace_ImageToTensor
from mmocr.datasets import build_dataloader, build_dataset
from mmocr.models import build_detectordef parse_args():parser = argparse.ArgumentParser(description='MMDet benchmark a model')parser.add_argument('config', help='test config file path')parser.add_argument('checkpoint', help='checkpoint file')parser.add_argument('--repeat-num',type=int,default=1,help='number of repeat times of measurement for averaging the results')parser.add_argument('--max-iter', type=int, default=2000, help='num of max iter')parser.add_argument('--log-interval', type=int, default=50, help='interval of logging')parser.add_argument('--fuse-conv-bn',action='store_true',help='Whether to fuse conv and bn, this will slightly increase''the inference speed')parser.add_argument('--cfg-options',nargs='+',action=DictAction,help='override some settings in the used config, the key-value pair ''in xxx=yyy format will be merged into config file. If the value to ''be overwritten is a list, it should be like key="[a,b]" or key=a,b ''It also allows nested list/tuple values, e.g. key="[(a,b),(c,d)]" ''Note that the quotation marks are necessary and that no white space ''is allowed.')parser.add_argument('--launcher',choices=['none', 'pytorch', 'slurm', 'mpi'],default='none',help='job launcher')parser.add_argument('--local_rank', type=int, default=0)args = parser.parse_args()if 'LOCAL_RANK' not in os.environ:os.environ['LOCAL_RANK'] = str(args.local_rank)return argsdef measure_inference_speed(cfg, checkpoint, max_iter, log_interval,is_fuse_conv_bn):# set cudnn_benchmarkif cfg.get('cudnn_benchmark', False):torch.backends.cudnn.benchmark = Truecfg.model.pretrained = Nonecfg.data.test.test_mode = True# build the dataloadersamples_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(cfg.data.test.pipeline)dataset = build_dataset(cfg.data.test)data_loader = build_dataloader(dataset,samples_per_gpu=1,# Because multiple processes will occupy additional CPU resources,# FPS statistics will be more unstable when workers_per_gpu is not 0.# It is reasonable to set workers_per_gpu to 0.workers_per_gpu=0,dist=True,shuffle=False)# build the model and load checkpointcfg.model.train_cfg = Nonemodel = 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)load_checkpoint(model, checkpoint, map_location='cpu')if is_fuse_conv_bn:model = fuse_conv_bn(model)model = MMDistributedDataParallel(model.cuda(),device_ids=[torch.cuda.current_device()],broadcast_buffers=False)model.eval()# the first several iterations may be very slow so skip themnum_warmup = 5pure_inf_time = 0fps = 0# benchmark with 2000 image and take the averagefor i, data in enumerate(data_loader):torch.cuda.synchronize()start_time = time.perf_counter()with torch.no_grad():model(return_loss=False, rescale=True, **data)torch.cuda.synchronize()elapsed = time.perf_counter() - start_timeif i >= num_warmup:pure_inf_time += elapsedif (i + 1) % log_interval == 0:fps = (i + 1 - num_warmup) / pure_inf_timeprint(f'Done image [{i + 1:<3}/ {max_iter}], 'f'fps: {fps:.1f} img / s, 'f'times per image: {1000 / fps:.1f} ms / img',flush=True)if (i + 1) == max_iter:fps = (i + 1 - num_warmup) / pure_inf_timeprint(f'Overall fps: {fps:.1f} img / s, 'f'times per image: {1000 / fps:.1f} ms / img',flush=True)breakreturn fpsdef repeat_measure_inference_speed(cfg,checkpoint,max_iter,log_interval,is_fuse_conv_bn,repeat_num=1):assert repeat_num >= 1fps_list = []for _ in range(repeat_num):#cp_cfg = copy.deepcopy(cfg)fps_list.append(measure_inference_speed(cp_cfg, checkpoint, max_iter, log_interval,is_fuse_conv_bn))if repeat_num > 1:fps_list_ = [round(fps, 1) for fps in fps_list]times_pre_image_list_ = [round(1000 / fps, 1) for fps in fps_list]mean_fps_ = sum(fps_list_) / len(fps_list_)mean_times_pre_image_ = sum(times_pre_image_list_) / len(times_pre_image_list_)print(f'Overall fps: {fps_list_}[{mean_fps_:.1f}] img / s, 'f'times per image: 'f'{times_pre_image_list_}[{mean_times_pre_image_:.1f}] ms / img',flush=True)return fps_listreturn fps_list[0]def main():args = parse_args()cfg = Config.fromfile(args.config)if args.cfg_options is not None:cfg.merge_from_dict(args.cfg_options)if args.launcher == 'none':raise NotImplementedError('Only supports distributed mode')else:init_dist(args.launcher, **cfg.dist_params)repeat_measure_inference_speed(cfg, args.checkpoint, args.max_iter,args.log_interval, args.fuse_conv_bn,args.repeat_num)if __name__ == '__main__':main()

MMOCR计算FPS相关推荐

  1. python计算FPS

    from cv2 import getTickCount, getTickFrequencyloop_start = getTickCount()loop_time = getTickCount() ...

  2. C++/Qt 使用OpenCV打开摄像头,旋转视频,计算fps

    C++/Qt 使用OpenCV打开摄像头,旋转视频,计算fps 设置摄像头参数 不要随意修改,同时也不一样会修改成功,需要根据实际摄像头的参数选择设置 /*设置摄像头参数 不要随意修改capture. ...

  3. yolov5-计算fps(新加入:4. 记录运行B导yolov7-tiny后计算fps的方法)

    目录 0. FPS记录的原理 1. 自己的 2. 其实yolov5有自带的打印这些参数 3. 清风大佬分享的 3.1 单个的计算fps函数 3.2 整体的完整代码 4. 记录运行B导yolov7-ti ...

  4. OpenCV 计算fps(frames per second-fps)

    在OpenCV中,类videoccapture处理摄像头读取视频和抓取帧.通过使用videoccapture中的get(PROPERTY_NAME)方法,你可以找到很多关于你正在播放的视频文件的信息. ...

  5. 计算FPS的六种方式

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u012494876/article/details/53368164 帧率(FPS)计算是游戏编程中 ...

  6. python 计算fps,两种方式优缺点总结

    超链接:深度学习工作常用方法汇总,矩阵维度变化.图片.视频等操作,包含(torch.numpy.opencv等) ------------------------------------------ ...

  7. 常见的三种计算fps的方法

    // 1.总平均帧率 void update(float dt) {static float _total_frames = 0.0f;static float _total_time = 0.0f; ...

  8. opengl计算帧率_或许是迄今为止第一篇讲解 fps 计算原理的文章吧

    前言 fps,是 frames per second 的简称,也就是我们常说的"帧率".在游戏领域中,fps 作为衡量游戏性能的基础指标,对于游戏开发和手机 vendor 厂商都是 ...

  9. 测试方法介绍-计算模型复杂度(GMac)、模型大小(M)、计算速度(FPS)

    PRNet-V 计算复杂度为 48.76GMac 参数数量为34.73M (PRNet测试结果)(IEO在12345层) 参数数量为27.57M (PRNet测试结果)(IEO在345层) 计算图片读 ...

  10. Web 动画帧率(FPS)计算

    (点击上方公众号,可快速关注) 作者: 伯乐在线/chokcoco http://web.jobbole.com/93325/ 我们知道,动画其实是由一帧一帧的图像构成的.有 Web 动画那么就会存在 ...

最新文章

  1. 【建模必备】遗传算法的基本原理与步骤(交叉)
  2. 从京东裸辞 2 年后,我的一些改变
  3. 重拾算法(3)——用458329个测试用例全面测试二叉树和线索二叉树的遍历算法
  4. JSP 中的Cookie
  5. 洛谷P1402 酒店之王(二分图)
  6. vue子组件改变父组件的值
  7. 2018集训队日常训练1
  8. maven 配置(安装)以及遇到的The JAVA_HOME environment variable is not defined correctly.
  9. r语言模型评估:_情感分析评估:对自然语言处理的过去和未来的反思
  10. ruby 变量类中范围_Ruby中的类
  11. 几行Python代码,爱上Python编程
  12. 【OpenCV】OpenCV实战从入门到精通之 -- 访问图像中的像素
  13. 【codevs1722】【NOI1997】最优乘车,单元最短路?
  14. Memory Management in AIR / AS3 / Flash Garbage Collection.
  15. 【LSP简史】里氏替换原则表述方式的变化,从学术到「人话」
  16. 万网虚拟主机开启short_open_tag短标签支持
  17. java制表键_java-制表符的使用说明
  18. [NAS] Synology(群晖) / QNAP(威联通) 设置 MariaDB 远程访问 (附带多设备DB速度测试)
  19. 苏大文正计算机基础成绩公布,2019苏大文正学院投档分数线公布:文科319分,理科325分...
  20. 【Java基础】本地方法的理解(native方法)

热门文章

  1. 如何利用深度学习排序模型进行推荐
  2. ALBRECHT微型三抓夹头30 G010 HBF 0-3
  3. 微营销:从上千个朋友圈现象刷屏级H5中,我们总结出4个核心营销套路
  4. anaconda如何更新python_如何更新anaconda发行版和python包?
  5. Pycharm启动后加载anaconda一直updating indices造成Pycharm闪退甚至电脑崩溃
  6. 7个症状判断脾胃好坏!老中医教你如何温养脾胃
  7. 使用pycharm进行绘图,图片无法显示
  8. JAVA ——int 类型除法保留两位小数
  9. 用netbeans ide打开java文件一片空白怎么办?
  10. 16x16LED点阵屏之移动显示汉字