本文参考,谢谢大佬YOLOV8源码常见疑问四-如何添加FPS计算代码和FPS的相关的一些疑问_哔哩哔哩_bilibili
创建验证文件val.py
import warnings
warnings.filterwarnings('ignore')
from ultralytics import YOLO
if __name__ == '__main__':
model = YOLO(r"runs\detect\train9\weights\best.pt")
model.val(data=r'\dataset\data_drone1.yaml',
split='val',
imgsz=640,
batch=16,
project='runs/val',
name='exp',
)
模型选择自己训练好的模型,存储路径如代码所示。
设置模型为验证模式,数据通过配置文件data_drone1.yaml设置
# yaml文件,在dataset文件夹下
train: H:\Datasets\Drone\Dalian_u\images\train
val: H:\Datasets\Drone\Dalian_u\images\val
test: H:\Datasets\Drone\Dalian_u\images\test
# 设置自己的数据集地址
# train: ./dataset/images/train
# val: ./dataset/images/val
# test: ./dataset/images/test
# 设置目标识别的类别数量
# number of classes
nc: 1
# 设置类别名称
# class names
names: ['UAV']
在batch_size为16的前提下,运行测试文件输出内容如下
其中包括三个主要时间,0.1ms前处理,1.9ms推理,0.9ms后处理;
从图片输入到处理到输出共需要0.1+1.9+0.9=2.9ms的时间
要添加FPS输出代码,需要找到对应的文件。通过全局搜索关键字postprocess per image可以找到对应的代码位于ultralytics/engine的validator.py文件中的206行附近。通过添加后续两段代码能够输出FPS,分别是全处理的FPS和推理时间的FPS。
LOGGER.info(
"Speed: %.1fms preprocess,
%.1fms inference,
%.1fms loss,
%.1fms postprocess per image"
% tuple(self.speed.values())
)
LOGGER.info(
f'FPS(include:preprocess,inference,postprocess):
{(1000 / sum(self.speed.values())):.2f}')
LOGGER.info(
f'FPS(inference):{1000/tuple(self.speed.values())[1]:.2f}')
在batch_size为16的前提下,运行测试文件输出内容如下
其中包括三个主要时间,0.1ms前处理,1.9ms推理,0.9ms后处理;
从图片输入到处理到输出共需要0.1+1.9+0.9=2.9ms的时间
FPS:345.72,推理FPS:531.79
其余测试》》》》》
在batch_size为32的前提下,运行测试文件输出内容如下
0.1ms前处理,1.6ms推理,1.0ms后处理;
从图片输入到处理到输出共需要0.1+1.6+1.0=2.7ms的时间
在batch_size为8的前提下,运行测试文件输出内容如下
0.1ms前处理,2.0ms推理,0.9ms后处理;
从图片输入到处理到输出共需要0.1+2.0+0.9=3.0ms的时间