YOLOv5 v7.0实例分割验证及训练自己数据集

目录

一、原始模型预测

1、模型下载

2、环境配置

3、模型预测

二、训练自己的数据集

1、数据集制作

 2、修改训练参数

2.1 数据集路径参数

2.2 train.py参数

三、训练常见报错

问题1:export GIT_PYTHON_REFRESH=quiet

问题2:Attributeerror: ‘FreeTypeFont‘ object has no attribute ‘getsize‘

四、预测自己的图片

1、基础预测 

2、修改输出结果

2.1 去掉预测框 

2.2 调节mask透明度 

2.3 调节想要的颜色


一、原始模型预测

1、模型下载

        进github官网下载yolov5 v7.0版本源码GitHub - ultralytics/yolov5 at v7.0,也可之间点击我的资源连接进行源码下载【免费】yolov5-7.0源码,附yolov5s分割模型权重资源-CSDN文库

2、环境配置

        需要配置conda虚拟环境,以及torch等深度学习必备环境,网上也有很多教程,这里就不过多叙述(如果有朋友需要环境配置教程,后续我可以再补发一个完整的环境配置教程),当环境配置好后,进入终端环境输入pip install -r requirements.txt,安装必要的库。

3、模型预测

        完成上述工作,我们就可以进行模型实例分割预测了,点击segment/predict.py,可直接运行,这时候模型将预测data/images里面包含的两张图片。如果能进行预测,那么就说明环境配置是没问题了,后面我们就可以训练自己的数据集了。

二、训练自己的数据集

1、数据集制作

        使用labelme制作自己的数据集,我之前写过labelimg的安装方式及使用方法,两者类似,这里我也就不多赘述了。

        当标注完后会生成json文件,但是yolov5分割模型是读取txt文件进行训练的,因此我们还需要将json转换为txt文件,使用以下代码转换:

import os
import cv2
import json
import numpy as np
 
 
def txt_write(x,img_x,img_y,txt):
    data = x['points']
    n = 1
    for x in data:
        for i in x:
            if n % 2 == 0:
                txt.write(' ' + str(round(i/img_x,6)))
                n += 1
            else:
                txt.write(' ' + str(round(i/img_y,6)))
                n += 1  
    txt.write('\n') 
 
 
def json2txt(json_path,save_path):
    txt = open(save_path,'w')
    with open(json_path, "r") as f:
        data = f.read()
    data = json.loads(data)
    img_x = data['imageHeight']
    img_y = data['imageWidth']
    shapes = data['shapes']
 
    for x in shapes:
        #print(x['label'])
        #此处面向不同分类,需要改动下面的标签值,如果是多分类,那么需要增加新的if
        #只是单分类的话,可以直接去掉if,把里面的模块拿出来用
 
        if x['label']=='outlooking':
            txt.write('0') 
            txt_write(x,img_x,img_y,txt)
    txt.close()
    

 
#文件夹
json_dir = 'data/json'
save_dir = 'data/txt'
files = os.listdir(json_dir)
os.makedirs(save_dir, exist_ok=True)
num = 1
for file in files :
    name = file[0:-5]
    json_path = json_dir + '/' + name + '.json'
    save_path = save_dir + '/' + name + '.txt'
    json2txt(json_path,save_path)
    print(num,'/',len(files),':',name)
    num += 1

转化完成后将数据集按照9:1划分训练集和验证集,并按照如下格式创建文件夹,放置相关内容。

 2、修改训练参数

2.1 数据集路径参数

        复制data/coco128-seg.yaml文件,自定义文件名,然后修改训练集和验证集路径以及类别名。

2.2 train.py参数

        修改segment/train.py文件的参数,主要是修改以下这些参数。

 weights是设置的预训练权重,通过官网下载即可,我资源里面也有下载好的;

data就是我们刚才创建的yaml文件,里面包含数据集路径以及数据集类别;

hyp里面是一些超参数设置,有需要也可以去文件中进行调整;

epochs是我们训练的轮数,通常是300左右,根据自己的需求来定;

batch-size是训练一轮的图片数多少,这个根据自己电脑的性能来定。

三、训练常见报错

问题1:export GIT_PYTHON_REFRESH=quiet

解决: 在文件最前面加上os.environ["GIT_PYTHON_REFRESH"] = "quiet",即可完美解决。

问题2:Attributeerror: ‘FreeTypeFont‘ object has no attribute ‘getsize‘

解决:该问题是由于新版本的Pillow(10)删除了该getsize功能,可采用降级的方式改正,但是降级后容易出一些新的问题,因此这里建议直接修改utils/plots.py文件中的第91行左右,找到 w, h = self.font.getsize(label) 这行代码,把他替换成 x, y, w, h = self.font.getbbox(label) 即可完美解决。

四、预测自己的图片

1、基础预测 

修改segment/predict.py文件中的主要相关参数。

weights修改为自己训练的权重文件路径;

source则是我们测试文件的路径;

data则修改为我们之前自己建的yaml文件;

然后就可以进行预测了,图像、视频以及调用摄像头实时检测。 

2、修改输出结果

2.1 去掉预测框 

        由于我们做目标分割,所以有时候我们的展示不需要目标框,这时候我们就需要修改segment/predict.py的代码了,大概是180-184行,直接注释掉就可以了。

2.2 调节mask透明度 

        打开”utils/plots.py”,找到以下代码,并修改alpha,alpha取值范围为0-1,越靠近1越不透明,越靠近0越透明。

def masks(self, masks, colors, im_gpu=None, alpha=0.5):

2.3 调节想要的颜色

         打开“utils/plots.py",找到以下代码,修改hexs里面的代号就行;

class Colors:
    # Ultralytics color palette https://ultralytics.com/
    def __init__(self):
        # hex = matplotlib.colors.TABLEAU_COLORS.values()
        hexs = ('FF3838', 'FF9D97', 'FF701F', 'FFB21D', 'CFD231', '48F90A', '92CC17', '3DDB86', '1A9334', '00D4BB',
                '2C99A8', '00C2FF', '344593', '6473FF', '0018EC', '8438FF', '520085', 'CB38FF', 'FF95C8', 'FF37C7')
        self.palette = [self.hex2rgb(f'#{c}') for c in hexs]
        self.n = len(self.palette)
 
    def __call__(self, i, bgr=False):
        c = self.palette[int(i) % self.n]
        return (c[2], c[1], c[0]) if bgr else c

        如果你只想要单一的颜色,则可以将该部分代码修改为:

    (只需要将self.black = (0, 0, 0),中的rgb参数(0,0,0)进行修改即可)

class Colors:
    def __init__(self):
        self.black = (0, 0, 0)  # 黑色
 
    def __call__(self, i, bgr=False):
        return self.black if not bgr else self.black[::-1]

以上就是yolov5 v7.0版本分割模型的训练以及预测流程,大家有什么问题可以在评论区交流讨论!!

  • 17
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JH_vision

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值