You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在树莓派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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 02:45:34