深度学习训练数据的图像增强

Image augmentation on deep learning training data

我对图像增强的均值和标准差有疑问。

这两个参数是否建议填写?

如果是这样,我怎么知道号码?我是否必须在训练之前遍历数据,以及图像的每个通道?

import albumentations as A
train_transform = A.Compose(
        [
            A.Resize(height=IMAGE_HEIGHT, width=IMAGE_WIDTH),
            A.ColorJitter(brightness=0.3, hue=0.3, p=0.3),
            A.Rotate(limit=5, p=1.0),
            # A.HorizontalFlip(p=0.3),
            # A.VerticalFlip(p=0.2),
            A.Normalize(
                mean=[0.0, 0.0, 0.0],# <-----------this parameter
                std=[1.0, 1.0, 1.0],# <-----------this parameter
                max_pixel_value=255.0,
            ),
            ToTensorV2(),
        ],
    )

是的,强烈建议在大多数情况下对图像进行规范化,显然您会遇到一些不需要规范化的情况。原因是将值保持在一定范围内。网络的输出,即使网络是'big',也受到输入数据范围的强烈影响。如果你让你的输入范围失控,你的预测就会从一个到另一个发生巨大的变化。因此,梯度也会失控并可能使您的训练效率低下。我邀请您阅读 this and that 答案,以详细了解规范化背后的 'why',并对这些行为有更深入的了解。

使用 imagenet 均值和标准差对图像进行归一化是很常见的:mean = [0.485, 0.456, 0.406]std = [0.229, 0.224, 0.225]。当然你也可以考虑,如果你的数据集足够真实,在生产环境中,使用它自己的均值和标准差而不是 imagenet 的。

最后请记住这些值,因为一旦您的模型得到训练,您仍然需要对任何新图像进行归一化,以便在您未来的推理中获得良好的准确性。