模型推理时间与FPS计算(YOLO系列与MMdetection系列) 干货笔记 !!


前言

深度学习:模型的推理时间FPS计算的介绍,并且有详细的YOLO系列MMdetection系列FPS计算实现方法


提示:以下是本篇文章正文内容,下面案例可供参考

一、模型推理时间

推理时间:是指模型在处理单个样本所需的时间。这个时间取决于模型的复杂性和所使用的硬件设施。对于神经网络模型,推理时间通常在毫秒到秒之间。

为了精确地测量推理时间,可以使用Python中的time库。下面是一个例子:

import time
model.eval() # 设定模型为评估模式
input_data = ... # 输入数据
start_time = time.time() # 获取开始时间
output = model(input_data) # 模型推理
end_time = time.time() # 获取结束时间
inference_time = end_time - start_time # 计算推理时间

二、FPS(每秒帧数)计算

1、FPS基础

FPS表示每秒处理的帧数,通常用于衡量模型的性能。对于深度学习模型,通常需要在大量数据上进行训练,因此高FPS是非常重要的。其计算公式为:

FPS = \frac{1}{ProcessingTimePerFrame},其中 ProcessingTimePerFrame 代表 每帧处理时间

也可以使用Python中的time库来计算FPS,下面是一个例子:

其中运用公式 FPS = \frac{n}{EndTime-StartTime},其中n表述处理的总帧数

import time
model.eval() # 设定模型为评估模式
input_data = ... # 输入数据
start_time = time.time() # 获取开始时间
for i in range(n): # n为处理的总帧数
output = model(input_data) # 模型推理
end_time = time.time() # 获取结束时间
fps = n / (end_time - start_time) # 计算FPS

2、YOLO系列的FPS

在YOLO中这个值通常是由test.py来得到。将test.py的权重文件换为训练生成的best.pt,如下图所示:

运行过后能够得到spped三个值

这里只需用到total,FPS就是1000ms(=1s)/4.8ms=208.3

当然,使用detect.py也能够得到我们的FPS,运行detect.py后的结果如下:

  • pre-process:图像预处理时间,包括图像保持长宽比缩放和padding填充,通道变换(HWC->CHW)和升维处理等。
  • ms inference:推理速度,指预处理之后的图像输入模型到模型输出结果的时间。
  • NMS :可以理解为后处理时间,对模型输出结果经行转换等。

至于计算FPS,是1s也就是1000ms除以这三个时间相加。

3、MMdetection的FPS

3.1、测试模型

python tools/analysis_tools/benchmark.py \
configs/faster_rcnn/faster-rcnn_r50_fpn_1x_coco.py \
--checkpoint checkpoints/faster_rcnn_r50_fpn_1x_coco_20200130-047c8118.pth --fuse-conv-bn \
--fuse-conv-bn

3.2、遇到的问题

1.空类'NoneType'调用错误
AttributeError: 'NoneType' object has no attribute 'Process'

解决方法:

安装psutil模块 pip install psutil

2、FPS结果过大的问题

计算出的FPS为300多帧,明显不正常

Overall fps: 326.7 batch/s, times per batch: 3.1 ms/batch, batch size: 1, num_workers: 2

解决方法

benchmark.py默认参数错误

将 default='dataloader ',中 dataloader 改成 inference 

改变后才会调用定义的模型,执行对应的推理程序计算真实帧率

结果

接近真实值


三、引用学习

mmdetection3.2.0框架FPS基准测试学习心得

深度学习:模型推理与FPS计算指南

FPS如何计算?Yolo系列的GFLOPs与FPS如何得到?(小白学习记录)

  • 16
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
YOLO(You Only Look Once)是一种目标检测算法系列,它的特点是实时性高,能够在图像或视频中快速准确地检测出多个目标。YOLO系列的挑战与趋势主要包括以下几个方面: 1. 精度与速度的平衡:YOLO算法在实时性方面表现出色,但相对于其他一些目标检测算法,其精度可能稍低。因此,研究者们一直在努力提高YOLO算法的精度,同时保持其较高的实时性能。 2. 多尺度检测:YOLO算法最初是基于单一尺度的检测,但在实际应用中,目标的大小和尺度变化往往是不可避免的。因此,研究者们开始关注如何在多个尺度上进行目标检测,以提高算法的鲁棒性和适应性。 3. 目标跟踪与目标分割:除了目标检测,目标跟踪和目标分割也是计算机视觉领域的热门研究方向。YOLO算法可以与目标跟踪和目标分割等技术相结合,实现更加全面和准确的目标分析与理解。 4. 硬件加速与嵌入式应用:由于YOLO算法需要进行大量的计算和处理,对硬件资源要求较高。因此,研究者们一直在探索如何利用硬件加速技术(如GPU、FPGA等)来提高YOLO算法的运行效率,并将其应用于嵌入式设备等资源受限的场景。 5. 鲁棒性与泛化能力:YOLO算法在一些复杂场景下可能存在检测漏报或误报的问题,这主要是由于目标的遮挡、光照变化等因素导致的。因此,研究者们致力于提高YOLO算法的鲁棒性和泛化能力,使其能够更好地适应各种复杂环境。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值