深度学习训练数据的图像增强
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 的。
最后请记住这些值,因为一旦您的模型得到训练,您仍然需要对任何新图像进行归一化,以便在您未来的推理中获得良好的准确性。
我对图像增强的均值和标准差有疑问。
这两个参数是否建议填写?
如果是这样,我怎么知道号码?我是否必须在训练之前遍历数据,以及图像的每个通道?
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 的。
最后请记住这些值,因为一旦您的模型得到训练,您仍然需要对任何新图像进行归一化,以便在您未来的推理中获得良好的准确性。