目录
环境:
python包的配置
文件夹路径
标注数据
获取电脑/视频里的图片
开始标记数据
划分划分训练集、验证集、测试集
把相应的文件路径存入txt文件中,xml转为txt
创建配置文件
聚类获得先验框
开始训练
运行文件:
用gpu训练
查看cuda版本
编辑
安装pytorch
训练
问题
如果出现 (页面太小,无法完成操作)的相关问题
参考文章:
环境:
- windows 10
- yolov5的源文件(链接yolov5)
- 标注工具(链接标注)
python包的配置
打开pycharm的终端
运行
1
|
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文件(名字随意,认得出来就行)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
# 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文件(名称随意)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
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文件(可以自定义命名),用记事本打开。
内容是:
1
2
3
4
5
6
7
8
9
|
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:单类别的训练集
运行文件:
1
|
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)
输入
选择高于他的版本的pytorch
安装pytorch
打开pytorch官网
PyTorch
把这个117改成你要安装的版本11.6就改成116
训练
最后开始训练
其实就是把–device的值改一下
打开任务管理器——性能
0号gpu就写–device 0
1
|
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才可以跑
参考文章:
文章链接