如何在树莓派4B与Jetson Nano上记录YOLOv4模型的推理时间?
树莓派4B/Jetson Nano上YOLOv4推理时间的记录与计算方法
一、核心思路
要精准统计模型的推理效率,必须只计算纯推理阶段的耗时——也就是从「图像预处理完成、输入模型」到「模型输出检测结果」的区间,排除图像加载、解码、后处理(如绘制检测框)等无关操作的时间。
二、具体实现步骤
1. 基于官方Darknet框架(C语言版)
如果使用官方Darknet运行YOLOv4,直接利用内置的计时功能:
- 执行检测命令时添加
-ext_output参数,终端会自动输出每张图片的推理耗时(单位:毫秒):./darknet detector test cfg/coco.data cfg/yolov4.cfg yolov4.weights -ext_output data/test1.jpg data/test2.jpg ... data/test12.jpg - 直接提取终端打印的单张耗时数据即可完成记录。
2. 基于Python环境(如OpenCV-DNN/TensorRT)
如果用Python调用YOLOv4,手动嵌入计时逻辑:
import cv2 import time import platform # 加载YOLOv4模型(以OpenCV-DNN为例) net = cv2.dnn.readNetFromDarknet("cfg/yolov4.cfg", "yolov4.weights") # 根据设备设置推理后端:Jetson Nano启用CUDA加速,树莓派用CPU if "Jetson" in platform.uname().node: net.setPreferableBackend(cv2.dnn.DNN_BACKEND_CUDA) net.setPreferableTarget(cv2.dnn.DNN_TARGET_CUDA) else: net.setPreferableBackend(cv2.dnn.DNN_BACKEND_OPENCV) net.setPreferableTarget(cv2.dnn.DNN_TARGET_CPU) # 12张测试图片路径列表 img_paths = ["test1.jpg", "test2.jpg", "test3.jpg", "test4.jpg", "test5.jpg", "test6.jpg", "test7.jpg", "test8.jpg", "test9.jpg", "test10.jpg", "test11.jpg", "test12.jpg"] inference_times = [] # 热身推理(消除首次加载缓存的影响) warmup_img = cv2.imread(img_paths[0]) warmup_blob = cv2.dnn.blobFromImage(warmup_img, 1/255.0, (608, 608), swapRB=True, crop=False) net.setInput(warmup_blob) net.forward(net.getUnconnectedOutLayersNames()) # 正式测试并记录时间 for path in img_paths: # 图片预处理(不计入推理时间) img = cv2.imread(path) blob = cv2.dnn.blobFromImage(img, 1/255.0, (608, 608), swapRB=True, crop=False) net.setInput(blob) # 计时区间:仅统计推理阶段 start = time.perf_counter() layer_outputs = net.forward(net.getUnconnectedOutLayersNames()) end = time.perf_counter() # 计算单张耗时(转毫秒) cost_ms = (end - start) * 1000 inference_times.append(cost_ms) print(f"图片 {path} 推理耗时: {cost_ms:.2f} ms") # 将结果保存到本地文件 with open("yolov4_inference_times.txt", "w") as f: for idx, t in enumerate(inference_times, 1): f.write(f"第{idx}张图片: {t:.2f} ms\n")
三、推理时间的计算与分析
1. 核心计算指标
- 单张平均推理时间:将12张图片的耗时求和后除以数量,反映模型的平均处理速度:
平均耗时 = 所有图片耗时总和 / 12 - FPS(每秒处理帧数):由平均耗时推导,直观体现模型的实时性:
FPS = 1000 / 平均耗时
2. 辅助分析指标
- 最大/最小推理耗时:查看12个数据的极值,了解模型在不同复杂度图片上的性能波动
- 耗时方差:衡量12次推理的稳定性,方差越小说明模型性能越稳定
四、注意事项
- 测试前关闭设备上所有占用CPU/GPU的后台程序,确保两次测试(树莓派、Jetson Nano)的环境负载一致
- 必须加入热身推理步骤,避免首次推理的模型加载缓存时间影响结果准确性
- 如果Jetson Nano使用TensorRT加速,需确保模型精度(如FP32/FP16)与树莓派的测试条件对齐,否则耗时对比无意义
内容的提问来源于stack exchange,提问作者Mohammad Saeid Anwar
相关产品推荐
相关产品推荐

