YOLOv5模型FPS过低问题解决方法咨询及YOLOv5s游戏实时检测帧率优化、YOLOv5n使用方法询问
解决YOLOv5s游戏实时检测FPS过低的优化方案 & YOLOv5n使用指南
先给你梳理几个立竿见影的优化方案,针对你当前的YOLOv5s+mss组合,之后再聊聊YOLOv5n的适用性和使用方法:
一、现有YOLOv5s的FPS优化方案
1. 模型推理层优化
- 开启GPU加速+半精度推理:如果你的设备有NVIDIA GPU,这是提升速度最明显的一步
# 加载模型后直接移到GPU并转半精度 model = torch.hub.load('ultralytics/yolov5', 'custom', path=r'C:\Users\stefa\Downloads\best2.pt') model.to('cuda').half() # 仅GPU可用时生效,CPU请忽略这行 model.eval() # 关闭训练模式,禁用梯度计算 model.conf = 0.5 # 提高置信度阈值,减少低置信度框的后处理耗时 model.augment = False # 关闭推理增强,大幅提速 # 推理时输入也要匹配半精度格式(GPU场景) frame_rgb = np.array(sct.grab(monitor))[...,:3] # 直接提取RGB通道,跳过BGRA转RGB的冗余操作 # 预处理:BGR转RGB → 转CHW格式 → 加batch维度 → 归一化 → 转半精度 input_tensor = torch.from_numpy(frame_rgb[:, :, ::-1].transpose(2, 0, 1)[None].astype(np.float16)/255.0).to('cuda') results = model(input_tensor) - 模型量化/转格式:将PyTorch模型转为ONNX或TensorRT格式,推理速度能再提升30%-50%
以ONNX为例:# 导出ONNX模型 model = torch.hub.load('ultralytics/yolov5', 'custom', path=r'C:\Users\stefa\Downloads\best2.pt') model.eval() torch.onnx.export(model, torch.randn(1, 3, 640, 640).to('cuda'), "best2.onnx", opset_version=12) # 使用ONNX Runtime推理 import onnxruntime as ort session = ort.InferenceSession("best2.onnx", providers=['CUDAExecutionProvider']) input_name = session.get_inputs()[0].name # 推理环节 input_img = frame_rgb[:, :, ::-1].transpose(2, 0, 1)[None].astype(np.float32)/255.0 results = session.run(None, {input_name: input_img})
2. 屏幕捕获层优化
- 简化mss捕获流程:避免不必要的格式转换
with mss.mss() as sct: monitor = {"top": 40, "left": 0, "width": 800, "height": 640} while True: # 直接获取numpy数组,跳过PIL转换步骤 frame = np.array(sct.grab(monitor)) # 直接提取RGB通道(mss默认返回BGRA格式) frame_rgb = frame[..., :3] # 后续推理操作... - 多线程分离捕获与推理:避免屏幕捕获阻塞推理流程
import queue import threading # 帧队列,限制最大长度避免内存溢出 frame_queue = queue.Queue(maxsize=2) def capture_task(monitor): with mss.mss() as sct: while True: frame = np.array(sct.grab(monitor))[...,:3] if not frame_queue.full(): frame_queue.put(frame) # 启动捕获线程 monitor = {"top": 40, "left": 0, "width": 800, "height": 640} capture_thread = threading.Thread(target=capture_task, args=(monitor,), daemon=True) capture_thread.start() # 推理主线程 model = torch.hub.load('ultralytics/yolov5', 'custom', path=r'C:\Users\stefa\Downloads\best2.pt').to('cuda').half() model.eval() while True: if not frame_queue.empty(): frame = frame_queue.get() # 预处理+推理... - 缩小捕获区域:如果游戏目标集中在屏幕某块区域,可进一步减小
monitor的宽高,降低单帧处理量
3. 系统环境优化
- 关闭后台占用GPU/CPU的程序(如浏览器、视频播放器、其他AI工具)
- 确保安装了对应版本的CUDA、cuDNN,且PyTorch为GPU版本(可通过
torch.cuda.is_available()验证)
二、YOLOv5n的适用性与使用方法
是否应该改用YOLOv5n?
完全值得一试!YOLOv5n是YOLOv5系列中参数量最小、推理速度最快的模型,虽然精度略低于v5s,但游戏场景中的目标通常清晰、尺寸适中,v5n的精度完全能满足需求,FPS能比v5s提升至少50%以上。
如何下载并使用YOLOv5n(自定义数据集场景)
因为你用的是自定义数据集,需要基于YOLOv5n预训练权重重新训练你的模型:
- 克隆YOLOv5仓库(如果还没克隆的话):
git clone https://github.com/ultralytics/yolov5 cd yolov5 - 安装依赖:
pip install -r requirements.txt - 启动训练:使用你之前训练v5s时的数据集配置文件,指定v5n作为预训练权重:
(python train.py --weights yolov5n.pt --data your_data.yaml --epochs 300 --batch-size 16 --img-size 640your_data.yaml是你自定义数据集的配置文件,batch-size可根据你的GPU显存调整,显存小就调小) - 加载训练好的模型:训练完成后,在
runs/train/exp/weights目录下会生成best.pt(v5n的自定义模型),加载方式和你之前的v5s完全一致:
同样可以搭配前面提到的GPU加速、半精度推理等优化方案进一步提升速度。model = torch.hub.load('ultralytics/yolov5', 'custom', path=r'C:\Users\stefa\Downloads\best_n.pt')
内容的提问来源于stack exchange,提问作者Dani
相关产品推荐
相关产品推荐

