使用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并不会有太多的精度损失