三、如何搞自定义数据集?


前言

MNIST数据这个最最基础的数据集已经被走在程序猿道路上的同学们玩坏了,所以今天教大家如何搞一个自定义数据集。


一、定义的数据集,未做预处理。

下面展示一些 内联代码片

import  os
from  torch.utils.data import  Dataset ,DataLoader
from PIL import Image

#1.创建数据集类,使用torch.utils.data中的Dataset方法。
class My_Dataset(Dataset):

    #2.循环找到文件路径,并添加标签
    def __init__(self,main_dir,data_type,transforms):
        self.dataset=[]#空列表为装新增一个标签的数据库
        self.transforms=transforms
        if data_type==0:
            data_filename='train'
        elif data_type is 1:
            data_filename='val'
        else:
            data_filename='test'
        for i , cls_filename in enumerate(
        os.listdir(os.path.join(main_dir,data_filename))):
            for i ,img_data in enumerate(os.listdir(
            os.path.join(main_dir,data_filename,cls_filename))):
                self.dataset.append([os.path.join(main_dir,
                data_filename,cls_filename,img_data),int(img_data[0]) ])

    #3.计算图片长度,方便后面迭代
    def __len__(self):
        return len(self.dataset)#为了获取图片长度,方便迭代

    #4、取出图片路径,并打开,便于做数据预处理
    def __getitem__(self, index):
        img,label=self.dataset[index]
        img_data=Image.open(img)
        img_data=self.transforms(img_data)
        return img_data,label

示例:@TOC

二、定义数据集,并做数据预处理。

包括旋转、裁剪、转为张量、扩大、正则化等等。

1.预处理部分

#4、取出图片路径,并打开,便于做数据预处理
def __getitem__(self, index):
    img,label=self.dataset[index]
    img_data=self.data_process(Image.open(img))
    return img_data,label

#5.数据处理,数据增强、加噪声等等
def data_process(self,x):
    return transforms.Compose([transforms.ToTensor(),
    transforms.Normalize(mean=(0.5,),std=(0.5,))])(x)

2.定义数据过程

代码如下(示例):

import  os
from  torchvision import transforms
from  torch.utils.data import  Dataset ,DataLoader
from PIL import Image

#1.创建数据集类,使用torch.utils.data中的Dataset方法。
class My_Dataset(Dataset):

    #2.循环找到文件路径,并添加标签
    def __init__(self,main_dir,data_type):
        self.dataset=[]#空列表为装新增一个标签的数据库
        if data_type==0:
            data_filename='train'
        elif data_type is 1:
            data_filename='val'
        else:
            data_filename='test'
        for i , cls_filename in enumerate(
        os.listdir(os.path.join(main_dir,data_filename))):
            for i ,img_data in enumerate(os.listdir(
            os.path.join(main_dir,data_filename,cls_filename))):
                self.dataset.append([os.path.join(main_dir,
                data_filename,cls_filename,img_data),i ])

    #3.计算图片长度,方便后面迭代
    def __len__(self):
        return len(self.dataset)#为了获取图片长度,方便迭代

    #4、取出图片路径,并打开,便于做数据预处理
    def __getitem__(self, index):
        img,label=self.dataset[index]
        img_data=self.data_process(Image.open(img))
        return img_data,label

    #5.数据处理,数据增强、加噪声等等
    def data_process(self,x):
        return transforms.Compose([transforms.ToTensor(),
        transforms.Normalize(mean=(0.5,),std=(0.5,))])(x)
``
### 使用英特尔CPU优化和训练YOLOv8数据集 #### 配置环境 为了在英特尔CPU上高效地训练YOLOv8模型,首先需要确保Python环境已正确配置。由于英特尔硬件可能缺乏专用GPU支持,因此建议依赖于高效的库如Intel® Extension for PyTorch* (IPEX),它可以显著提升基于CPU的深度学习工作负载性能[^3]。 ```bash pip install torch torchvision intel-extension-for-pytorch ``` #### 数据准备 对于任何机器学习项目来说,高质量的数据集都是成功的关键因素之一。如果计划使用自定义数据集,则需按照标准格式整理标注文件,并将其转换成YOLO所需的`.txt`标签形式。此外,还需创建相应的`data.yaml`文件来描述类别的数量以及其他必要的元信息[^4]。 #### 调整超参数以适应CPU架构特性 考虑到不同类型的处理器有不同的优势与局限性,在调整超参时应特别注意以下几点: - **Batch Size**: 较小批量尺寸通常更适合单核或多线程环境下运行的任务。 - **Image Resolution**: 减少输入图片分辨率可以有效降低内存消耗及运算复杂度。 - **Epochs & Learning Rate Schedule**: 延长迭代次数有助于充分挖掘特征空间;同时合理安排学习率变化规律也很重要。 #### 利用OpenVINO工具链进行推理加速 虽然这里讨论的是训练过程中的效率问题,但如果最终目的是部署到边缘侧或其他资源受限场景下的话,那么提前考虑好如何利用OpenVINO Toolkit来做后续推断阶段的工作也是很有帮助的。例如可以通过量化技术减少模型大小而不明显牺牲准确性等措施来达成目的[^1]。 ```python from ultralytics import YOLO model = YOLO('yolov8n.pt') # 加载预训练权重 results = model.train(data='path/to/data.yaml', epochs=50, imgsz=640) ``` 以上代码片段展示了如何加载YOLOv8 nano版本的基础模型并启动训练流程的一个简单例子。实际应用当中还需要根据具体情况做更多细致入微的设定修改才行哦!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值