如何使用云端GPU训练yolov5(colab)

如何使用云端GPU训练yolov5(colab)

一、获取yolov5文件

从githup上直接在下载,(科学上网)链接:link

二、上传文件到colab

直接google 搜索 colab,用New–>More–>Google Colaboratory,新建一个note文件
在这里插入图片描述
创建完之后,可以自己取个名字,这里取名为yolov5.ipynb,然后点击左侧文件图标,等待一会,点击upload图标,找到yolov5的下载路径(因为是单个文件,所以必须把文件变成压缩包的形式),然后进行上传,上传完成后,点击刷新按钮,就可以看到上传的文件。
在这里插入图片描述
上传好后如图所示

在这里插入图片描述

三、训练

1、设置GPU资源

将自己的环境换成具有GPU的配置,首先点击Resource如下图step1所示,接着点击下方Change runtime type 如step2所示,点击step3框中下拉菜单,选择GPU,点击save。(若长时间不用GPU资源的话,colab会自动回收GPU资源)
在这里插入图片描述

2、解压缩资源

在旁边的代码块中依次运行

! unzip /content/yolov5-5.0.zip -d /content/yolo

效果如下图所示

在这里插入图片描述

%cd /content/yolo/yolov5-5.0

在这里插入图片描述

!pip install -r requirements.txt 

在这里插入图片描述

!python train.py

在这里插入图片描述

注意这里会报上图方框中显示的错误:
AttributeError: Can’t get attribute ‘SPPF’ on <module ‘models.common’ from ‘/content/yolo/yolov5-5.0/models/common.py’>

原因是在yolov5的官方源代码中缺少SPPF的类,在yolov5-5.0–>models文件夹中打开common.py文件,找到calss SPP代码位置,在上方粘贴如下代码,即可,具体操作如下图所示。

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))

在这里插入图片描述

在这里插入图片描述
接下来重复训练操作

!python train.py

在这里插入图片描述

然后,现在出现上图方框中出现的错误
RuntimeError: Given groups=1, weight of size [512, 1024, 1, 1], expected input[1, 512, 8, 8] to have 1024 channels, but got 512 channels instead
意思是通道不匹配的错误,解决方法:

在左边文件列表中,找到train.py文件,打开,找到
if name == ‘main’:
参数初始化代码处,在–cfg 所在行中的 default=’ ',在引号中添加如下路径:

/content/yolo/yolov5-5.0/models/yolov5s.yaml

此路径在,yolov5-5.0–>models–>yolo5s.yaml文件,点击竖着的三个点可以直接拷贝路径,如下图所示:
在这里插入图片描述
添加好路径后如下图所示(注意:这里的yolov5s.yaml 必须与上一行的 yolo5s.pt对应)
在这里插入图片描述
保存,并重复

!python train.py

在这里插入图片描述

然后,现在出现上图方框中出现的错误,
RuntimeError: result type Float can‘t be cast to the desired output type long int
这是因为yolo版本的不同导致loss文件出现不匹配的原因,解决方法如下:
打开yolov5-5.0–>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

修改完保存,再次运行:

!python train.py

看到下图的界面时,表示代码运行正常,大功告成!
在这里插入图片描述

  • 4
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值