当前位置:   article > 正文

yolov5-seg训练自己的数据

yolov5-seg

一、yolov5-seg官方源码下载

网址指路:https://github.com/ultralytics/yolov5.git

二、环境配置

1. 预先安装好pytorch、cuda、cudnn等相关深度学习模块

2. 文件夹中有一个文件requirements.txt,这里是环境依赖的说明

3. 我们在终端输入pip install -r requirements.txt下载安装依赖包

三、创建数据集

1. 数据集格式

yolov5

     images

          train

          val

          test

    labels

          train

          val

          test

其中,images下每个文件夹存放图片数据,各个文件夹作用名字清晰可见;labels下每个文件夹存放标注txt文件,各个文件夹作用名字清晰可见。txt文件内容具体解释如下:

图像绿色框为数据集类别,红色框中为标注点的相对位置。 

 2. 数据集制作

大多数公司采用labelme对polygon进行标注,最后会得到json文件,利用json文件制作yolov5-seg数据集,代码如下:

  1. def json2txt(json_path,save_txt_path):
  2. # json_path : json文件路径
  3. # save_txt_path : txt文件保存位置
  4. with open(json_path, "r") as f:
  5. data = f.read()
  6. data = json.loads(data)
  7. img_name = data['imagePath'].split('.')[0]
  8. img_x = data['imageHeight']
  9. img_y = data['imageWidth']
  10. shapes = data['shapes']
  11. # 保存一个txt文件
  12. txt = open(os.path.join(save_txt_path, img_name + '.txt'), 'w')
  13. for shape in shapes:
  14. label = shape['label']
  15. txt.write(str(label))
  16. points = np.array(shape['points'])
  17. points[:,0] /= img_y
  18. points[:,1] /= img_x
  19. points.tolist()
  20. for x,y in points:
  21. txt.write(' ' + str(round(x, 6)))
  22. txt.write(' ' + str(round(y, 6)))
  23. txt.write('\n')
  24. txt.close()

3. 划分数据集

  1. import os
  2. import random
  3. import shutil
  4. from tqdm import tqdm
  5. images_path = '../images' # 全部图片位置
  6. labels_path = '../labels' # 全部txt位置
  7. # 比例
  8. train,val,test = 0.8,0.1,0.1
  9. # 图片划分位置
  10. train_images_save_path = '../yolov5/images/train2023'
  11. os.makedirs(train_images_save_path,exist_ok=True)
  12. val_images_save_path = '../yolov5/images/val2023'
  13. os.makedirs(val_images_save_path,exist_ok=True)
  14. test_images_save_path = '../yolov5/images/test2023'
  15. os.makedirs(test_images_save_path,exist_ok=True)
  16. # txt划分位置
  17. train_labels_save_path = '../yolov5/labels/train2023'
  18. os.makedirs(train_labels_save_path,exist_ok=True)
  19. val_labels_save_path = '../yolov5/labels/val2023'
  20. os.makedirs(val_labels_save_path,exist_ok=True)
  21. test_labels_save_path = '../yolov5/labels/test2023'
  22. os.makedirs(test_labels_save_path,exist_ok=True)
  23. files = os.listdir(images_path)
  24. random.shuffle(files)
  25. for idx,file in tqdm(enumerate(files)):
  26. if idx <= len(files) * train:
  27. shutil.copy(os.path.join(images_path,file),train_images_save_path)
  28. shutil.copy(os.path.join(labels_path,file.replace('jpg','txt')),train_labels_save_path)
  29. elif idx <= len(files) * (train + val):
  30. shutil.copy(os.path.join(images_path, file), test_images_save_path)
  31. shutil.copy(os.path.join(labels_path, file.replace('jpg', 'txt')), test_labels_save_path)
  32. else:
  33. shutil.copy(os.path.join(images_path, file), val_images_save_path)
  34. shutil.copy(os.path.join(labels_path, file.replace('jpg', 'txt')),val_labels_save_path)

四、更改配置

1. coco128-seg.yaml

 2. yolov5s-seg.yaml

可以修改nc为自己类别数量,也可以不修改、depth与width调节网络大小、anchors为预置锚框可以自己重新聚类,但其实大多数不用。

五、训练

1. segment/train.py

--weights 预训练模型位置

--cfg  yolov5s-seg.yaml位置

--data coco128-seg.yaml位置

--hyp data/hyps/hyp.no-augmentation.yaml 超参数配置文件位置

 --imgsz 训练图片尺寸

--image-weights 图像加强,默认不开启,为了解决样本不平衡问题

--multi-scale 多尺度训练,默认不开启,解决小目标问题

--single-cls 单一类别训练,默认不开启,仅适用于仅有一个类别

--label-smoothing 标签平滑,默认为0.0

--patience early stop,默认100epoch不变化时

以上时常用参数选项,且对于上述默认不开启的开关,还在测试效果中,后续会更新实验结果。

更新中。。。。。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/275801
推荐阅读
相关标签
  

闽ICP备14008679号