当前位置:   article > 正文

Yolov5-seg 训练自己的数据集_yolov5-seg训练

yolov5-seg训练

1.环境配置

我这里使用的版本是

yolov5-7.0:https://github.com/ultralytics/yolov5/tree/v7.0

labelme 3.16.7.

进入yolov5文件,找到 requirements.txt 文件,在pycharm终端运行 pip install -r requirements.txt

下载速度慢的可以配置镜像源。

2.使用labelme制作数据集

制作数据集时,可提前划分好训练和测试集

images存放原图

后面的json文件可以放在原图里面

labels存放转化之后的txt书

打开labelme,以多点的方式进行标注,标注完之后的文件为json文件,可以默认存在图片路径中

(因为这篇博客是这样弄的,当然你也可以分开)

数据转化json-->txt

因为yolov5训练需要txt格式,所以我们将保存好的json文件进行转化,以下代码针对的是json文件和图片文件在同一路径而使用:

  1. import os, cv2, json
  2. import numpy as np
  3. classes = ['1'] # 修改成对应的类别
  4. base_path = '../point/images' # 指定json和图片的位置
  5. path_list = [i.split('.')[0] for i in os.listdir(base_path)]
  6. for path in path_list:
  7. image = cv2.imread(f'{base_path}/{path}.jpg')
  8. h, w, c = image.shape
  9. with open(f'{base_path}/{path}.json') as f:
  10. masks = json.load(f)['shapes']
  11. with open(f'{base_path}/{path}.txt', 'w+') as f:
  12. for idx, mask_data in enumerate(masks):
  13. mask_label = mask_data['label']
  14. if '_' in mask_label:
  15. mask_label = mask_label.split('_')[0]
  16. mask = np.array([np.array(i) for i in mask_data['points']], dtype=np.float64)
  17. mask[:, 0] /= w
  18. mask[:, 1] /= h
  19. mask = mask.reshape((-1))
  20. if idx != 0:
  21. f.write('\n')
  22. f.write(f'{classes.index(mask_label)} {" ".join(list(map(lambda x:f"{x:.6f}", mask)))}')

json文件任务结束,可以移除,使用得到的txt数据,如果你划分好了训练集和测试集,接下来就可以进行训练

验证转化是否成功

可以运行以下代码进行检测是否成功转化

  1. import cv2
  2. import numpy as np
  3. import glob
  4. # 只需要给定图片文件夹和txt标签文件夹即可
  5. pic_path = r"C:/Users/tensorflow/Desktop/point/images/train/"
  6. txt_path = r"C:/Users/tensorflow/Desktop/point/labels/train/"
  7. pic = glob.glob(pic_path + "*.jpg")
  8. for pic_file in pic:
  9. img = cv2.imread(pic_file)
  10. # print("***:",pic_file)
  11. substrings = pic_file.split('/')
  12. substrings = substrings[-1].split('.')
  13. # print("***:",substrings)
  14. num = substrings[0].split("\\")[1]
  15. height, width, _ = img.shape
  16. txt_file = txt_path + num + ".txt"
  17. file_handle = open(txt_file)
  18. cnt_info = file_handle.readlines()
  19. print("***:", cnt_info)
  20. new_cnt_info = [line_str.replace("\n", "").split(" ") for line_str in cnt_info]
  21. # print("***:",new_cnt_info)
  22. color_map = [(0, 255, 255), (255, 0, 255), (255, 255, 0)]
  23. for new_info in new_cnt_info:
  24. s = []
  25. for i in range(1, len(new_info), 2):
  26. b = [float(tmp) for tmp in new_info[i:i + 2]]
  27. s.append([int(b[0] * width), int(b[1] * height)])
  28. class_ = new_info[0]
  29. index = int(class_)
  30. cv2.polylines(img, [np.array(s, np.int32)], True, color_map[index], thickness=3)
  31. save_path = 'labelme/all/' + num + '.jpg'
  32. cv2.imwrite(save_path, img)
  33. img = cv2.resize(img, (640, 640))
  34. cv2.imshow("{}".format(num), img)
  35. cv2.waitKey(0)

检查轮廓没有问题即为转化成功

3.更改配置文件

打开yolov5源码,找到文件

1.打开data文件下,找到coco128-seg.yaml (可以复制一份再进行更改)

2.打开model文件下segment/yolov5s-seg.yaml (可以复制一份再进行更改)

3.开始训练设置好参数,即可开始训练

至此,训练结束

4.使用训练好的模型进行检测,使用predict.py文件,设置好参数,开始检测

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

闽ICP备14008679号