YOLOv8分割从环境到训练配置

一、环境配置

  1. 下载Anaconda,进入conda ,利用conda create -n  xxx创建自己的环
    conda create -n yolov8 python=3.9
    conda activate yolov8

  2. 装pytorch,进入pytorch官网,根据需要进行选择,后复制命令至conda
  3. 进入官网下载yolov8至指定文件夹
  4. 在conda中进入该文件夹
  5. 执行以下代码配置yolov8环境
    pip install ultralytics
    pip install -r requirements.txt
  6.   至此环境搭建完毕,在yolov8所在环境中执行以下conda命令,进行验证

二、数据集标注

参考以下内容

labelme的安装及使用_labelme安装-CSDN博客

三、训练 

分配数据集

  1. 在yolov8中创建存放数据集文件夹  dataset
  2. 将labelme标注的json文件格式转为txt格式
  3. # -*- coding: utf-8 -*-
    import json
    import os
    import argparse
    from tqdm import tqdm
    import glob
    import cv2
    import numpy as np
    
    
    def 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)
            # print(path)
            with open(path, 'r') as load_f:
                print(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)
    
    # 填写json文件地址
    # 填写txt文件格式
    # 填写类别名称
    
    if __name__ == "__main__":
        parser = argparse.ArgumentParser(description='json convert to txt params')
        parser.add_argument('--json-dir', type=str, default='dataset/labelJson', help='json path dir')
        parser.add_argument('--save-dir', type=str, default='dataset/labelTxt', help='txt save dir')
        parser.add_argument('--classes', type=str, default='YL,DEFECT,TongXinYuan', 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)
    
    
  4. 在ultralytics下创建mydata文件夹存放训练和验证图像
  5. 进行数据集的划分,splitData.py
# -*- coding:utf-8 -*
import os
import random
import os
import shutil
def data_split(full_list, ratio):

    n_total = len(full_list)
    offset = int(n_total * ratio)
    if n_total == 0 or offset < 1:
        return [], full_list
    random.shuffle(full_list)
    sublist_1 = full_list[:offset]
    sublist_2 = full_list[offset:]
    return sublist_1, sublist_2


train_p="ultralytics/mydata/train"      #训练集路径
val_p="ultralytics/mydata/val"          #验证集路径
imgs_p="images"                         #存放图像的文件夹名称
labels_p="labels"                       #存放标签的文件夹名称

#创建训练集
if not os.path.exists(train_p):#指定要创建的目录
    os.mkdir(train_p)
tp1=os.path.join(train_p,imgs_p)
tp2=os.path.join(train_p,labels_p)
print(tp1,tp2)
if not os.path.exists(tp1):#指定要创建的目录
    os.mkdir(tp1)
if not os.path.exists(tp2):  # 指定要创建的目录
    os.mkdir(tp2)

#创建测试集文件夹
if not os.path.exists(val_p):#指定要创建的目录
    os.mkdir(val_p)
vp1=os.path.join(val_p,imgs_p)
vp2=os.path.join(val_p,labels_p)
print(vp1,vp2)
if not os.path.exists(vp1):#指定要创建的目录
    os.mkdir(vp1)
if not os.path.exists(vp2):  # 指定要创建的目录
    os.mkdir(vp2)

#数据集路径
images_dir="dataset/images"
labels_dir="dataset/labelTxt"
#划分数据集,设置数据集数量占比
proportion_ = 0.9 #训练集占比

total_file = os.listdir(images_dir)

num = len(total_file)  # 统计所有的标注文件
list_=[]
for i in range(0,num):
    list_.append(i)

list1,list2=data_split(list_,proportion_)

