复现炮哥带你学—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
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))

加入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、总结

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

好的,那我们开始吧! 首先,YOLO(You Only Look Once)是一种基于深度习的物体检测算法,它通过卷积神经网络直接在图像上完成物体检测和定位,具有速度快、精度高等优点,因此在实际应用中得到了广泛的应用。 YOLOv5是YOLO系列最新的版本,相对于之前的版本,它在网络结构、数据增强、习策略等方面进行了优化,提高了检测的精度和速度。下面我们来习一下YOLOv5的使用。 1. 安装YOLOv5 YOLOv5可以通过GitHub上的开源项目进行下载和安装,具体步骤如下: 1)克隆YOLOv5项目到本地 ``` git clone https://github.com/ultralytics/yolov5.git ``` 2)安装相关依赖 ``` pip install -r requirements.txt ``` 2. 训练自己的数据集 训练一个物体检测模型需要准备好标注好的数据集,然后通过训练模型来习如何检测这些物体。YOLOv5支持各种不同的数据格式,包括COCO、Pascal VOC等。 在准备好数据集之后,可以通过以下命令来训练模型: ``` python train.py --img 640 --batch 16 --epochs 50 --data coco.yaml --cfg models/yolov5s.yaml --weights '' --name yolov5s_results ``` 其中,--img指定输入图像大小,--batch指定批量大小,--epochs指定训练轮数,--data指定数据集的配置文件,--cfg指定模型的配置文件,--weights指定预训练模型的权重,--name指定训练结果保存的文件夹名称。 3. 测试模型 训练完成之后,可以使用训练好的模型对新的图像进行检测。可以使用以下命令来进行测试: ``` python detect.py --source 0 --weights yolov5s_results/weights/best.pt --conf 0.25 ``` 其中,--source指定输入图像或视频的路径,0表示使用摄像头输入,--weights指定训练好的模型权重,--conf指定置信度的阈值,低于这个阈值的检测结果将被忽略。 4. 导出模型 最后,可以将训练好的模型导出到ONNX格式或TorchScript格式,以便在其他平台上使用。可以使用以下命令来导出模型: ``` python models/export.py --weights yolov5s_results/weights/best.pt --img-size 640 --batch-size 1 ``` 其中,--weights指定训练好的模型权重,--img-size指定输入图像大小,--batch-size指定批量大小。 这就是使用YOLOv5进行物体检测的基本流程。当然,在实际应用中,还需要根据具体情况进行参数调整和优化。
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值