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

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预训练权重重新训练你的模型:

  1. 克隆YOLOv5仓库(如果还没克隆的话):
    git clone https://github.com/ultralytics/yolov5
    cd yolov5
    
  2. 安装依赖:
    pip install -r requirements.txt
    
  3. 启动训练:使用你之前训练v5s时的数据集配置文件,指定v5n作为预训练权重:
    python train.py --weights yolov5n.pt --data your_data.yaml --epochs 300 --batch-size 16 --img-size 640
    
    (your_data.yaml是你自定义数据集的配置文件,batch-size可根据你的GPU显存调整,显存小就调小)
  4. 加载训练好的模型:训练完成后,在runs/train/exp/weights目录下会生成best.pt(v5n的自定义模型),加载方式和你之前的v5s完全一致:
    model = torch.hub.load('ultralytics/yolov5', 'custom', path=r'C:\Users\stefa\Downloads\best_n.pt')
    
    同样可以搭配前面提到的GPU加速、半精度推理等优化方案进一步提升速度。

内容的提问来源于stack exchange,提问作者Dani

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 06:48:57