0


复现炮哥带你学—Yolo5训练安全帽(vscode + pytorch)报错总结,数据库链接+权重文件链接

复现炮哥带你学—Yolo5训练安全帽(vscode + pytorch)报错总结,数据库链接+权重文件链接

1、本篇博客说明

  该篇博客是小编苦经环境配置以及代码各种问题报错后,成功复现博客“炮哥带你学”的Yolo5安全帽的经验分享,也可以算是我所遇到的问题的总结,也顺便记录我深度学习的过程。

  在这里贴一张成功复现,并正在训练的图片。
在这里插入图片描述

  环境的配置以及给自己想要的数据集打标签等步骤我在这里省略,如果你有什么不清楚的,可以去看“炮哥带你学”的相关博客以及对应的B站视频。为了更好的帮到你,我在此列出我所省略的东西,并说明学习的顺序以及对应的链接。如下:

第一步:环境的安装
  对应的博客:https://blog.csdn.net/didiaopao/article/details/119787139
  对应的B站视频:https://www.bilibili.com/video/BV1f44y187Xg?p=2&vd_source=cca00652b9b49985d570f56c8317309d

第二步:学习使用labelimg给数据集打标注
  对应的博客:https://blog.csdn.net/didiaopao/article/details/119808973
  对应的B站视频:https://www.bilibili.com/video/BV1f44y187Xg?p=3&vd_source=cca00652b9b49985d570f56c8317309d

第三步:数据集格式转换与划分
  对应的博客:https://blog.csdn.net/didiaopao/article/details/120022845
  对应的B站视频:https://www.bilibili.com/video/BV1f44y187Xg?p=4&vd_source=cca00652b9b49985d570f56c8317309d

前面这三步是复现的基础,也是以后去训练自己模型的基本步骤,所以也请认真学习。完成这三步的学习后,就到了第四步,也就是我遇到问题最多的地方,即下载源代码并开始训练。


2、训练YOLOV5前的准备工作

2.1学习第四步对应的博客链接和B站链接

  对应的博客:https://blog.csdn.net/didiaopao/article/details/119954291
  对应的B站视频:https://www.bilibili.com/video/BV1f44y187Xg?p=5&vd_source=cca00652b9b49985d570f56c8317309d

2.2数据集下载

在这里插入图片描述

https://pan.baidu.com/s/1WwNX-bU9fD_mAofasn7E4A?pwd=6x9r
下载好数据集之后,用第三步“数据集格式转换与划分”中将voc数据格式转换为yolo数据格式的代码,完成数据集的划分。
在划分数据集之前,你的数据集结构应该是这样子的:
在这里插入图片描述

当数据集划分后,除了在VOC2007路径下多了yolo格式的数据文件夹:
在这里插入图片描述
在VOCdevkit路径下会多出两个文件夹,分别是images和labels,里面其实就是划分的训练集和验证集。
在这里插入图片描述

2.3YOLOV5源代码下载

进入yolov5下载的GitHub网站下载代码:https://github.com/ultralytics/yolov5/tree/v5.0
在这里插入图片描述

2.4权重文件yolov5s.pt下载

通过下面这个链接下载5s这个权重文件
https://pan.baidu.com/s/10uyMTanqm9DQvSFctiyYQQ?pwd=wnlt

2.5放置划分好的数据集和权重文件

  数据集的放置:放置到你解压源代码文件后的yolov5-5.0路径下就可以了,与data、models、runs等文件夹是同路径的。
在这里插入图片描述
  权重文件的放置:放置到yolov5-5.0路径下的weights文件夹里面。
在这里插入图片描述

2.6修改我们需要的数据.yaml文件

在这里插入图片描述
修改我们的hat.yaml文件内容:
在这里插入图片描述
我们所需要的数据路径如下:
在这里插入图片描述
修改好的hat.yaml文件如下:
在这里插入图片描述

2.7修改我们需要的模型.yaml文件

在这里插入图片描述
然后把第一行的类别改为2就可以了。
在这里插入图片描述

2.8修改我们的train.py文件

修改我们的权重文件、模型文件、数据文件路径。修改位置为train.py的458到460行。
在这里插入图片描述
权重路径:
在这里插入图片描述
模型路径:
在这里插入图片描述
数据路径:
在这里插入图片描述

2.9修改我们的datasets.py文件

将81行的 num_workers的值设置为0,如果步设置为0,会发生3.5所描述的报错。
在这里插入图片描述


到这里,我们的准备工作就做完了,接下来就要开始运行代码,报错即将开始。


3、开始我们的bug解决之旅

这里说明一下,本篇文章与炮哥的视频中的步骤是不一样的,我在运行任何代码(包括配置环境所需要的包)前,已经将准备工作(包括data和models中的.yaml文件改写以及train.py文件修改好)。

3.1运行requirements.txt配置发生报错

  • 错误描述:在终端运行pip install -r requirements.txt配置所需要的包发生报错,报错内容如下

FileNotFoundError: [WinError 206] 文件名或扩展名太长

在这里插入图片描述

  • 错误原因

安装onnx-simplifier包的时候使用以下指令时出现了报错。

pip install -i https://pypi.douban.com/simple onnx-simplifier==0.4.10--user
  • 解决办法2:如果办法1没有解决问题,也可能是因为你开了翻墙软件的原因,导致在下载所需要的包的时候跑到了国外下载,所以发生报错。你可以关闭翻墙软件后,重启电脑,然后再在终端运行pip install -r requirements.txt。本人是这样解决的。如果比较慢,可以运行下面的代码(使用清华源下载):
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

