当前位置:   article > 正文

YOLOv5训练部署_yolov5部署

yolov5部署

本文以coco128数据集为例,完成YOLOv5的训练部署,如何自制数据集我会在下一篇博客详细讲解。

准备工作

数据集和标注文件大家可以从下方链接获取。

链接:https://pan.baidu.com/s/1gEFYs0X41Kd14YblsgZ1ZA

提取码:fir3

训练预处理

  1. 解压后在images目录下新建文件夹val用来存放验证集图片

  1. 在labels目录下新建文件夹val用来存放验证集标签

  1. 使用下面代码将训练集的部分划归到验证集中(记住路径修改成自己的),当然由于coco128数据集只有128张图片却有80个类别,其实按这种方法划分并不太合适,但是这里为了介绍方法以便于之后自制数据集训练,就采用这种处理方法。

  1. import os, random, shutil
  2. def moveimg(fileDir, tarDir):
  3. pathDir = os.listdir(fileDir) # 取图片的原始路径
  4. filenumber = len(pathDir)
  5. rate = 0.2 # 自定义抽取图片的比例,比方说100张抽10张,那就是0.1
  6. picknumber = int(filenumber * rate) # 按照rate比例从文件夹中取一定数量图片
  7. sample = random.sample(pathDir, picknumber) # 随机选取picknumber数量的样本图片
  8. print(sample)
  9. for name in sample:
  10. shutil.move(fileDir + name, tarDir + "\\" + name)
  11. return
  12. def movelabel(file_list, file_label_train, file_label_val):
  13. for i in file_list:
  14. if i.endswith('.jpg'):
  15. filename = file_label_train + "\\" + i[:-4] + '.txt'
  16. if os.path.exists(filename):
  17. shutil.move(filename, file_label_val)
  18. print(i + "处理成功!")
  19. if __name__ == '__main__':
  20. fileDir = r"C:\Users\HDJ\Desktop\yolov5-5.0\coco128\images\train2017" + "\\" # 源图片文件夹路径
  21. tarDir = r'C:\Users\HDJ\Desktop\yolov5-5.0\coco128\images\val' # 图片移动到新的文件夹路径
  22. moveimg(fileDir, tarDir)
  23. file_list = os.listdir(tarDir)
  24. file_label_train = r"C:\Users\HDJ\Desktop\yolov5-5.0\coco128\labels\train2017" # 源图片标签路径
  25. file_label_val = r"C:\Users\HDJ\Desktop\yolov5-5.0\coco128\labels\val" # 标签
  26. # 移动到新的文件路径
  27. movelabel(file_list, file_label_train, file_label_val)

运行完成后文件夹结构

  1. coco128
  2. ├── images
  3. │ ├── train2017(包含103张图片)
  4. │ ├── val(包含25张图片)
  5. ├── labels
  6. │ ├── train2017(包含103个txt文件)
  7. │ ├── 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'

求学路上,你我共勉(๑•̀ㅂ•́)و✧

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号