我的编程空间,编程开发者的网络收藏夹
学习永远不晚

YOLOv8实例分割训练自己的数据集保姆级教程

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

YOLOv8实例分割训练自己的数据集保姆级教程

1.利用labelme进行数据标注

1.1Labelme 安装方法

首先安装 Anaconda,然后运行下列命令:

#################### for Python 2 ####################conda create --name=labelme python=2.7source activate labelme# conda install -c conda-forge pyside2conda install pyqtpip install labelme# 如果想安装最新版本,请使用下列命令安装:# pip install git+https://github.com/wkentaro/labelme.git#################### for Python 3 ####################conda create --name=labelme python=3.6source activate labelme# conda install -c conda-forge pyside2# conda install pyqtpip install pyqt5  # pyqt5 can be installed via pip on python3pip install labelme输入以下指令打开labelme

1.2Labelme 使用教程

使用 labelme 进行场景分割标注的教程详见:labelme

2.转换划分数据集

    对数据集进行转换和划分。注意:在数据标注的时候将图片和json文件放在不同的文件夹里。如下图所示,另外新建两个文件夹txt 和split。

a186b78c54f447b3a9dc8f30042418f6.png

 2.1将json格式文件转换为txt格式

新建json2txt.py文件,修改文件路径为自己的路径

# -*- coding: utf-8 -*-import jsonimport osimport argparsefrom tqdm import tqdmdef convert_label_json(json_dir, save_dir, classes):    json_paths = os.listdir(json_dir)    classes = classes.split(',')    for json_path in tqdm(json_paths):        # for json_path in json_paths:        path = os.path.join(json_dir, json_path)        with open(path, 'r') as load_f:            json_dict = json.load(load_f)        h, w = json_dict['imageHeight'], json_dict['imageWidth']        # save txt path        txt_path = os.path.join(save_dir, json_path.replace('json', 'txt'))        txt_file = open(txt_path, 'w')        for shape_dict in json_dict['shapes']:            label = shape_dict['label']            label_index = classes.index(label)            points = shape_dict['points']            points_nor_list = []            for point in points:                points_nor_list.append(point[0] / w)                points_nor_list.append(point[1] / h)            points_nor_list = list(map(lambda x: str(x), points_nor_list))            points_nor_str = ' '.join(points_nor_list)            label_str = str(label_index) + ' ' + points_nor_str + '\n'            txt_file.writelines(label_str)if __name__ == "__main__":    """    python json2txt_nomalize.py --json-dir my_datasets/color_rings/jsons --save-dir my_datasets/color_rings/txts --classes "cat,dogs"    """    parser = argparse.ArgumentParser(description='json convert to txt params')    parser.add_argument('--json-dir', type=str,default='D:/ultralytics-main/data/json', help='json path dir')    parser.add_argument('--save-dir', type=str,default='D:/ultralytics-main/data/txt' ,help='txt save dir')    parser.add_argument('--classes', type=str, default='ccc,ccc1',help='classes')    args = parser.parse_args()    json_dir = args.json_dir    save_dir = args.save_dir    classes = args.classes    convert_label_json(json_dir, save_dir, classes)

 2.2划分数据集

新建split.py,修改文件路径为自己的路径

