YOLOv7使用云GPU训练自己的数据集

最近注意到yolov7出来了,才刚刚开始看yolov5呢,只能说大佬就是大佬。前不久才跑通了yolov5的代码,看见yolov7出来了,就想着来试试看。看了很多csdn上的教程,收获很多,但是大家都是用自己的电脑就开始跑起来了,没有显卡的我只能用云GPU了。刚开始摸索云GPU真的心累,一点基础没有,硬是把csdn和b站翻过来了,才会了些基础操作。使用的云GPU是恒源云,一开始看了很多家,最后是因为学生注册就给50代金券,我就毫不犹豫先选它了,毕竟白嫖可太香了,而且文档也挺细的,不过社区就没那么好了,去逛了一圈并没有解决我当时的很多问题,都是标准回答...不小心扯远了,哈哈哈,第二次在csdn上写东西(严格来说是第一次写这么长的文章),大家多多包涵。后面如果有时间的话,我再写一篇云GPU怎么用,希望能帮助没有显卡想用云GPU的同学。接下来就进入正题吧

使用的是云GPU+pycharm专业版(社区版无法远程链接,如果是学生的话可以使用教育邮箱申请专业版,我申请时当天就回复我了)

首先,先贴上YOLOv7的代码链接(官方):

https://github.com/WongKinYiu/yolov7

不过访问github经常不稳定,深有体会。所以,也贴上网盘链接(虽然某度的速度也慢),权重文件是.zip格式,下载下来后改成.pt后缀就可以了。代码下载的时间大概是7.17。

权重链接链接:https://pan.baidu.com/s/18FyZKy1u4QOUnAH0nGkjrg 
提取码:oxle

代码链接:https://pan.baidu.com/s/13wwiix8q75fHDZzEULc9yw 
提取码:rto5

pycharm的解释器配置:

YOLOv7使用云GPU训练自己的数据集_第1张图片

train.py的参数设置

其中weights cfg data hyp是需要设置的,batch-size过大可能会报错显卡显存不足,workers可以参考https://blog.csdn.net/flamebox/article/details/123011129

YOLOv7使用云GPU训练自己的数据集_第2张图片

weights

权重文件就用上面的链接下载即可,上传到服务器上。我只使用了yolo7.pt,有兴趣可以试试别的权重文件,不过可能会用到train_aux.py。

YOLOv7使用云GPU训练自己的数据集_第3张图片

cfg和hyp

 yolov7模型文件使用代码里的yaml文件,不过需要修改nc为自己数据集的类别数。超参数也是默认文件。

 YOLOv7使用云GPU训练自己的数据集_第4张图片YOLOv7使用云GPU训练自己的数据集_第5张图片

 data

 数据集文件,复制data文件下的coco.yaml一份命名为mydata.yaml。其中train_list.txt是自己数据集images/train的绝对路径,val_list.txt是images/val的绝对路径。这里我写的是相对路径,注意这个相对路径是相对于train.py文件的,不是相对于mydata.yaml文件。当然绝对路径是不会出错的,我是看见一个博主说相对路径报错了,我就试了一下,结果使用../train_list.txt出错,程序找不到文件。

YOLOv7使用云GPU训练自己的数据集_第6张图片

YOLOv7使用云GPU训练自己的数据集_第7张图片

YOLOv7使用云GPU训练自己的数据集_第8张图片

自动获取数据集train和val的images文件夹中图片的绝对路径,参考https://blog.csdn.net/qq_58355216/article/details/125677147

下面是生成train_list.txt的代码,如果要生成val_list.txt,将path和with open('./train_list.txt', 'w') as f:中的train换val

# From Mr. Dinosaur https://blog.csdn.net/qq_58355216/article/details/125677147

import os


def listdir(path, list_name):  
    for file in os.listdir(path):
        file_path = os.path.join(path, file)
        if os.path.isdir(file_path):
            listdir(file_path, list_name)
        else:
            list_name.append(file_path)


list_name = []
path = '/hy-tmp/yolov7-main/mydata/images/train'  # 训练集图像所在文件夹的绝对路径
listdir(path, list_name)
print(list_name)

with open('./train_list.txt', 'w') as f:  # 在当前目录下生成train_list.txt文件
    write = ''
    for i in list_name:
        write = write + str(i) + '\n'
    f.write(write)

 不过mydata.yaml也可以设置成和YOLOv5中data参数的值一样,也是可以开始训练的。(所以这两种方法有什么区别?有知道的可以评论区告诉我)

YOLOv7使用云GPU训练自己的数据集_第9张图片

 训练

基本上需要设置的参数已经ok了,可以开始训练了。记得将修改后的项目与云端同步,就可以运行train.py文件了。

YOLOv7使用云GPU训练自己的数据集_第10张图片

因为只是试试能不能跑,所以epoch设置为30。训练结果保存在runs/train/exp。

YOLOv7使用云GPU训练自己的数据集_第11张图片

 报错

1、使用恒源云GPU训练的时候,会出现(不知道是不是环境问题)

ImportError: libgthread-2.0.so.0: cannot open shared object file: No such file or directory

在终端输入下面代码

apt-get install libglib2.0-dev 

2、batch size设置过大出现RuntimeError: CUDA out of memory. 

3、报错,参考https://blog.csdn.net/qq_36944952/article/details/124683408

AttributeError:module ‘distutils’ has no attribute 'version

使用如下代码

pip uninstall setuptools
pip install setuptools==59.5.0 //需要比你之前的低 

测试

测试文件的参数设置

权重使用训练30次的best.pt文件,预测图片文件夹inference/images,注意路径写对。--view-img参数默认false,设置为true可以展示预测结果窗口(不过使用云端运行detect.py文件,展示会报错,找了很多教程都没解决(教程都说用mobaxterm),如果有知道解决方法的可以评论区告诉我)。project和name是结果保存路径runs/detect/exp。

YOLOv7使用云GPU训练自己的数据集_第12张图片

 结果

YOLOv7使用云GPU训练自己的数据集_第13张图片

报错

1、忘了上传detect.py到服务器,导致一直运行失败。报下面的错

subprocess.CalledProcessError: Command ‘git tag’ returned non-zero exit status 128

也有可能是参数设置出问题了,可以仔细检查一下

ps 以上只是简单地训练yolov7,如果文章有错误或者你有更好的见解请不吝赐教

你可能感兴趣的:(python,深度学习,pytorch,服务器)