【深度学习目标检测】Pytorch学习(1)DataSet数据集的加载

from torch.utils.data import Dataset
import cv2
from PIL import Image
import os


# 自定义类继承Dataset类
# 数据集的加载主要分为两个部分:一个是图片,一个为当前图片的标签
class MyData(Dataset):

    # 初始化,构造函数
    def __init__(self, root_dir, label_dir):
        self.root_dir = root_dir
        self.label_dir = label_dir
        self.path = os.path.join(root_dir, label_dir)
        self.img_path = os.listdir(self.path)

    def __getitem__(self, idx):
        img_name = self.img_path[idx]
        img_item_path = os.path.join(self.root_dir, self.label_dir, img_name)
        img = Image.open(img_item_path)
        label = self.label_dir
        return img, label

    def __len__(self):
        return len(self.img_path)


# 根目录和对应的标签目录
root_dir = "DataSet/hymenoptera_data/train"
ants_label_dir = "ants"
bees_label_dir = "bees"
# 传入文件夹路径,自动获取文件夹下的图片及图片对应的标签
ants_dataset = MyData(root_dir, ants_label_dir)
bees_dataset = MyData(root_dir, bees_label_dir)
# 将两个不同标签的数据集合并为一个训练集
# 合并之后的训练集排序为合并的顺序,这里为蚂蚁数据集后面为蜜蜂的数据集
train_dataset = ants_dataset + bees_dataset

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
首先,你需要准备好你的数据集,格式可以是图片或文本。然后你可以使用PyTorch中的`Dataset`和`DataLoader`类来加载和处理数据,以下是一个简单的例子: 对于图片数据集,你可以使用`torchvision.datasets.ImageFolder`类,这个类会自动把数据集文件夹中的图片按照类别进行分类。假设你的数据集文件夹的路径是`./data`,其中包含10个子文件夹,每个子文件夹包含一种类别的图片,你可以这样加载数据集: ```python import torchvision.transforms as transforms from torchvision.datasets import ImageFolder # 定义数据转换 transform = transforms.Compose([ transforms.Resize(256), transforms.CenterCrop(224), transforms.ToTensor(), transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) ]) # 加载数据集 dataset = ImageFolder(root='./data', transform=transform) # 定义数据加载器 dataloader = DataLoader(dataset, batch_size=32, shuffle=True) ``` 对于文本数据集,你需要自己定义一个`Dataset`类来加载和处理数据,以下是一个简单的例子: ```python import torch from torch.utils.data import Dataset, DataLoader class TextDataset(Dataset): def __init__(self, text_file, label_file, vocab): self.text = [] self.labels = [] self.vocab = vocab # 读取文本和标签文件 with open(text_file, 'r') as f: for line in f: tokens = line.strip().split() # 把单词转换成索引 self.text.append([self.vocab[token] for token in tokens]) with open(label_file, 'r') as f: for line in f: label = int(line.strip()) self.labels.append(label) def __len__(self): return len(self.labels) def __getitem__(self, index): # 把文本和标签转换成张量 text = torch.tensor(self.text[index]) label = torch.tensor(self.labels[index]) return text, label # 加载词汇表 vocab = {} with open('vocab.txt', 'r') as f: for i, line in enumerate(f): token = line.strip() vocab[token] = i # 加载数据集 dataset = TextDataset('text.txt', 'labels.txt', vocab) # 定义数据加载器 dataloader = DataLoader(dataset, batch_size=32, shuffle=True) ``` 以上是个简单的例子,你可以根据自己的需求来修改和扩展。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

beyond951

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值