一、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数据集,代码如下:
def json2txt(json_path,save_txt_path):
# json_path : json文件路径
# save_txt_path : txt文件保存位置
with open(json_path, "r") as f:
data = f.read()
data = json.loads(data)
img_name = data['imagePath'].split('.')[0]
img_x = data['imageHeight']
img_y = data['imageWidth']
shapes = data['shapes']
# 保存一个txt文件
txt = open(os.path.join(save_txt_path, img_name + '.txt'), 'w')
for shape in shapes:
label = shape['label']
txt.write(str(label))
points = np.array(shape['points'])
points[:,0] /= img_y
points[:,1] /= img_x
points.tolist()
for x,y in points:
txt.write(' ' + str(round(x, 6)))
txt.write(' ' + str(round(y, 6)))
txt.write('\n')
txt.close()
3. 划分数据集
import os
import random
import shutil
from tqdm import tqdm
images_path = '../images' # 全部图片位置
labels_path = '../labels' # 全部txt位置
# 比例
train,val,test = 0.8,0.1,0.1
# 图片划分位置
train_images_save_path = '../yolov5/images/train2023'
os.makedirs(train_images_save_path,exist_ok=True)
val_images_save_path = '../yolov5/images/val2023'
os.makedirs(val_images_save_path,exist_ok=True)
test_images_save_path = '../yolov5/images/test2023'
os.makedirs(test_images_save_path,exist_ok=True)
# txt划分位置
train_labels_save_path = '../yolov5/labels/train2023'
os.makedirs(train_labels_save_path,exist_ok=True)
val_labels_save_path = '../yolov5/labels/val2023'
os.makedirs(val_labels_save_path,exist_ok=True)
test_labels_save_path = '../yolov5/labels/test2023'
os.makedirs(test_labels_save_path,exist_ok=True)
files = os.listdir(images_path)
random.shuffle(files)
for idx,file in tqdm(enumerate(files)):
if idx <= len(files) * train:
shutil.copy(os.path.join(images_path,file),train_images_save_path)
shutil.copy(os.path.join(labels_path,file.replace('jpg','txt')),train_labels_save_path)
elif idx <= len(files) * (train + val):
shutil.copy(os.path.join(images_path, file), test_images_save_path)
shutil.copy(os.path.join(labels_path, file.replace('jpg', 'txt')), test_labels_save_path)
else:
shutil.copy(os.path.join(images_path, file), val_images_save_path)
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不变化时
以上时常用参数选项,且对于上述默认不开启的开关,还在测试效果中,后续会更新实验结果。
更新中。。。。。