我如何控制(或至少记录)传递给 torchvision transform 的参数逐个图像?

How can I control (or at least record) parameters passed to torchvision transform on an image by image basis?

我正在研究模糊和噪声对图像 classifier 的影响,我想使用 torchvision 变换对我的图像应用不同数量的高斯模糊和泊松噪声。为噪声和模糊参数指定概率分布非常简单,但我无法弄清楚如何在逐个图像的基础上控制这些参数或让 PyTorch 记录实际用于每个图像的参数。我可以通过在数据集 class 中定义我的变换而不是将其传递给数据加载器来做到这一点,这样每次我加载图像时都会创建一个自定义变换,并且它的参数与图像及其标签一起返回吗?

PyTorch 提供的转换机制使用简单的可调用对象,这些对象在从 Dataset 加载样本时自动调用。没有什么能从根本上阻止您从 Dataset 本身进行所有转换。由于你没有提供任何代码,我只能提供一些伪代码

from torchvision.transforms.functional import gaussian_blur

class CoolDataset(Dataset):
    def __init__(self, root_dir):
        self.image_list = os.listdir(root_dir)
        self.sample_wise_blur_std = [0.1, 0.2, ..]

    def __getitem__(self, i):
        img = read_image(self.image_list[i]) # .shape is (C,H,W)
        blurred = gaussian_blur(img, (3,3), std=self.sample_wise_blur_std[i])
        return img, self.sample_wise_blur_std[i]

在您的数据集定义中融合了转换参数,您的数据加载器将为您整理它们

cooldl = DataLoader(CoolDataset('/path/to/images'), ...)
for X, blurs in cooldl:
    # X.shape is (B,C,H,W)
    # blurs.shape is (B,)
    pass

希望这就是您要找的。