【问题标题】:Loading original images besides the transformed ones using ImageFolder使用 ImageFolder 加载转换后的图像以外的原始图像
【发布时间】:2019-10-24 01:41:45
【问题描述】:

我正在尝试训练 GAN 来为图像着色。为此,我使用torchvisionImageFolder 来加载灰度图像,但我还需要原始数据以及转换后的数据。

由于数据量很大,我希望以最快的方式进行。我想让ImageFolder 同时加载两者以降低时间复杂度。

def load_data_bw(opt):
    datapath = '/content/gdrive/My Drive/faces/2003'

    dataset = torchvision.datasets.ImageFolder(datapath,
                       transform=transforms.Compose([
                                                    transforms.Grayscale(num_output_channels=3), #load images as grayscale with three channels
                                                    transforms.RandomChoice(
                                                       [transforms.Resize(opt['loadSize'], interpolation=1),
                                                        transforms.Resize(opt['loadSize'], interpolation=2),
                                                        transforms.Resize(opt['loadSize'], interpolation=3),
                                                        transforms.Resize((opt['loadSize'], opt['loadSize']),
                                                                          interpolation=1),
                                                        transforms.Resize((opt['loadSize'], opt['loadSize']),
                                                                          interpolation=2),
                                                        transforms.Resize((opt['loadSize'], opt['loadSize']),
                                                                          interpolation=3)]
                                                    ),
                                                    transforms.RandomChoice(
                                                       [transforms.RandomResizedCrop(opt['fineSize'], interpolation=1),
                                                        transforms.RandomResizedCrop(opt['fineSize'], interpolation=2),
                                                        transforms.RandomResizedCrop(opt['fineSize'], interpolation=3)]
                                                    ),
                                                    transforms.ColorJitter(brightness=0.1, contrast=0.1),
                                                    transforms.RandomHorizontalFlip(),
                                                    transforms.ToTensor()
                                               ]))
    return dataset

我希望得到:

for iteration, orig_data, gray_data in enumerate(training_data_loader, 1):
    # code..

【问题讨论】:

  • 你不需要 collat​​e_fn() 吗?我正在尝试像你一样做类似的数据集,但我可以将原始数据集和主要数据集配对,我在 pytorch 论坛中搜索并启动了一些主题,但我无法解决问题。

标签: python deep-learning pytorch


【解决方案1】:

我假设您有 2 个数据集变量,即 dataset_bwdataset_color,您可以使用 ImageFolder 加载它们。然后您可以执行以下操作:

class GAN_dataset(Dataset):
    def __init__(self, dataset_bw, dataset_color):
        self.dataset1 = dataset_bw
        self.dataset2 = dataset_color

    def __getitem__(self, index):
        x1 = self.dataset1[index]
        x2 = self.dataset2[index]

        return x1, x2

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

dataset = GAN_dataset(dataset_bw, dataset_color)
loader = DataLoader(dataset, batch_size = ...)

这样当您遍历loader 时,您将获得所需的两张图片。

【讨论】:

  • dataset_bw 和 dataset_color 输入应该是什么?应该使用 Dataloader 或 scikit image io 还是只使用 imagefolder 就足够了?关键是图片是和名字配对的,我的意思是主要和彩色是同名的,所以图片文件夹会配对吗?
  • 还有一个是分裂和洗牌,你描述的方法可以用于训练和测试的洗牌和分裂吗? (我知道在这种情况下,图像不需要改组,但是在一些不常见的任务的情况下是否可以?)
  • dataset_bwdataset_color 应该定义为 OP 在他们的问题中所做的(使用 ImageFolder)。只有这样,DataLoader 才能使用它。在dataset_bwdataset_color 中,不要使用随机播放,那么图像应该是相同的顺序(相同的索引),只要它们具有相同的名称。稍后当您编写组合的GAN_dataset 时,您可以在下面的DataLoader 中使用 shuffle 以便将两者一起洗牌(否则您将失去配对)。
  • 感谢您的回答,拆分呢?数据加载器可以吗?
  • 我不确定。您可以提出新问题或在线查找。我通常预先拆分我的数据集(使用 Pandas 或保存在单独的文件夹中),即在加载到 Dataset 之前。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-01
  • 2015-11-17
  • 2016-03-07
  • 1970-01-01
  • 2022-01-09
  • 1970-01-01
相关资源
最近更新 更多