目录
- 前言
- 1.资源下载
- 2.环境配置
- 3.运行代码
- 报错: 'Upsample' object has no attribute 'recompute_scale_factor'
- 报错:assert img0 is not None, 'Image Not Found ' + path AssertionError
- 报错:AttributeError: Can't get attribute 'SPPF' on <module 'models.common' from 'E:\\All_in\\新建文件夹\\yolo_double\\yolov5_stereo_Pro\\models\\common.py'>
- 接着报错:RuntimeError: The size of tensor a (80) must match the size of tensor b (56) at non-singleton dimension 3
- 4.结果
- 总结
前言
前面将pytorch的基础入门之后,继续跟着小土堆学习。本篇内容记录我搭建YOLOv5项目的过程,以及遇到的一些问题与相应的解决方案,方便个人以后查阅,并且希望能够个其他读者带来一些帮助。
1.资源下载
我们先去GitHub中找到YOLOv5的源码,地址:https://github.com/ultralytics/yolov5,我们可以选择不同的版本下载。我是跟这小土堆学习的,选择了与他相同的版本v5.0,小伙伴本也可以下载最新的,好像可以避免一些与你pytorch版本不相符的问题。
2.环境配置
我使用的的是pycharm工具,直接打开我们上面下载好的文件(记得解压缩),记得更改我们的python 解释器,选择pytorch环境下的Python Interpreter,没有pytorch环境的小伙伴需要提前准备一下项目环境(有很多教程)。
接下来,我们可以看一看项目的结构目录,找到requirements.txt文件,这里面就是项目所需要的依赖包情况(一般这个文件的项目都是比较好项目,提前告诉我们所需要的依赖情况;如果别的项目没有这个文件,那么就能根据代码爆红的地方一个一个导入,或者直接运行代码,根据代码的报错进行debug)。
接下来我们在终端中运行如下代码,导入相应的依赖包
如果pycharm终端报错,无法识别pip,那么请打开anaconda prompt,切换到你项目对应的环境,之后cd到项目的文件目录,再运行下面代码
pip install -r requirements.txt
pycocotools和thop库安装失败
我在这个时候就出现了依赖的库无法下载的情况,报错出现pycocotools和thop库安装失败,这是一个系列问题,pycocotools安装不下来,所以导致了thop库安装不了,所以才有这系列错误。这个问题小土堆提前发了视频预警,也提供的解决方案:
- 解决方案一(up主提供的):
我们根据报错信息去官网安装好相应的软件:https://visualstudio.microsoft.com/zh-hans/visual-cpp-build-tools/(我不太喜欢这种方式,因为这个下载的visualstudio软件有8G多),下载好软件之后重新运行安装的指令即可解决(亲自使用有效)
- 解决方案二(直接把安装包导入进来):
我们去以下链接中将 pycococtools的安装包下载好,将安装包直接解压,复制其中pycocotools两个文件夹到conda环境…\Lib\site-packages之中,如果没有conda 的环境,那么可以将两个文件夹复制到python的site-packages中,之后再运行命令行就不会出现安装报错的情况。(未亲自实验)
https://pan.baidu.com/s/1nWQdPRtGwNnOO2DkxRuGuA 提取码:i5d7
3.运行代码
依赖环境都准备完成,就可以跑项目了。运行detect.py,下载模型训练好参数权重文件出现了超时(因为有墙所以下载太慢了),我们可以1.挂梯子下载文件,也可以2.配置镜像源下载,还可以选择3.迅雷下载本地,然后将权重文件.pt复制到项目的主目录下。
报错: ‘Upsample’ object has no attribute ‘recompute_scale_factor’
这个错误是由于版本问题所导致的,我这里的pytorch版本为2.0,但是YOLOv5 的5.0版本对应的pytorch版本应该为1.0的,所以出现了相应方法参数变化了的情况。
- 解决方案一:
选择YOLOv5的最新版本 - 解决方案二:
ctrl+鼠标左击报错信息中的路径,进入到upsampling.py文件中,直接forward方法中的参数给删除
蓝色部分就是我们需要删除的代码,大家可以详细参考这篇博文
报错:assert img0 is not None, 'Image Not Found ’ + path AssertionError
出现这个错误首先去项目中核对了图片的路径是否有问题,图片是真实存在的,仔细看看报错的路径信息就会发现,图片是去绝对路径下面寻找的(这里我也有点不理解为啥绝对路径不可以),然后出现了报错,所以我们要去修改代码。
- 解决方案
修改utils/datasets.py,在124行附近,把p = str(Path(path).absolute())改成p = str(Path(path))
解决方法参考这篇博文
报错:AttributeError: Can’t get attribute ‘SPPF’ on <module ‘models.common’ from ‘E:\All_in\新建文件夹\yolo_double\yolov5_stereo_Pro\models\common.py’>
解决办法
再models文件夹下面的common.py添加如下代码
class SPPF(nn.Module):
def __init__(self, c1, c2, k=5):
super().__init__()
c_ = c1 // 2
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')
y1 = self.m(x)
y2 = self.m(y1)
return self.cv2(torch.cat([x, y1, y2, self.m(y2)], 1))
接着报错:RuntimeError: The size of tensor a (80) must match the size of tensor b (56) at non-singleton dimension 3
这个错误是由于默认下载的权重文件和你yolov5的版本不对应,所以就会出现张量大小不一致的问题
解决方法
直接去github下载你对应版本的权重
https://github.com/ultralytics/yolov5/releases/download/v5.0/yolov5s.pt
替换默认下载的yolov5s.pt,因为默认下载的是V6.1的(权重文件就在项目下面,你刷新一下项目就会有了)
4.结果
项目运行完成后,会将结果保存在 runs\detect\文件目录下
Model Summary: 224 layers, 7266973 parameters, 0 gradients, 17.0 GFLOPS
image 1/2 data\images\bus.jpg: 640x480 4 persons, 1 bus, 1 fire hydrant, Done. (0.381s)
image 2/2 data\images\zidane.jpg: 384x640 2 persons, 2 ties, Done. (0.263s)
Results saved to runs\detect\exp
我们可以查看运行结果:(左:原图 右:目标检测结果)
总结
将代码在本地跑通了还是很开心的,不过对于YOLOv5的学习这才刚刚开始,还需要学会看懂代码的各个模块,以及如何使用其解决自己以后的目标检测的实际需求,这里还有很长的路要走。并且,我是直接使用别人已经训练好的参数权重经行预测的,那么自己训练时,如何根据模型的表现进行相应的调整呢?前路漫漫,还需 努力!