国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

YOLOv8訓(xùn)練自己的分割數(shù)據(jù)集

這篇具有很好參考價(jià)值的文章主要介紹了YOLOv8訓(xùn)練自己的分割數(shù)據(jù)集。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

Ultralytics YOLOv8?是由?Ultralytics?開(kāi)發(fā)的一個(gè)前沿的?SOTA?模型。它在以前成功的?YOLO?版本基礎(chǔ)上,引入了新的功能和改進(jìn),進(jìn)一步提升了其性能和靈活性。YOLOv8?基于快速、準(zhǔn)確和易于使用的設(shè)計(jì)理念,使其成為廣泛的目標(biāo)檢測(cè)、圖像分割和圖像分類(lèi)任務(wù)的絕佳選擇。YOLOv5 自從 2020 年發(fā)布以來(lái),一直是沒(méi)有論文的。而 YOLOv8(YOLOv5團(tuán)隊(duì))這次首次承認(rèn)將先發(fā)布 arXiv 版本的論文(目前還在火速撰寫(xiě)中)。

1.環(huán)境安裝

YOLOv8 代碼鏈接:

GitHub - ultralytics/ultralytics: YOLOv8 ?? in PyTorch > ONNX > CoreML > TFLite

yolov8是一個(gè)工程性的代碼,訓(xùn)練、測(cè)試和配置都封裝得很便捷,下載源碼打開(kāi)后運(yùn)行以下命令安裝需要的環(huán)境依賴(lài)

pip install -r requirements.txt

通過(guò)pip list命令查看torch版本,需要注意系統(tǒng)默認(rèn)安裝最新的cpu版的pytorch,需要自己安裝GPU版的PyTorch:?Previous PyTorch Versions | PyTorch

YOLOv8訓(xùn)練自己的分割數(shù)據(jù)集

?環(huán)境安裝好后運(yùn)行v8文件夾的predict.py測(cè)試一下效果,控制臺(tái)沒(méi)有報(bào)錯(cuò)且顯示帶+cu11x的torch版本和GPU型號(hào),說(shuō)明環(huán)境安裝沒(méi)問(wèn)題。

YOLOv8訓(xùn)練自己的分割數(shù)據(jù)集

2. 制作數(shù)據(jù)集

yolov8提供的有已經(jīng)制作好的完整的數(shù)據(jù)集,運(yùn)行相關(guān)腳本可以直接下載現(xiàn)成的數(shù)據(jù)集。YOLOv8訓(xùn)練自己的分割數(shù)據(jù)集

本教程以coco-128數(shù)據(jù)集為例,在coco數(shù)據(jù)集80個(gè)類(lèi)基礎(chǔ)上,再訓(xùn)練一個(gè)自己的類(lèi)(飲水機(jī))。首先,使用labelme標(biāo)注,標(biāo)注好后,用以下labelme2yoloseg.py代碼生成yolo數(shù)據(jù)集格式?。YOLOv8訓(xùn)練自己的分割數(shù)據(jù)集

'''
Created on Nov 2, 2022
@author: LULU LI
'''
import logging
import os
import string
import sys
import argparse
import shutil
import math
from collections import OrderedDict

import json
import cv2
import PIL.Image

from sklearn.model_selection import train_test_split
from labelme import utils

