使用本地训练模型目标追踪速度慢

Viewed 109

使用yoloV5本地训练的模型,模型图像大小为640*640,
lcd显示画面流畅但是标注帧率实在太慢了,大约要400ms一帧,以下为我略作修改的源码,请问有什么办法可以提高帧率?

# 从libs库中导入所需模块
from libs.PipeLine import PipeLine, ScopedTiming
from libs.YOLO import YOLOv5
import os, sys, gc
import image

# 主程序入口
if __name__ == "__main__":
    # ====== 用户配置区域 ======

    # 设置视频流和显示的尺寸
    rgb888p_size = [640, 480]  # AI处理的图像帧(来自摄像头)的尺寸
    display_size = [640, 480]  # LCD屏幕的显示尺寸

    # AI模型配置
    kmodel_path = "/sdcard/tests/det_obstacle1.3/best.kmodel"  # 存放于SD卡中的kmodel模型文件路径
    model_input_size = [640, 640]             # 模型输入层的尺寸
    labels = ["Puddle",
              ...........
              "water dispenser"]  # 模型的标签列表

    # 目标检测相关参数
    confidence_threshold = 0.25  # 置信度阈值,低于此值的检测框将被忽略
    nms_threshold = 0.45         # 非极大值抑制(NMS)阈值,用于合并重叠的检测框

    # ====== 配置区域结束 ======

    # 初始化PipeLine,用于管理数据流(摄像头->AI->屏幕)
    pl = PipeLine(rgb888p_size=rgb888p_size, display_size=display_size, display_mode="lcd")
    pl.create()

    # 初始化YOLOv5模型实例
    # **关键:将 task_type 设置为 "detect" 来执行目标检测任务**
    yolo = YOLOv5(
        task_type="detect",
        mode="video",
        kmodel_path=kmodel_path,
        labels=labels,
        rgb888p_size=rgb888p_size,
        model_input_size=model_input_size,
        display_size=display_size,
        conf_thresh=confidence_threshold,
        nms_thresh=nms_threshold,
        debug_mode=0  # 设置为1可以打印各阶段耗时
    )
    # 配置模型的预处理步骤(如缩放、填充等)
    yolo.config_preprocess()

    try:
        # 进入主循环,持续处理视频帧
        while True:
            # os.exitpoint()允许程序在特定点退出,便于调试
            os.exitpoint()

            # 使用ScopedTiming来计算并打印每一帧处理的总时间
            with ScopedTiming("total", 1):
                # 1. 从PipeLine获取一帧用于AI推理的图像
                img = pl.get_frame()

                # 2. 运行YOLOv5模型推理
                res = yolo.run(img)

                # 3. 将检测结果(边界框和标签)绘制到OSD(On-Screen Display)图像上
                # YOLOv5类内部会根据task_type调用对应的绘制方法
                yolo.draw_result(res, pl.osd_img)

                # 4. 将带有检测结果的OSD图像显示到屏幕上
                pl.show_image()

            # 执行垃圾回收,释放内存
            gc.collect()

    except Exception as e:
        # 捕获并打印异常信息
        sys.print_exception(e)
    finally:
        # 程序退出时,释放资源
        yolo.deinit()
        pl.destroy()

你这应该是K230吧,K210跑640640的图像大小估计早卡死了,目前的问题是你训练图像尺寸太大了,320320的推理稳定帧率也就20多,640640光推理时间就有200ms以上(yolov11n),就算训练的时候量化一个量化为FP16基本没什么用,量化为FP6除非模型够硬否则损失精度太多了,建议你修改图像尺寸,在本地重新训练一个320320或者224*224的模型

感谢您的回复!我使用的是K230,如果我改用anchorbasedet是否能改善呢,我看官网使用这个模型图像是640*640,想跑个精度高些的模型

没有必要即使使用anchorbasedet如果图像仍然保持640640不如直接使用320320的yolo模型更有性价比,至少我在测试yolo11n的640640与320320并不会有太多的精度损失

2 Answers

降低模型输入分辨率为320*320

请问aicube训练模型时gpu索引可以更改吗,默认索引为0应该是集显,核显几乎没怎么跑起来

训练速度太慢了,估算了一下17000张图片的数据集迭代200次就能能干到三天去

集显是直接跑满了的,核显运行前后内存相比只是多占用了1g左右