# 将图片和标注数据按比例切分为 训练集和测试集import shutilimport randomimport osimport argparse# 检查文件夹是否存在def mkdir(path):    if not os.path.exists(path):        os.makedirs(path)def main(image_dir, txt_dir, save_dir):    # 创建文件夹    mkdir(save_dir)    images_dir = os.path.join(save_dir, 'images')    labels_dir = os.path.join(save_dir, 'labels')    img_train_path = os.path.join(images_dir, 'train')    img_test_path = os.path.join(images_dir, 'test')    img_val_path = os.path.join(images_dir, 'val')    label_train_path = os.path.join(labels_dir, 'train')    label_test_path = os.path.join(labels_dir, 'test')    label_val_path = os.path.join(labels_dir, 'val')    mkdir(images_dir);    mkdir(labels_dir);    mkdir(img_train_path);    mkdir(img_test_path);    mkdir(img_val_path);    mkdir(label_train_path);    mkdir(label_test_path);    mkdir(label_val_path);    # 数据集划分比例,训练集75%,验证集15%,测试集15%,按需修改    train_percent = 0.8    val_percent = 0.1    test_percent = 0.1    total_txt = os.listdir(txt_dir)    num_txt = len(total_txt)    list_all_txt = range(num_txt)  # 范围 range(0, num)    num_train = int(num_txt * train_percent)    num_val = int(num_txt * val_percent)    num_test = num_txt - num_train - num_val    train = random.sample(list_all_txt, num_train)    # 在全部数据集中取出train    val_test = [i for i in list_all_txt if not i in train]    # 再从val_test取出num_val个元素,val_test剩下的元素就是test    val = random.sample(val_test, num_val)    print("训练集数目:{}, 验证集数目:{},测试集数目:{}".format(len(train), len(val), len(val_test) - len(val)))    for i in list_all_txt:        name = total_txt[i][:-4]        class="lazy" data-srcImage = os.path.join(image_dir, name + '.jpg')        class="lazy" data-srcLabel = os.path.join(txt_dir, name + '.txt')        if i in train:            dst_train_Image = os.path.join(img_train_path, name + '.jpg')            dst_train_Label = os.path.join(label_train_path, name + '.txt')            shutil.copyfile(class="lazy" data-srcImage, dst_train_Image)            shutil.copyfile(class="lazy" data-srcLabel, dst_train_Label)        elif i in val:            dst_val_Image = os.path.join(img_val_path, name + '.jpg')            dst_val_Label = os.path.join(label_val_path, name + '.txt')            shutil.copyfile(class="lazy" data-srcImage, dst_val_Image)            shutil.copyfile(class="lazy" data-srcLabel, dst_val_Label)        else:            dst_test_Image = os.path.join(img_test_path, name + '.jpg')            dst_test_Label = os.path.join(label_test_path, name + '.txt')            shutil.copyfile(class="lazy" data-srcImage, dst_test_Image)            shutil.copyfile(class="lazy" data-srcLabel, dst_test_Label)if __name__ == '__main__':    """    python split_datasets.py --image-dir my_datasets/color_rings/imgs --txt-dir my_datasets/color_rings/txts --save-dir my_datasets/color_rings/train_data    """    parser = argparse.ArgumentParser(description='split datasets to train,val,test params')    parser.add_argument('--image-dir', type=str,default='D:/ultralytics-main/data', help='image path dir')    parser.add_argument('--txt-dir', type=str,default='D:/ultralytics-main/data/txt' , help='txt path dir')    parser.add_argument('--save-dir', default='D:/ultralytics-main/data/split',type=str, help='save dir')    args = parser.parse_args()    image_dir = args.image_dir    txt_dir = args.txt_dir    save_dir = args.save_dir    main(image_dir, txt_dir, save_dir)

运行完后得到如下文件

849ec015ad054cbfb1d87db29a169253.png

3.训练设置

3.1新建seg.yaml文件 ,按照下列格式创建   我一般写成绝对路径,方便一点。

train: D:\ultralytics-main\data\split\images\train  # train images (relative to 'path') 128 imagesval: D:\ultralytics-main\data\split\images\val  # val images (relative to 'path') 128 imagestest: D:\ultralytics-main\data\split\images\test # test images (optional)# Classesnames:  0: ccc  1: ccc1

3.2训练参数设置

task: segment  # YOLO task, i.e. detect, segment, classify, posemode: train  # YOLO mode, i.e. train, val, predict, export, track, benchmark# Train settings -------------------------------------------------------------------------------------------------------model: yolov8s-seg.yaml  # path to model file, i.e. yolov8n.pt, yolov8n.yaml#model:runs/detect/yolov8s/weights/best.ptdata: seg.yaml # path to data file, i.e. coco128.yamlepochs: 10  # number of epochs to train forpatience: 50  # epochs to wait for no observable improvement for early stopping of trainingbatch: 16  # number of images per batch (-1 for AutoBatch)

然后开始训练即可。

参考:

(52条消息) 数据标注软件labelme详解_黑暗星球的博客-CSDN博客

(52条消息) YOLOv5-7.0实例分割训练自己的数据,切分mask图并摆正_yolo 图像分割_jin__9981的博客-CSDN博客

来源地址:https://blog.csdn.net/m0_51530640/article/details/129975257

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

YOLOv8实例分割训练自己的数据集保姆级教程

下载Word文档到电脑,方便收藏和打印~

下载Word文档

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录