label_idx_map = {'water_dispenser':80}
class Labelme2YOLO(object):

    def __init__(self, json_dir):
        self._json_dir = json_dir

        self._label_id_map = label_idx_map

    def _make_train_val_dir(self):
        self._label_dir_path = os.path.join(self._json_dir,
                                            'YOLODataset/labels/')
        self._image_dir_path = os.path.join(self._json_dir,
                                            'YOLODataset/images/')

        for yolo_path in (os.path.join(self._label_dir_path + 'train/'),
                          os.path.join(self._label_dir_path + 'val/'),
                          os.path.join(self._image_dir_path + 'train/'),
                          os.path.join(self._image_dir_path + 'val/')):
            if os.path.exists(yolo_path):
                shutil.rmtree(yolo_path)

            os.makedirs(yolo_path)

    def _get_label_id_map(self, json_dir):
        # label_set = set()
        #
        # for file_name in os.listdir(json_dir):
        #     if file_name.endswith('json'):
        #         json_path = os.path.join(json_dir, file_name)
        #         data = json.load(open(json_path))
        #         for shape in data['shapes']:
        #             label_set.add(shape['label'].rstrip(string.digits).rstrip( '_' ).rstrip(string.digits))

        return [(label, label_id) for label, label_id in label_idx_map]

    def _train_test_split(self, folders, json_names, val_size):
        if len(folders) > 0 and 'train' in folders and 'val' in folders:
            train_folder = os.path.join(self._json_dir, 'train/')
            train_json_names = [train_sample_name + '.json' \
                                for train_sample_name in os.listdir(train_folder) \
                                if os.path.isdir(os.path.join(train_folder, train_sample_name))]

            val_folder = os.path.join(self._json_dir, 'val/')
            val_json_names = [val_sample_name + '.json' \
                              for val_sample_name in os.listdir(val_folder) \
                              if os.path.isdir(os.path.join(val_folder, val_sample_name))]

            return train_json_names, val_json_names

        train_idxs, val_idxs = train_test_split(range(len(json_names)),
                                                test_size=val_size)
        train_json_names = [json_names[train_idx] for train_idx in train_idxs]
        val_json_names = [json_names[val_idx] for val_idx in val_idxs]

        return train_json_names, val_json_names

    def convert(self, val_size):
        json_names = [file_name for file_name in os.listdir(self._json_dir) \
                      if os.path.isfile(os.path.join(self._json_dir, file_name)) and \
                      file_name.endswith('.json')]
        folders = [file_name for file_name in os.listdir(self._json_dir) \
                   if os.path.isdir(os.path.join(self._json_dir, file_name))]
        train_json_names, val_json_names = self._train_test_split(folders, json_names, val_size)

        self._make_train_val_dir()

        # convert labelme object to yolo format object, and save them to files
        # also get image from labelme json file and save them under images folder
        for target_dir, json_names in zip(('train/', 'val/'),
                                          (train_json_names, val_json_names)):
            for json_name in json_names:
                json_path = os.path.join(self._json_dir, json_name)
                json_data = json.load(open(json_path))

                print('Converting %s for %s ...' % (json_name, target_dir.replace('/', '')))

                img_path = self._save_yolo_image(json_data,
                                                 json_name,
                                                 self._image_dir_path,
                                                 target_dir)

                yolo_obj_list = self._get_yolo_object_list(json_data, img_path)
                self._save_yolo_label(json_name,
                                      self._label_dir_path,
                                      target_dir,
                                      yolo_obj_list)

        print('Generating dataset.yaml file ...')
        self._save_dataset_yaml()

    def convert_one(self, json_name):
        json_path = os.path.join(self._json_dir, json_name)
        json_data = json.load(open(json_path))

        print('Converting %s ...' % json_name)

        img_path = self._save_yolo_image(json_data, json_name,
                                         self._json_dir, '')

        yolo_obj_list = self._get_yolo_object_list(json_data, img_path)
        self._save_yolo_label(json_name, self._json_dir,
                              '', yolo_obj_list)

    def _get_yolo_object_list(self, json_data, img_path):
        yolo_obj_list = []

        img_h, img_w, _ = cv2.imread(img_path).shape
        for shape in json_data['shapes']:
            # labelme circle shape is different from others
            # it only has 2 points, 1st is circle center, 2nd is drag end point
            try:
                if shape['shape_type'] == 'circle':
                    yolo_obj = self._get_circle_shape_yolo_object(shape, img_h, img_w)
                elif shape['shape_type'] == 'polygon':  # lll
                    yolo_obj = self._get_polygon_shape_yolo_object(shape, img_h, img_w)
                    yolo_obj_list.append(yolo_obj)
                elif shape['shape_type'] == 'rectangle':
                    yolo_obj = self._get_other_shape_yolo_object(shape, img_h, img_w)
            except Exception as e:
                logging.Logger(e)

        return yolo_obj_list

    def _get_circle_shape_yolo_object(self, shape, img_h, img_w):
        obj_center_x, obj_center_y = shape['points'][0]

        radius = math.sqrt((obj_center_x - shape['points'][1][0]) ** 2 +
                           (obj_center_y - shape['points'][1][1]) ** 2)
        obj_w = 2 * radius
        obj_h = 2 * radius
        yolo_center_x = round(float(obj_center_x / img_w), 6)

        yolo_center_y = round(float(obj_center_y / img_h), 6)
        yolo_w = round(float(obj_w / img_w), 6)
        yolo_h = round(float(obj_h / img_h), 6)

        label_id = self._label_id_map[shape['label'].rstrip(string.digits).rstrip( '_' ).rstrip(string.digits)]

        return label_id, yolo_center_x, yolo_center_y, yolo_w, yolo_h

    def _get_other_shape_yolo_object(self, shape, img_h, img_w):
        def __get_object_desc(obj_port_list):
            __get_dist = lambda int_list: max(int_list) - min(int_list)

            x_lists = [port[0] for port in obj_port_list]
            y_lists = [port[1] for port in obj_port_list]

            return min(x_lists), __get_dist(x_lists), min(y_lists), __get_dist(y_lists)

        obj_x_min, obj_w, obj_y_min, obj_h = __get_object_desc(shape['points'])

        yolo_center_x = round(float((obj_x_min + obj_w / 2.0) / img_w), 6)
        yolo_center_y = round(float((obj_y_min + obj_h / 2.0) / img_h), 6)
        yolo_w = round(float(obj_w / img_w), 6)
        yolo_h = round(float(obj_h / img_h), 6)

        label_id = self._label_id_map[shape['label'].rstrip(string.digits).rstrip( '_' ).rstrip(string.digits)]

        return label_id, yolo_center_x, yolo_center_y, yolo_w, yolo_h

    # compute polygon points # add by lll
    def _get_polygon_shape_yolo_object(self, shape, img_h, img_w):
        def __get_points_list(obj_port_list):
            x_lists = [port[0] for port in obj_port_list]
            y_lists = [port[1] for port in obj_port_list]

            return x_lists, y_lists

        label_id_polygon_points = []
        label_id = self._label_id_map[shape['label'].rstrip(string.digits).rstrip( '_' ).rstrip(string.digits)]
        label_id_polygon_points.append(label_id)

        x_lists, y_lists = __get_points_list(shape['points'])
        for x_point, y_point in zip(x_lists, y_lists):
            yolo_x = round(float(x_point / img_w), 6)
            label_id_polygon_points.append(yolo_x)
            yolo_y = round(float(y_point / img_h), 6)
            label_id_polygon_points.append(yolo_y)

        return tuple(label_id_polygon_points)

    def _save_yolo_label(self, json_name, label_dir_path, target_dir, yolo_obj_list):
        txt_path = os.path.join(label_dir_path,
                                target_dir,
                                json_name.replace('.json', '.txt'))

        with open(txt_path, 'w+') as f:  # lll
            for yolo_obj_idx, yolo_obj in enumerate(yolo_obj_list):
                if len(yolo_obj) > 5:  # lll
                    for point in yolo_obj:
                        point_line = '%s ' % point
                        f.write(point_line)
                    f.write('\n')
                else:
                    yolo_obj_line = '%s %s %s %s %s\n' % yolo_obj \
                        if yolo_obj_idx + 1 != len(yolo_obj_list) else \
                        '%s %s %s %s %s' % yolo_obj
                    f.write(yolo_obj_line)

    def _save_yolo_image(self, json_data, json_name, image_dir_path, target_dir):
        img_name = json_name.replace('.json', '.png')
        img_path = os.path.join(image_dir_path, target_dir, img_name)

        I = PIL.Image.open(os.path.join(os.path.join(image_dir_path,"../../"),json_data['imagePath']))
        I.save(img_path)
        # if not os.path.exists(img_path):
        #     img = utils.img_b64_to_arr(json_data['imageData'])
        #     PIL.Image.fromarray(img).save(img_path)

        return img_path

    def _save_dataset_yaml(self):
        yaml_path = os.path.join(self._json_dir, 'YOLODataset/', 'dataset.yaml')

        with open(yaml_path, 'w+') as yaml_file:
            yaml_file.write('train: %s\n' % \
                            os.path.join(self._image_dir_path, 'train/'))
            yaml_file.write('val: %s\n\n' % \
                            os.path.join(self._image_dir_path, 'val/'))
            yaml_file.write('nc: %i\n\n' % len(self._label_id_map))

            names_str = ''
            for label, _ in self._label_id_map.items():
                names_str += "'%s', " % label
            names_str = names_str.rstrip(', ')
            yaml_file.write('names: [%s]' % names_str)


