PyTorch-导入以图像为标签的数据集

PyTorch-导入以图像为标签的数据集,pytorch,pytorch-dataloader,Pytorch,Pytorch Dataloader,我有一个数据集,其中包含作为输入的图像和作为图像的标签/目标。文件夹中的结构如下所示: > DATASET/ > ---TRAIN/ > ------image_xx.png > ------label_xx.png > ---TEST/ > ------image_xx.png > ------label_xx.png 我目前尝试使用torchvisions数据集中的“ImageFolder”加载图像,如下所示: > DATASET/ >

我有一个数据集,其中包含作为输入的图像和作为图像的标签/目标。文件夹中的结构如下所示:

> DATASET/
> ---TRAIN/
> ------image_xx.png
> ------label_xx.png
> ---TEST/
> ------image_xx.png
> ------label_xx.png
我目前尝试使用torchvisions数据集中的“ImageFolder”加载图像,如下所示:

> DATASET/
> ---TRAIN/
> ------image_xx.png
> ------label_xx.png
> ---TEST/
> ------image_xx.png
> ------label_xx.png
TRAIN_PATH='/PATH/to/dataset/dataset'
train\u data=datasets.ImageFolder(root=train\u路径,transform=transforms.ToTensor())
列车装载机=数据装载机(列车数据,批量大小=16,随机播放=真)
但如下图所示:

对于img,列车装载机中的标签:
打印(图像形状)
打印(标签.形状)
打破
标签不是图像,而是标记或类似的东西。有没有一种方便的方法可以导入具有上述结构的数据集?

当您为每个图像都有离散的标量类时,数据集是合适的。它期望目录结构使每个子目录都包含一个特定的类

对于您的情况,您可以简单地定义自己的
torch.nn.Dataset
子类。可能会有帮助

一个简单的例子(我没有试着运行它以查看它是否正常工作):


请问为什么标签是图像?它们可以转换成文本吗?我假设模型预测的是一个值而不是一个图像。。。是吗?@NanoBit很抱歉没有包括这些信息,我正在尝试做一个神经网络分割。因此,标签是“基本真相”图像。
import torch
import os
import cv2

class MyDataset(torch.utils.data.Dataset):

    def __init__(self, root_path, transform=None):
        self.data_paths = [f for f in sorted(os.listdir(root_path)) if f.startswith("image")]
        self.label_paths = [f for f in sorted(os.listdir(root_path)) if f.startswith("label")]
        self.transform = transform

    def __getitem__(self, idx):
        img = cv2.imread(self.data_paths[idx])
        label = cv2.imread(self.label_paths[idx])
        if self.transform:
            img = self.transform(img)
        return img, label

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

TRAIN_PATH = '/path/to/dataset/DATASET/TRAIN/'
train_data = MyDataset(root_path=TRAIN_PATH, transform=transforms.ToTensor())
train_loader = torch.utils.data.DataLoader(train_data, batch_size=16, shuffle=True)