安装yolov5 requirements踩的坑(CPU版本)
1, 准备工作
git clone https://github.com/ultralytics/yolov5 # 下载 yolov5 项目 python3 -c "from yolov5.utils.google_utils import gdrive_download; gdrive_download('1n_oKgR81BJtqk75b00eAjdv03qVCQn2f','coco128.zip')" # 下载官方例子的数据集 cd yolov5 #进入yolov5 项目文件 conda install -U -r requirements.txt #安装需求
2,在安装 requirements的时候狂出错
2.1 pytorch
直接用conda install pytorch是不可能安装的了的,你得去pytorch 官网获得下载命令:
然并卵,conda install pytorch torchvision torchaudio cpuonly -c pytorch,速度那是相当的慢。找了很多网上的解决办法,清华镜像关掉了,科大镜像也没法用,试了阿里云,还是装不上。各种environment报错,或者各种慢(安装的时候极度崩溃,忘记截屏了)。
折腾了一整天后还是决定手动下载,可以去清华镜像官网下载,虽然不能直接用镜像,但是安装文件还是一直在更新的,速度飞一般非常赞!
既然能下载当然是下载最新的1.9.0啦!美滋滋的放到D:\Users\**\anaconda3\pkgs文件夹里,开始离线安装 conda install --offline *** 然而,装是装好了,美滋滋要调用的时候开始报错:
[WinError 126] 找不到指定的模块
心里哇凉哇凉的又开始找解决办法,有的说没装vc c++,可是我真的装了T_T。有的说要升级conda,于是conda update all, 还是不行。
最后!!!!!忍痛开始给pytorch降级,查了下载yolov5的requirement文件,好吧,那就擦边吧,
重新去镜像官网下载了
torchvision忘记把降级之前的删了
再重新安装,于是……
finally 喜极而泣!
2.2 又检查了一下,还有thop
conda install thop 还是不行。有了前面的经验,手动安装(下载地址)
下载最新版后又遇到了问题,有了前面的经验,降级……
安装的时候又遇到了问题,环境还是不过关?但是用pip安装又没问题,但是!pip安装完用conda list根本看不到,继续网上搜索……终于,这样解决的
1)先查看虚拟环境名称
2)然后
喜极而泣!!!
3,用本地摄像头测试一下
3.1 yolov5s.pt
将官网yolov5s.pt权重文件下载到yolov5文件夹下,命令:python detect.py --weights yolov5s.pt --source 0
可以看到自己美美的出现在屏幕上,并且被标注为:person 0.56 ....嗯,郁闷的想哭,我就是半个人么?还是试试5x吧
3.2 yolov5x.pt
将官网yolov5x.pt文件下载到yolov5文件夹下,命令:python detect.py --weights yolov5x.pt --source 0,报错了~
神马叫:Can't get attribute 'SPPF' ?SPPF是神马东东?搜了全网才发现博客https://blog.csdn.net/Steven_Cary/article/details/120886696 的解答,然后孤陋寡闻的我才刚知道权重文件都出到第6版啦?
解决方案是:去Tags6里面的model/common.py里面去找到这个SPPF的类,把它拷过来到你这个Tags5的model/common.py里面,这样你的代码就也有这个类了,还要引入一个warnings包就行了!
有的同学找不到SPPF这个类,那我现在直接粘贴在这里,你们只需要复制到你们的common.py里面即可,记得把import warnings放在上面去:
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))
亲测可用,美美的我终于变成 person 0.95了,但实时性实在是比5s差很多
终于有篇原创的博客了哈哈哈