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

自定义训练的YOLOv5模型经torch.hub加载后检测异常如何解决

问题解答

你不需要克隆整个YOLOv5仓库,也不必须通过detect.py调用模型。当前推理结果异常,是因为你的调用代码没有对齐detect.py运行时的默认处理逻辑,补上缺失的配置即可得到和detect.py完全一致的检测效果。


常见遗漏配置项

  • 图像通道顺序错误
    cv2.imread()读取的图像默认是BGR通道顺序,而YOLOv5的输入要求是RGB格式。detect.py内部自动完成了BGR到RGB的通道转换,你直接传入BGR格式的图像会导致输入数据分布错乱,检测结果完全不符合预期。
  • 推理输入尺寸不匹配
    你运行detect.py时指定了--img 224,即推理阶段会将输入图像缩放至224分辨率再送入模型。但torch.hub加载的YOLOv5模型默认推理输入尺寸为640,和你训练、验证时使用的分辨率不一致,会直接导致精度骤降甚至完全检测不到目标。
  • 推理阈值未对齐
    你在detect.py中设置了--conf 0.5,即仅保留置信度高于0.5的检测结果。torch.hub加载的模型默认置信度阈值为0.25、NMS IoU阈值为0.45,参数不匹配会导致输出结果和detect.py存在差异。
  • 检测结果解析错误
    模型返回的pred.xyxy是长度等于输入batch数的列表,单张图像推理时需要取pred.xyxy[0]才能拿到对应图像的检测框数据,直接读取pred.xyxy拿到的是列表对象,不是实际的坐标结果。

修正后的可用代码

import torch
import cv2

# 加载自定义训练权重
model = torch.hub.load('ultralytics/yolov5', 'custom', path='custom_weights.pt', force_reload=True)
# 对齐detect.py的推理参数
model.conf = 0.5   # 置信度阈值
model.imgsz = 224  # 推理输入分辨率,和--img参数保持一致
model.eval()

# 读取图像并转换通道顺序
img = cv2.imread('test.jpg')
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

# 执行推理
pred = model(img_rgb)
# 解析检测结果:每行格式为 [x1, y1, x2, y2, 置信度, 类别ID]
bboxes = pred.xyxy[0].cpu().numpy()

按照上述配置调整后如果仍有异常,可以检查权重文件是否完整、训练时是否修改过类别数量/名称配置,不需要额外引入整个YOLOv5仓库的代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 17:15:44