从〇构建数据集并利用YOLOv8训练自己的数据集

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

目录

文章目录

前言

一、数据准备

1、公开数据集

2、自建数据集

数据采集

数据增强

数据标注

数据转换

标注数据的数据增强

3、数据集划分

​编辑

二、YOLOv8模型下载及部署

1.YOLOv8模型下载

2.环境部署

三、YOLOv8训练自己的数据集

1、配置自己的数据文件

2、模型训练

命令行运行

文件运行

总结



前言

本人在使用YOLOv8模型训练自己的数据集的过程中,碰到了很多问题,以防再次遇到同样的问题,在此做个记录。


一、数据准备

1、公开数据集

ImageNet数据集:ImageNeticon-default.png?t=N7T8https://www.image-net.org/
coco数据集:COCO - Common Objects in Context (cocodataset.org)icon-default.png?t=N7T8https://cocodataset.org/密集行人检测数据集:
【密集行人检测数据集】-计算机视觉数据集-极市开发者平台 (cvmart.net)icon-default.png?t=N7T8https://www.cvmart.net/dataSets/detail?tabType=1¤tPage=7&pageSize=12&id=366&utm_campaign=zywang&utm_source=social&utm_medium=gongzhonghao
CIFAR-10数据集
CIFAR-10 and CIFAR-100 datasets (toronto.edu)icon-default.png?t=N7T8https://www.cs.toronto.edu/~kriz/cifar.html
Mnist数据集:http://yann.lecun.com/exdb/mnist/icon-default.png?t=N7T8http://yann.lecun.com/exdb/mnist/

2、自建数据集

数据采集

对于一些特定的应用场景,没有公开的数据集可以使用时,可以通过手机或摄像头获取需要处理任务的图像或视频,对其进行数据清洗以获得适用于自己任务的高质量数据集。

数据增强

目前的深度学习的训练中,数据的数量越多,模型训练的效果越好。而针对数据数量较少的情况下,可以通过数据增强的手段来进行数据扩充。

数据增强(Data Augmentation)是通过应用一系列随机变化来生成新的、多样化的数据样本技术,以增加数据集的大小和多样性,从而提高模型的泛化能力。

常见的数据增强方式:

1、几何变换:包括旋转、平移、缩放、裁剪、翻转等。

2、颜色变换:包括:调整亮度、对比度、饱和度、色调等。

3、像素变换:包括添加噪声(如椒盐噪声、高斯噪声)、模糊、锐化等。

4、其他:如混合(如CutMix、MixUp)、添加遮罩、改变图像质量等。

数据标注

数据标注是深度学习项目中的一个重要环节,标注的准确率对模型的训练效果有很大的影响。对数据进行标注目的是为了让计算机学会正确的识别目标,并且可以正确的定位目标的位置,数据集中包含了图像中的位置信息以及类别信息。

常用的标注软件:

LabelMe:GitHub - labelmeai/labelmeImage Polygonal Annotation with Python (polygon, rectangle, circle, line, point and image-level flag annotation). - labelmeai/labelmeicon-default.png?t=N7T8https://github.com/labelmeai/labelmeLabelImage(在线标注工具):LabelImageicon-default.png?t=N7T8https://rachelcao277.github.io/LabelImage/

Make Sense(在线标注工具):

Make Senseicon-default.png?t=N7T8https://www.makesense.ai/X-AnyLabeling:GitHub - CVHub520/X-AnyLabelingEffortless data labeling with AI support from Segment Anything and other awesome models. - CVHub520/X-AnyLabelingicon-default.png?t=N7T8https://github.com/CVHub520/X-AnyLabeling注:X-AnyLabeling标注工具是半自动标注工具,可以通过下载各种网络模型的训练权重,对数据进行半自动标注,尤其是在标注分割数据集时非常省时省力。

数据转换

YOLOv8训练时的数据集格式是txt格式,但是标注工具生成的标签文件有的是xml格式文件或json格式文件,因此在输入模型训练之前要对标签文件的格式进行转换。在以下代码中将文件夹位置修改为自己文件夹位置。

1、json文件转换为txt文件

import os
import json
from tqdm import tqdm
import argparse

parser = argparse.ArgumentParser()
parser.add_argument('--json_path', default='D:\data\lettuce\images', type=str, help="input: coco format(json)")
parser.add_argument('--save_path', default='D:\data\lettuce\labels', type=str, help="specify where to save the output dir of labels")
arg = parser.parse_args()


def convert(size, box):
    dw = 1. / (size[0])
    dh = 1. / (size[1])
    x = box[0] + box[2] / 2.0
    y = box[1] + box[3] / 2.0
    w = box[2]
    h = box[3]

    x = x * dw
    w = w * dw
    y = y * dh
    h = h * dh
    return (x, y, w, h)


if __name__ == '__main__':
    json_file = os.(arg.json_path)  # COCO Object Instance 类型的标注
    ana_txt_save_path = arg.save_path  # 保存的路径

    data = json.load(open(json_file, 'r'))
    if not os.path.exists(ana_txt_save_path):
        os.makedirs(ana_txt_save_path)

    id_map = {}  # coco数据集的id不连续!重新映射一下再输出!
    for i, category in enumerate(data['categories']):
        id_map[category['id']] = i

    # 通过事先建表来降低时间复杂度
    max_id = 0
    for img in data['images']:
        max_id = max(max_id, img['id'])
    # 注意这里不能写作 [[]]*(max_id+1),否则列表内的空列表共享地址
  

你可能感兴趣的:(笔记)