在单个批次中对数据集中的每个图像进行 N 次采样

Sample each image from dataset N times in single batch

我目前正在从事学习表示(深度嵌入)的任务。我使用的数据集每个对象只有一个示例图像。我也用增强。

在训练期间,每个批次必须包含数据集中单个图像的 N 个不同增强版本(dataset[index] 总是 returns 新的随机变换)。

为此目的,是否有一些标准的解决方案或库与 DataLoader 一起使用 torch.utils.data.distributed.DistributedSampler? 如果不是,从 torch.utils.data.DataLoader(并调用 super().__init__(...))继承的任何 DataLoader 都可以在分布式训练中工作吗?

据我所知,这不是一种标准的做事方式——即使每个对象只有一个样本,每个批次仍然会从不同的对象中采样不同的图像,并且在不同的时期采样图像会有不同的变换。

也就是说,如果你真的想做你正在做的事情,为什么不简单地为你的数据集写一个包装器呢?

class Wrapper(Dataset):
    N = 16
    def __getitem__(self, index):
        sample = [ super().__getitem__(index) for _ in N ]
        sample = torch.stack(sample, dim=0)
        return sample

然后您的每个批次都将是 BxNxCxHxW,其中 B 是批次大小,N 是您的重复。从数据加载器获取批次后,您可以重塑批次。