为啥在 YOLOv5 中这两个结果不同?

Posted

技术标签:

【中文标题】为啥在 YOLOv5 中这两个结果不同?【英文标题】:Why are the two results different in YOLOv5?为什么在 YOLOv5 中这两个结果不同? 【发布时间】:2021-12-10 03:25:35 【问题描述】:

我想用yolov5知道图中的车辆数量 但是,模型的结果与detect.py不同

0。图片

1.模型结果

# Model
model = torch.hub.load('ultralytics/yolov5', 'yolov5s')  # or yolov5m, yolov5l, yolov5x, custom

# Images
img = 'D:\code\YOLO\dataset\img\public02.png'  # or file, Path, PIL, OpenCV, numpy, list

# Inference
results = model(img)

# Results
results.print()  # or .show(), .save(), .crop(), .pandas(), etc.

结果 -> (no detections)

2。检测.py

from IPython.display import Image
import os

val_img_path = 'D:\code\YOLO\dataset\img\public02.png'
 
!python detect.py --img 416 --conf 0.25 --source "val_img_path"

结果->

我知道如果我在detect.py中不指定权重选项,则使用默认的yolo5s模型。 但是,结果 1 与使用相同模型的结果 2 不同。

【问题讨论】:

【参考方案1】:

这似乎是一个图像处理问题。

确实,在您的示例中,从 torch hub 加载的模型给出的输出与 detect.py 不同。看detect.py的源码,发现有一些不错的图片预处理。从模型中心,我真的不知道输入发生了什么。从模型中心,生成的图像是这样的:

通过他们的预处理,这基本上就是您输入模型的图像。老实说,不希望有任何检测结果。

但后来我尝试自己进行预处理(在他们的tutorial 中也有说明)

import torch
import cv2

# Model
model = torch.hub.load('ultralytics/yolov5', 'yolov5s')  # or yolov5m, yolov5l, yolov5x, custom

# Image
imgPath = '/content/9X9FP.png'
img = cv2.imread(imgPath)[..., ::-1]  # Pre-processing OpenCV image (BGR to RGB)

# Inference
results = model(img)

# Results
results.save()

一切正常:

因此,为了获得快速简单的答案,我只需对自己进行预处理,这只是简单的一行额外步骤。祝你好运!

【讨论】:

哇!太感谢了!你的好意对我这个英文不好的人帮助很大。

以上是关于为啥在 YOLOv5 中这两个结果不同?的主要内容,如果未能解决你的问题,请参考以下文章

为啥这两个 NHibernate 查询会产生不同的结果?

为啥这两个指针减法会给出不同的结果?

谁能告诉为啥以下两个代码之间的结果不同? [复制]

为啥这两个高(64bx64b)函数会给出不同的结果?

为啥 web2py 中两个逻辑相似的查询给出不同的结果?

为啥 innerHTML 和 textContent 给出不同的结果?