if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('--json_dir', type=str, default='E:/datasets/background/training_data/segment',
                        help='Please input the path of the labelme json files.')
    parser.add_argument('--val_size', type=float, nargs='?', default=0.1,
                        help='Please input the validation dataset size, for example 0.1 ')
    parser.add_argument('--json_name', type=str, nargs='?', default=None,
                        help='If you put json name, it would convert only one json file to YOLO.')
    args = parser.parse_args(sys.argv[1:])

    convertor = Labelme2YOLO(args.json_dir)
    if args.json_name is None:
        convertor.convert(val_size=args.val_size)
    else:
        convertor.convert_one(args.json_name)

轉(zhuǎn)化成功后YOLODataset下會(huì)生成images和labels兩個(gè)目錄,分別是圖像和標(biāo)簽。

3.修改配置

3.1 數(shù)據(jù)集配置

復(fù)制一份coco128-seg.yaml,作為自己的配置文件,將train和val路徑修改為圖片images下訓(xùn)練集和驗(yàn)證集路徑,不用指定label路徑,讀取數(shù)據(jù)集的時(shí)候label路徑是將圖片路徑中的‘images’替換成‘labels’獲取的

,YOLOv8訓(xùn)練自己的分割數(shù)據(jù)集

YOLOv8訓(xùn)練自己的分割數(shù)據(jù)集

