使用 pytorch 转换的 Imagenet 预处理

Image Net Preprocessing using torch transforms

我正在尝试重新创建原始出版物 "Deep Residual Learning for Image Recognition" 中完成的 ImageNet 数据集的数据预处理。正如他们在第 3.4 节的论文中所说: “我们对 ImageNet 的实现遵循 [21, 41] 中的做法。调整图像的大小,并在 [256,480] 中随机采样其短边以进行缩放 [41]。从图像或其水平方向随机采样 224×224 裁剪翻转,减去每个像素的平均值 [21]。使用 [21] 中的标准颜色增强。“

原图随机裁剪或裁剪大小为224x224的水平翻转的部分我已经弄明白了。其他两部分我没有。另外两部分是调整图像大小,在[256,480]中随机采样其短边以进行缩放使用[21]中的标准颜色增强。

对于第一个,我在火炬变换中找不到“随机调整大小”功能。第二,它引用 [21],是(根据 [21])“对整个 ImageNet 训练集中的 RGB 像素值集执行 PCA”。请参阅“数据扩充”部分的 ImageNet Classification with Deep Convolutional Neural Networks 以获取完整说明。

我将如何重新创建这种类型的预处理?

第一个需要 3 个组合变换,RandomChoiceResizeRandomCrop

transforms.Compose([transforms.RandomChoice([transforms.Resize(256), 
                                             transforms.Resize(480)]),
                    transforms.RandomCrop(224)
                    ])

对于第二个 this 是您正在寻找的,但正式的 Pytorch(以及其他所有人)只是使用它。

transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])

如果觉得太简单,standard Tensorflow pre-processing就是

x /= 127.5
x -= 1.