for i in range(0,num):
    file=total_file[i]
    print(i,' - ',total_file[i])
    name=file.split('.')[0]
    if i in list1:
        jpg_1 = os.path.join(images_dir, file)
        jpg_2 = os.path.join(train_p, imgs_p, file)
        txt_1 = os.path.join(labels_dir, name + '.txt')
        txt_2 = os.path.join(train_p, labels_p, name + '.txt')
        if os.path.exists(txt_1) and os.path.exists(jpg_1):
            shutil.copyfile(jpg_1, jpg_2)
            shutil.copyfile(txt_1, txt_2)
        elif os.path.exists(txt_1):
            print(txt_1)
        else:
            print(jpg_1)

    elif i in list2:
        jpg_1 = os.path.join(images_dir, file)
        jpg_2 = os.path.join(val_p, imgs_p, file)
        txt_1 = os.path.join(labels_dir, name + '.txt')
        txt_2 = os.path.join(val_p, labels_p, name + '.txt')
        shutil.copyfile(jpg_1, jpg_2)
        shutil.copyfile(txt_1, txt_2)

print("数据集划分完成: 总数量:",num," 训练集数量:",len(list1)," 验证集数量:",len(list2))

 参数配置修改

  1. deault.yaml中有各种训练、验证、测试的默认配置参数,所在位置如图所示。使用windows进行训练的将文件中的workers改为0,否则报错
  2. 创建数据配置文件mycoco128-seg.yaml,该文件由coco128-seg.yaml修改得来
  3. 修改yolov-seg.yaml中的nc

训练

  1. 创建一个python文件myTrain,并对参数进行设置否则采用默认,运行该文件即可开始训练,其参数如下表
from ultralytics import YOLO

# Load a model
model = YOLO('ultralytics/cfg/models/v8/yolov8-seg.yaml')  # build a new model from YAML
model = YOLO('yolov8s-seg.pt')  # load a pretrained model (recommended for training)
model = YOLO('ultralytics/cfg/models/v8/yolov8-seg.yaml').load('yolov8s-seg.pt')  # build from YAML and transfer weights

# Train the model
results = model.train(data='ultralytics/cfg/datasets/mycoco128-seg.yaml', epochs=100, batch=4, imgsz=640, workers=0)

验证

创建一个python文件myVal,对训练模型进行验证,参数如下表,不进行设置则采用默认

from ultralytics import YOLO

# Load a model
model = YOLO('yolov8s-seg.pt')  # load an official model
model = YOLO('runs/segment/train8/weights/best.pt')  # load a custom model

# Validate the model
metrics = model.val(batch=16, conf=0.01, iou=0.5)  # no arguments needed, dataset and settings remembered
metrics.box.map    # map50-95
metrics.box.map50  # map50
metrics.box.map75  # map75
metrics.box.maps   # a list contains map50-95 of each category

预测 

创建一个python文件myPredict,对参数进行设置后运行该文件即可

from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO('runs/segment/train8/weights/best.pt')

# Run inference on 'bus.jpg' with arguments
model.predict('ultralytics/mydata/val/images', save=True,conf=0.25, iou=0.7)

其他具体操作可看官方文档Home - Ultralytics YOLOv8 Docs 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
yolov8分割是一种实例分割算法,可以用于目标检测和分割任务。在使用yolov8进行分割训练之前,你需要准备一些预训练权重文件和修改网络配置文件。 预训练权重文件包括yolov8n-seg.pt,yolov8s-seg.pt,yolov8m-seg.pt,yolov8l-seg.pt,yolov8x-seg.pt。这些文件可以用来初始化模型的权重,以便在训练过程中更快地收敛和提高性能。 同时,你还需要修改网络配置文件yolov8x-seg.yaml,可以使用vim命令进行编辑。在配置文件中,你需要设置nc参数为你自己训练的目标类别总数,这样模型才能正确地识别你的目标类别。 在环境配置方面,你需要安装Ubuntu 18.04,CUDA 11.7,PyTorch 1.11.0和torchvision 0.12.0。确保你的环境符合这些要求,并参考官方信息中的requirements.txt文件获取更详细的配置信息。 总结来说,要进行yolov8分割训练,你需要准备预训练权重文件、修改网络配置文件,并确保环境配置正确。这样你就可以使用yolov8算法进行分割训练了。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [yolov8分割训练权重](https://download.csdn.net/download/virobotics/87704235)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [yolov8实例分割训练自己的数据集并加载预训练模型](https://blog.csdn.net/qq_43318374/article/details/129740808)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值