数据集Dataloader制作

如何自定义数据集:

  • 1.数据和标签的目录结构先搞定(得知道到哪读数据)
  • 2.写好读取数据和标签路径的函数(根据自己数据集情况来写)
  • 3.完成单个数据与标签读取函数(给dataloader举一个例子)

咱们以花朵数据集为例:

  • 原来数据集都是以文件夹为类别ID,现在咱们换一个套路,用txt文件指定数据路径与标签(实际情况基本都这样)
  • 这回咱们的任务就是在txt文件中获取图像路径与标签,然后把他们交给dataloader
  • 核心代码非常简单,按照对应格式传递需要的数据和标签就可以
    import os
    import matplotlib
    matplotlib.use('TkAgg')
    import matplotlib.pyplot as plt
    import numpy as np
    import torch
    from torch import nn
    import torch.optim as optim
    import torchvision
    #pip install torchvision
    from torchvision import transforms, models, datasets
    #https://pytorch.org/docs/stable/torchvision/index.html
    import imageio
    import time
    import warnings
    import random
    import sys
    import copy
    import json
    from PIL import Image
    
    # 先来分细节整明白咱一会要干啥!
    # 任务1:读取txt文件中的路径和标签
    # 第一个小任务,从标注文件中读取数据和标签
    # 至于你准备存成什么格式,都可以的,一会能取出来东西就行
    
    def load_annotations(ann_file):
        data_infos = {}
        with open(ann_file) as f:
            samples = [x.strip().split(' ') for x in f.readlines()]
            for filename, gt_label in samples:
                data_infos[filename] = np.array(gt_label, dtype=np.int64)
        return data_infos
    
    # print(load_annotations('./flower_data/train.txt'))
    
    # 任务2:分别把数据和标签都存在list里
    # 不是我非让你存list里,因为dataloader到时候会在这里取数据
    # 按照人家要求来,不要耍个性,让整list咱就给人家整
    
    img_label = load_annotations('./flower_data/train.txt')
    image_name = list(img_label.keys())
    # print(image_name)
    label = list(img_label.values())
    # print(label)
    
    # #### 任务3:图像数据路径得完整
    #
    # - 因为一会咱得用这个路径去读数据,所以路径得加上前缀
    # - 以后大家任务不同,数据不同,怎么加你看着来就行,反正得能读到图像
    
    data_dir = './flower_data/'
    train_dir = data_dir + '/train_filelist'
    valid_dir = data_dir + '/val_filelist'
    
    image_path = [os.path.join(train_dir,img) for img in image_name]
    print(image_path)
    
    # 任务4:把上面那几个事得写在一起
    # 1.注意要使用from torch.utils.data import Dataset, DataLoader
    # 2.类名定义class FlowerDataset(Dataset),其中FlowerDataset可以改成自己的名字
    # 3.def init(self, root_dir, a
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值