3.2运行train.py发生报错之SPPF类报错

  • 错误描述:在第一次运行train.py时发生了以下报错

AttributeError: Cant get attribute SPPF on module models.common from E:\VScode_project\Y5\yolov5-5.0\models\common.py

  • 错误原因:common.py文件中缺少了SPPF类
  • 解决办法:在vscode中的models下找到common.py文件在这里插入图片描述 在这给文件中加入以下代码:
import warnings
classSPPF(nn.Module):# Spatial Pyramid Pooling - Fast (SPPF) layer for YOLOv5 by Glenn Jocherdef__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)defforward(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))

加入SPPF类后的common.py文件如下:
在这里插入图片描述

3.3运行train.py发生报错之RuntimeError:result type Float can‘t be cast to the desired output type long int报错

  • 错误描述

RuntimeError: result type Float can‘t be cast to the desired output type long int
或者
RuntimeError: result type Float can‘t be cast to the desired output type __int64

  • 错误原因:yolov5-master版本和yolov5-5.0/yolov5-6.1等版本下的【utils】中的【loss.py】文件是不一样的,大概是yolov5-5.0/yolov5-6.1等版本在更新版本的时候出了问题。
  • 问题解决:找到utils下的loss.py,在这里插入图片描述 用以下代码修改第178行代码,
 anchors, shape = self.anchors[i], p[i].shape 

修改后代码图片:(一定要注意对其)
在这里插入图片描述
用以下代码修改第211行代码,

indices.append((b, a, gj.clamp_(0, shape[2]-1), gi.clamp_(0, shape[3]-1)))# image, anchor, grid

修改后代码图片:
在这里插入图片描述

3.4运行train.py发生报错之AttributeError: module ‘numpy’ has no attribute ‘int’.

  • 错误描述

AttributeError: module ‘numpy’ has no attribute ‘int’.

  • 错误原因:原因是你下载的numpy版本过高,里面已经不支持int这个函数还是类,反正就是你的numpy中没有“int”这个结构了。
  • 解决办法:将你的numpy降低版本,降到1.22这个版本,具体操作如下:

先用下面的代码卸载你当前版本的numpy,

pip uninstall numpy

然后用下面的代码安装1.22版本的numpy,

pip install numpy==1.22

如果下载是不是就出现链接报错或者是远程服务器关闭等错误,那就关掉你的翻墙软件,在进行下载安装,不行就重启电脑

3.5运行train.py发生报错之[WinError 1455]页面文件太小,无法完成操作。

  • 问题描述在这里插入图片描述
  • 问题原因:虚拟内存不够
  • 问题解决:看2.8的操作。

3.6运行train.py发生报错之CUDA out of memory.

  • 问题描述在这里插入图片描述
  • 问题原因:GPU显存溢出的报错。
  • 问题解决:修改train.py的batch size 和参与的cpu个数.在这里插入图片描述

4、模型的验证和推理

因为博客写到这里的时候,模型也刚好训练完,所以就干脆把模型的验证和推理所遇到的报错给写了。相信部分小伙伴肯定也会遇到这些问题。

4.1图片的推理

首先我们要找到我们训练好之后的模型文件,last.py和best.pt这两个文件,他们的位置在runs->train里面,如下图:
在这里插入图片描述
然后我们找到我们的推理文件detect.py,修改模型路径和所要测试的图片路径:
在这里插入图片描述
运行detect.py文件,然后就会报错啦,哈哈哈!!!

  • 报错描述

OSError: [Errno 22] Invalid argument: ‘weights\x08est.pt’

  • 报错原因:路径书写格式有问题,比如’weights\best.pt’,我们在单引号里面使用了‘\’,大家学过点编程都知道这个符号是比较特殊的符号,即转义字符,例如‘\t’表示换行,‘\a’表示发出警报。所以尽量不要用’'的路径表示方式。
  • 解决办法:把所有的‘\’全部换位‘/‘。即原本的’weights\best.pt’变成’weights/best.pt’. 还有其他的改写方法,这里我就不说了,百度一下就全知道了。

运行成功后,我们的图片会被保存到下面这个地方,点击就可以进行查看了:exp后面的数字代表你第几次运行detect.py这个文件
在这里插入图片描述在这里插入图片描述

4.2视频的推理(附带视频素材下载链接)

找相关视频其实挺麻烦的,所以在这里我给大家找到了下载相应素材的网站,大家自行下载就可以了
视频素材下载网站https://www.2amok.com/videoText/424071.html

跟图片推理的操作是一样的,把路径写到对应位置运行就可以了,注意路径中的‘\’要改为‘/’。
在这里插入图片描述

效果如下:

yolov5安全帽检测

4.3摄像头实时推理

将数据路径写为0。
在这里插入图片描述

打开dataset.py文件,找到第279行代码,给两个url参数加上str就可以了,如图所示,就可以完美运行电脑的摄像头了。
在这里插入图片描述
这里就不放视频了,大家自己去尝试吧。


5、总结

由于本人也是新手小白,写这篇文章也是为了记录自己的学习之旅。在这篇文章中也可能有一些错误,大家可以在评论区指出。最后也希望这篇文章能够帮助到你。


本文转载自: https://blog.csdn.net/why1249777255/article/details/133716767
版权归原作者 EthanWsir 所有, 如有侵权,请联系我们删除。

“复现炮哥带你学—Yolo5训练安全帽(vscode + pytorch)报错总结,数据库链接+权重文件链接”的评论:

还没有评论