安装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**anaconda3pkgs文件夹里,开始离线安装 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差很多

  终于有篇原创的博客了哈哈哈

原文地址:https://www.cnblogs.com/boligongzhu/p/15106780.html