?3.2 修改類(lèi)別數(shù)

YOLOv8訓(xùn)練自己的分割數(shù)據(jù)集

3.3 修改default配置

根據(jù)自己實(shí)際需要修改,我這里只修改訓(xùn)練輪數(shù)和batch-size,其他的用的默認(rèn)的

YOLOv8訓(xùn)練自己的分割數(shù)據(jù)集

4.訓(xùn)練?

設(shè)置好配置文件和模型對(duì)應(yīng)的路徑,即可進(jìn)行訓(xùn)練,控制臺(tái)打印訓(xùn)練進(jìn)度。通過(guò)tensorboard可以查看具體訓(xùn)練效果,命令行輸入:tensorboard --logdir .\runs\segment\,瀏覽器打開(kāi)輸出的鏈接。

YOLOv8訓(xùn)練自己的分割數(shù)據(jù)集YOLOv8訓(xùn)練自己的分割數(shù)據(jù)集?

?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-443505.html

?5.測(cè)試

將需要測(cè)試的圖片或者視頻放在assets目錄下,指定好權(quán)重和assets路徑

YOLOv8訓(xùn)練自己的分割數(shù)據(jù)集

測(cè)試效果如下

YOLOv8訓(xùn)練自己的分割數(shù)據(jù)集YOLOv8訓(xùn)練自己的分割數(shù)據(jù)集?

?

?

?

