赞
踩
本文以coco128数据集为例,完成YOLOv5的训练部署,如何自制数据集我会在下一篇博客详细讲解。
数据集和标注文件大家可以从下方链接获取。
链接:https://pan.baidu.com/s/1gEFYs0X41Kd14YblsgZ1ZA
提取码:fir3
解压后在images目录下新建文件夹val用来存放验证集图片
在labels目录下新建文件夹val用来存放验证集标签
使用下面代码将训练集的部分划归到验证集中(记住路径修改成自己的),当然由于coco128数据集只有128张图片却有80个类别,其实按这种方法划分并不太合适,但是这里为了介绍方法以便于之后自制数据集训练,就采用这种处理方法。
- import os, random, shutil
-
- def moveimg(fileDir, tarDir):
- pathDir = os.listdir(fileDir) # 取图片的原始路径
- filenumber = len(pathDir)
- rate = 0.2 # 自定义抽取图片的比例,比方说100张抽10张,那就是0.1
- picknumber = int(filenumber * rate) # 按照rate比例从文件夹中取一定数量图片
- sample = random.sample(pathDir, picknumber) # 随机选取picknumber数量的样本图片
- print(sample)
- for name in sample:
- shutil.move(fileDir + name, tarDir + "\\" + name)
- return
-
- def movelabel(file_list, file_label_train, file_label_val):
- for i in file_list:
- if i.endswith('.jpg'):
- filename = file_label_train + "\\" + i[:-4] + '.txt'
- if os.path.exists(filename):
- shutil.move(filename, file_label_val)
- print(i + "处理成功!")
-
- if __name__ == '__main__':
- fileDir = r"C:\Users\HDJ\Desktop\yolov5-5.0\coco128\images\train2017" + "\\" # 源图片文件夹路径
- tarDir = r'C:\Users\HDJ\Desktop\yolov5-5.0\coco128\images\val' # 图片移动到新的文件夹路径
- moveimg(fileDir, tarDir)
- file_list = os.listdir(tarDir)
- file_label_train = r"C:\Users\HDJ\Desktop\yolov5-5.0\coco128\labels\train2017" # 源图片标签路径
- file_label_val = r"C:\Users\HDJ\Desktop\yolov5-5.0\coco128\labels\val" # 标签
- # 移动到新的文件路径
- movelabel(file_list, file_label_train, file_label_val)
运行完成后文件夹结构
- coco128
- ├── images
- │ ├── train2017(包含103张图片)
- │ ├── val(包含25张图片)
- │
- ├── labels
- │ ├── train2017(包含103个txt文件)
- │ ├── val(包含25个txt文件)
找到data目录下的coco.yaml文件。
在coco128.yaml文件中先注释掉download那一行代码(1)再修改参数。train改成训练集图片所在路径(2);val改成验证集所在路径(最好用绝对路径)(3)。
(4)是类别数量,保持默认即可;(5)是每个类别的名称,保持默认即可。
在models目录将yolov5s.yaml文件复制一份,将其重命名为yolov5_coco.yaml。
在yolov5_coco.yaml文件中将类型数修改为80
在train.py的(1)(2)中修改默认yaml文件,在(3)中更改训练轮数(这里我用50轮)
parser.add_argument('--epochs',type=int, default=50)
我的电脑是拯救者Y9000P,3060版本的显卡,cpu的核心数是8核所以改成
运行后可能会出现页面文件太小,无法完成操作的报错,详见常见下方“报错与解决”
在训练完成后会在runs/train中产生exp文件
在detect.py中将推断使用的权重模型改成训练得到的模型,我的路径为
C:/Users/HDJ/Desktop/yolov5-5.0/runs/train/exp/weights/best.pt
parser.add_argument('--weights', nargs='+', type=str, default='runs/train/exp/weights/best.pt', help='model.pt path(s)')
1、OSError: [WinError 1455] 页面文件太小,无法完成操作。
这是由于pycharm虚拟内存不够,在utils路径下找到datasets.py这个文件,将里面的第81行里面的参数nw改为0
2、AssertionError:Image Not Found D:\PycharmProjects\yolov5-hat\VOCdevkit\images\train\000000.jpg
在另一台电脑上训练时,要先把标签文件的.cache删掉(这两个文件是在训练中产生的)
不然会报“找不到图片0”的错(可以理解为由于这两个文件的存在,把训练的路径锁成了之前训练的路径)
3、OMP:Error #15: Initializing libiomp5md.dll, but found libiomp5md.dll alreadyinitialized
是numpy库的一个小bug
在train.py文件的顶头部分添加
importos
os.environ['KMP_DUPLICATE_LIB_OK']='True'
求学路上,你我共勉(๑•̀ㅂ•́)و✧
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。