(win10)yolov5训练自己的数据集

目录

环境:

python包的配置

文件夹路径

标注数据

获取电脑/视频里的图片

开始标记数据

划分划分训练集、验证集、测试集

 把相应的文件路径存入txt文件中,xml转为txt

创建配置文件

聚类获得先验框

 开始训练

 运行文件:

用gpu训练

查看cuda版本

​编辑

安装pytorch

训练

问题

如果出现 (页面太小,无法完成操作)的相关问题

 参考文章:


环境:

  • windows 10
  • yolov5的源文件(链接yolov5
  • 标注工具(链接标注

python包的配置

打开pycharm的终端

运行

pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple

文件夹路径

在data文件中创建一个VOCData文件

进入VOCData文件夹里面创建一个Annotations文件夹用于放置你标记的数据集的数据xml或者是txt,再在VOCData文件夹里面创建一个images的文件夹里面用于放你的训练的图片

先创建好,有没有还没有关系。

标注数据

接下来就是标注数据集了

打开上面的标注数据的工具(原来用于dnf挂机的脚本工具,用了发现他的自动截图功能不错,而且标记出来的数据labels可以直接用,不用xml转txt了)

获取电脑/视频里的图片

打开自动截图

要设置区域可以按照上面的文字来设置截图区域

 然后开启全屏,之后直接ctrl+q键开始截图就行了(默认时间是3秒自动截图一次)

默认是png,我用的jpg,为了防止后面代码报错,最好也改成这个吧

截图文件在软件目录下的的“截图”文件夹

开始标记数据

点击“打开图库”

把刚刚 截图的图片给复制进去

然后重启一次软件就可以开始标记了

需要注意的是最后要把没有任何标记的图片删除,以防后面执行代码时报错

划分划分训练集、验证集、测试集

在data/VOCData文件目录下面创建一个py文件(名字随意,认得出来就行)

# coding:utf-8

import os
import random
import argparse

parser = argparse.ArgumentParser()
#xml文件的地址,根据自己的数据进行修改 xml一般存放在Annotations下
parser.add_argument('--xml_path', default='Annotations', type=str, help='input xml label path')
#数据集的划分,地址选择自己数据下的ImageSets/Main
parser.add_argument('--txt_path', default='ImageSets/Main', type=str, help='output txt label path')
opt = parser.parse_args()

trainval_percent = 1.0  # 训练集和验证集所占比例。 这里没有划分测试集
train_percent = 0.9     # 训练集所占比例,可自己进行调整
xmlfilepath = opt.xml_path
txtsavepath = opt.txt_path
total_xml = os.listdir(xmlfilepath)
if not os.path.exists(txtsavepath):
    os.makedirs(txtsavepath)

num = len(total_xml)
list_index = range(num)
tv = int(num * trainval_percent)
tr = int(tv * train_percent)
trainval = random.sample(list_index, tv)
train = random.sample(trainval, tr)

file_trainval = open(txtsavepath + '/trainval.txt', 'w')
file_test = open(txtsavepath + '/test.txt', 'w')
file_train = open(txtsavepath + '/train.txt', 'w')
file_val = open(txtsavepath + '/val.txt', 'w')

for i in list_index:
    name = total_xml[i][:-4] + '\n'
    if i in trainval:
        file_trainval.write(name)
        if i in train:
            file_train.write(name)
        else:
            file_val.write(name)
    else:
        file_test.write(name)

file_trainval.close()
file_train.close()
file_val.close()
file_test.close()

然后在data/VOCData/ImageSets/Main目录下可以看到三个文件,就是划分的数据集合

 把相应的文件路径存入txt文件中,xml转为txt

因为是用刚刚的应用程序来标注的图片文件所以就不需要把xml转为yolo格式的文件了

在VOCData目录下创建一个py文件(名称随意)

import os
from os import getcwd

abs_path = os.getcwd()
print(abs_path)
wd = getcwd()
for image_set in sets:
    image_ids = open('D:/yolov5/data/VOCData/ImageSets/Main/%s.txt' % (image_set)).read().strip().split()
   
    if not os.path.exists('D:/yolov5/data/VOCData/dataSet_path/'):
        os.makedirs('D:/yolov5/data/VOCData/dataSet_path/')
     
    list_file = open('dataSet_path/%s.txt' % (image_set), 'w')
    # 这行路径不需更改,这是相对路径
    for image_id in image_ids:
        list_file.write('D:/yolov5/data/VOCData/images/%s.jpg\n' % (image_id))
        convert_annotation(image_id)
    list_file.close()

这样就会在VOCData下出现这样一个文件夹

打开

里面有各个文件的路径(因为没有划分test文件所以打开test.txt是空的) 

最后需要把data/VOCData/Annotations的文件移到文件夹labels文件夹中(没有文件夹就自己创建)

创建配置文件

在 yolov5 目录下的 data 文件夹下 新建一个 myvoc_1.yaml文件(可以自定义命名),用记事本打开。

内容是:

train: D:/yolov5/data/VOCData/dataSet_path/train.txt
val: D:/yolov5/data/VOCData/dataSet_path/val.txt
#文件的绝对路径(要改,注意是斜杠不是反斜杠)
#如果划分了test数据也需要加上去
# number of classes
nc: 2          #类别个数(要改)

# class names
names: ["light", "post"] #类别(要改)

聚类获得先验框

因为什么提供的yolo版本很新所以一定在yolov5/utils下有 autoanchor.py文件(不用运行)

在model的文件夹中选择一个模型配置文件我选择的是yolov5s.yaml

官方的表格:

打开yolov5s.yaml

把nc的值改成标注的种类个数就行了

 开始训练

打开根目录的train.py

有很多的数据

weights:权重文件路径

cfg:存储模型结构的配置文件

data:存储训练、测试数据的文件

epochs:指的就是训练过程中整个数据集将被迭代(训练)了多少次,显卡不行你就调小点。

batch-size:训练完多少张图片才进行权重更新,显卡不行就调小点。

img-size:输入图片宽高,显卡不行就调小点。

device:cuda device, i.e. 0 or 0,1,2,3 or cpu。选择使用GPU还是CPU

workers:线程数。默认是8。

noautoanchor:不自动检验更新anchors
rect:进行矩形训练

resume:恢复最近保存的模型开始训练

nosave:仅保存最终checkpoint

notest:仅测试最后的epoch

evolve:进化超参数

bucket:gsutil bucket

cache-images:缓存图像以加快训练速度

name: 重命名results.txt to results_name.txt

adam:使用adam优化

multi-scale:多尺度训练,img-size +/- 50%

single-cls:单类别的训练集

 运行文件:

python train.py --weights weights/yolov5s.pt  --cfg models/yolov5s.yaml  --data data/myvoc.yaml --epoch 200 --batch-size 8 --img 640   --device cpu

用gpu训练

查看cuda版本

首先看看自己的gpu型号(a卡跑不了ai)

输入

nvidia-smi

选择高于他的版本的pytorch

安装pytorch

 打开pytorch官网

PyTorch

把这个117改成你要安装的版本11.6就改成116

训练

最后开始训练

其实就是把--device的值改一下

打开任务管理器——性能

0号gpu就写--device 0

python train.py --weights weights/yolov5s.pt  --cfg models/yolov5s.yaml  --data data/myvoc.yaml --epoch 200 --batch-size 8 --img 640   --device cpu

问题

如果出现 (页面太小,无法完成操作)的相关问题

打开train.py

降低线程 --workes (默认是8) 。最后再试试调小 --batch-size,降低 --epoch

然后把刚刚运行的命令改一下参数我把worker改成1才可以跑

 参考文章:

文章链接

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木木em哈哈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值