到了這里,關(guān)于YOLOv8訓(xùn)練自己的分割數(shù)據(jù)集的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Yolov8訓(xùn)練自己的數(shù)據(jù)集合(最新實(shí)驗(yàn)數(shù)據(jù))

    Yolov8訓(xùn)練自己的數(shù)據(jù)集合(最新實(shí)驗(yàn)數(shù)據(jù))

    一、安裝環(huán)境 筆者環(huán)境如下: 二、clone代碼 地址如下,可以直接使用git命令進(jìn)行clone,也可以直接去網(wǎng)站下載 代碼目錄如下所示 三、安裝必要的庫(kù) 其實(shí)這里比較重要的是兩步,第一步是安裝requirement.txt中的庫(kù),然后再安裝ultralytics。那么下面就是安裝庫(kù)的過(guò)程了 安裝require

    2024年02月15日
    瀏覽(28)
  • YOLOv8訓(xùn)練自己的數(shù)據(jù)集(超詳細(xì))

    YOLOv8訓(xùn)練自己的數(shù)據(jù)集(超詳細(xì))

    本人的筆記本電腦系統(tǒng)是:Windows10 YOLO系列最新版本的YOLOv8已經(jīng)發(fā)布了,詳細(xì)介紹可以參考我前面寫(xiě)的博客,目前ultralytics已經(jīng)發(fā)布了部分代碼以及說(shuō)明,可以在github上下載YOLOv8代碼,代碼文件夾中會(huì)有requirements.txt文件,里面描述了所需要的安裝包。 本文最終安裝的pytorch版本

    2024年02月03日
    瀏覽(34)
  • yolov8代碼梳理 訓(xùn)練自己的數(shù)據(jù) 最終版

    yolov8代碼梳理 訓(xùn)練自己的數(shù)據(jù) 最終版

    最開(kāi)始為了檢測(cè)不規(guī)則的麻包袋,所以采用了目標(biāo)檢測(cè)。yolov3,fasterrcnn,ssd。這種矩形框還是可以用。后面檢測(cè)的物體變成了規(guī)則的紙箱,我們還用目標(biāo)檢測(cè)發(fā)現(xiàn),沒(méi)有旋轉(zhuǎn)角度,因?yàn)橄渥拥臄[放不是正的。只能通過(guò)opencv的minarea去找到最小矩形框去尋找角度。但是opencv的方

    2024年02月12日
    瀏覽(26)
  • yolov8訓(xùn)練自己的數(shù)據(jù)集遇到的問(wèn)題

    yolov8訓(xùn)練自己的數(shù)據(jù)集遇到的問(wèn)題

    **方法一:**根據(jù)本地模型配置文件.yaml可以設(shè)置nc 但是,這里無(wú)法用到預(yù)訓(xùn)練模型.pt模型文件,預(yù)訓(xùn)練模型的權(quán)重參數(shù)是在大數(shù)據(jù)集上訓(xùn)練得到的,泛化性能可能比較好,所以,下載了官方的分類(lèi)模型yolov8n-cls.pt(這里實(shí)際上經(jīng)過(guò)驗(yàn)證可以通過(guò)其它方法利用yaml方法加載預(yù)訓(xùn)練

    2023年04月26日
    瀏覽(32)
  • 使用YOLOv8訓(xùn)練自己的【目標(biāo)檢測(cè)】數(shù)據(jù)集

    使用YOLOv8訓(xùn)練自己的【目標(biāo)檢測(cè)】數(shù)據(jù)集

    隨著深度學(xué)習(xí)技術(shù)在計(jì)算機(jī)視覺(jué)領(lǐng)域的廣泛應(yīng)用,行人檢測(cè)和車(chē)輛檢測(cè)等任務(wù)已成為熱門(mén)研究領(lǐng)域。然而,實(shí)際應(yīng)用中,可用的預(yù)訓(xùn)練模型可能并不適用于所有應(yīng)用場(chǎng)景。 例如,雖然預(yù)先訓(xùn)練的模型可以檢測(cè)出行人,但它無(wú)法區(qū)分“好人”和“壞人”,因?yàn)樗鼪](méi)有接受相關(guān)的

    2024年04月10日
    瀏覽(32)
  • 基于Yolov8與LabelImg訓(xùn)練自己數(shù)據(jù)的完整流程

    基于Yolov8與LabelImg訓(xùn)練自己數(shù)據(jù)的完整流程

    運(yùn)行過(guò)程中,會(huì)提示下載coco128.zip,和yolov8n.pt,模型與py文件放在同一目錄下,如果網(wǎng)速快的話,自己下載就好,下載慢的話,下面是網(wǎng)盤(pán)地址: 測(cè)試結(jié)果路徑:ultralyticsrunsdetectval,里面存儲(chǔ)了運(yùn)行的結(jié)果,這樣環(huán)境就算是配置好了。 結(jié)果如下: 首先創(chuàng)建一個(gè)文件夾:coc

    2024年02月13日
    瀏覽(25)
  • 完整且詳細(xì)的Yolov8復(fù)現(xiàn)+訓(xùn)練自己的數(shù)據(jù)集

    完整且詳細(xì)的Yolov8復(fù)現(xiàn)+訓(xùn)練自己的數(shù)據(jù)集

    Yolov8 的源代碼下載: ultralytics/ultralytics: NEW - YOLOv8 ?? in PyTorch ONNX CoreML TFLite (github.com) https://github.com/ultralytics/ultralytics Yolov8的權(quán)重下載: Releases · ultralytics/assets · GitHub Ultralytics assets. Contribute to ultralytics/assets development by creating an account on GitHub. https://github.com/ultralytics/assets

    2024年02月16日
    瀏覽(27)
  • Yolov8改進(jìn)模型后使用預(yù)訓(xùn)練權(quán)重遷移學(xué)習(xí)訓(xùn)練自己的數(shù)據(jù)集

    Yolov8改進(jìn)模型后使用預(yù)訓(xùn)練權(quán)重遷移學(xué)習(xí)訓(xùn)練自己的數(shù)據(jù)集

    yolov8 github下載 1、此時(shí)確保自己的數(shù)據(jù)集格式是yolo 格式的(不會(huì)的去搜教程轉(zhuǎn)下格式)。 你的自制數(shù)據(jù)集文件夾擺放 主目錄文件夾擺放 自制數(shù)據(jù)集data.yaml文件路徑模板 2、把data.yaml放在yolov8–ultralytics-datasets文件夾下面 3、然后模型配置改進(jìn)yaml文件在主目錄新建文件夾v8_

    2024年02月06日
    瀏覽(27)
  • 模型實(shí)戰(zhàn)(3)之YOLOv7實(shí)例分割、模型訓(xùn)練自己數(shù)據(jù)集

    下載yolov7實(shí)例分割模型: 安裝環(huán)境

    2023年04月08日
    瀏覽(29)
  • yolov8訓(xùn)練自己的數(shù)據(jù)集與轉(zhuǎn)成onnx利用opencv進(jìn)行調(diào)用

    yolov8訓(xùn)練自己的數(shù)據(jù)集與轉(zhuǎn)成onnx利用opencv進(jìn)行調(diào)用

    文章目錄 系列文章目錄 前言 一、利用labeling進(jìn)行數(shù)據(jù)的創(chuàng)建? 二、使用步驟 1.引入庫(kù) 2.讀入數(shù)據(jù) 總結(jié) 首先需要?jiǎng)?chuàng)建適合yolov8的數(shù)據(jù)模式,需要將xml文件轉(zhuǎn)成txt文件。修改yolov8的配置文件實(shí)現(xiàn)模型的訓(xùn)練 提示:以下是本篇文章正文內(nèi)容,下面案例可供參考 代碼如下(示例)

    2024年02月06日
    瀏覽(22)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包