如何使用云端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
看到下图的界面时,表示代码运行正常,大功告成!