[TOC]

yolov5下载与常见报错解决

一、下载源码

GitHub官方地址

这个开源的项目通过大家的不断的完善和修复已经有了很多分支,因此我们选择第五个版本来实验,首先点击左上角的master这个图标来选择项目的第5个分支,如下图所示,然后将版本选择好以后,点击右上角的code那个按键,将代码下载下来。至此整个项目就已经准备好了。

文件结构与内容

data:主要是存放一些超参数的配置文件(这些文件(yaml文件)是用来配置训练集和测试集还有验证集的路径的,其中还包括目标检测的种类数和种类的名称);还有一些官方提供测试的图片。如果是训练自己的数据集的话,那么就需要修改其中的yaml文件。但是自己的数据集不建议放在这个路径下面,而是建议把数据集放到yolov5项目的同级目录下面。

models:里面主要是一些网络构建的配置文件和函数,其中包含了该项目的四个不同的版本,分别为是s、m、l、x。从名字就可以看出,这几个版本的大小。他们的检测测度分别都是从快到慢,但是精确度分别是从低到高。这就是所谓的鱼和熊掌不可兼得。如果训练自己的数据集的话,就需要修改这里面相对应的yaml文件来训练自己模型。

utils:存放的是工具类的函数,里面有loss函数,metrics函数,plots函数等等。

weights:放置训练好的权重参数。

detect.py:利用训练好的权重参数进行目标检测,可以进行图像、视频和摄像头的检测。

train.py:训练自己的数据集的函数。

test.py:测试训练的结果的函数。

requirements.txt:这是一个文本文件,里面写着使用yolov5项目的环境依赖包的一些版本,可以利用该文本导入相应版本的包。

以上就是yolov5项目代码的整体介绍。我们训练和测试自己的数据集基本就是利用到如上的代码。

安装依赖包

pip install -r requirements.txt

按照对应版本安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# pip install -r requirements.txt

# base ----------------------------------------
matplotlib>=3.2.2
numpy>=1.18.5
opencv-python>=4.1.2
Pillow
PyYAML>=5.3.1
scipy>=1.4.1
torch>=1.7.0
torchvision>=0.8.1
tqdm>=4.41.0

# logging -------------------------------------
tensorboard>=2.4.1
# wandb

# plotting ------------------------------------
seaborn>=0.11.0
pandas

# export --------------------------------------
# coremltools>=4.1
# onnx>=1.8.1
# scikit-learn==0.19.2 # for coreml quantization

# extras --------------------------------------
thop # FLOPS computation
pycocotools>=2.0 # COCO mAP

二、运行detect报错

1、由于学习安装的是yolov5 模型的5.0版本,(目前最新的是6.1版本)

1、报错内容

AttributeError: Can’t get attribute ‘SPPF’ on <module ‘models.common’ from ‘C:\Users\Administrator\Desktop\yolov5\yolov5-5.0\models\common.py’>

2、报错原因

应该是我安装的是yolov5 模型的5.0版本,运行detect下载的的是6.1版本,5.0版本中缺少`SPPF这个类。

3、解决方案

去Github网站,找到最yolov5 最新版本,去common.py里面去找到这个SPPF的类,把它复制到我们下载的yolov5 文件的 model/common.py里面。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import warnings

class SPPF(nn.Module):
# Spatial Pyramid Pooling - Fast (SPPF) layer for YOLOv5 by Glenn Jocher
def __init__(self, c1, c2, k=5): # equivalent to SPP(k=(5, 9, 13))
super().__init__()
c_ = c1 // 2 # hidden channels
self.cv1 = Conv(c1, c_, 1, 1)
self.cv2 = Conv(c_ * 4, c2, 1, 1)
self.m = nn.MaxPool2d(kernel_size=k, stride=1, padding=k // 2)

def forward(self, x):
x = self.cv1(x)
with warnings.catch_warnings():
warnings.simplefilter('ignore') # suppress torch 1.9.0 max_pool2d() warning
y1 = self.m(x)
y2 = self.m(y1)
return self.cv2(torch.cat([x, y1, y2, self.m(y2)], 1))

2、Upsample报错

1、报错内容

AttributeError: ‘Upsample‘ object has no attribute ‘recompute_scale_factor‘

2、解决方案

打开usampling.py,找到第155行附近,删除蓝框内代码。

3、RuntimeError报错

1、报错内容

RuntimeError: The size of tensor a (60) must match the size of tensor b (56) at non-singleton dimension 3

2、报错原因

yolov5s.pt模型版本不匹配

3、解决方案

点击下载下面的yolov5s.pt模型文件替换原文件中的文件

yolov5s.pt

三、运行detect

运行成功

![微信图片_20220913205224](C:\Users\lee\Documents\Tencent Files\1372954073\FileRecv\微信图片_20220913205224.jpg)

识别结果

bus

zidane