为什么深度学习的一些图像预处理使用mean=[0.485, 0.456, 0.406]和std=[0.229, 0.224, 0.225]来进行正则化?
因为mean=[0.485, 0.456, 0.406]和std=[0.229, 0.224, 0.225]是根据ImageNet数据集中的数百万张图像计算得到的,而使用ImageNet的均值和标准差是训练模型时的一种常用方法。
要注意对应的图像通道是否正确:
mean=[0.485, 0.456, 0.406] # RGB
std=[0.229, 0.224, 0.225] # RGB
这是数值范围在[0, 1]的图像的均值和标准差,对于[0, 255]的输入,用mean=(0.485, 0.456, 0.406)*255就可以得到推荐的RGB的mean。
mean=(0.485, 0.456, 0.406)*255 = (123.675, 116.28, 103.53)
std=(0.229, 0.224, 0.225)*255 = (58.395, 57.12, 57.375)
除了ImageNet外,还有一些常用的数据集的均值和方差:
# CIFAR10
cifar10_mean = (0.4914, 0.4822, 0.4465)
cifar10_std = (0.2471, 0.2435, 0.2616)
# CIFAR100
cifar100_mean = (0.5071, 0.4867, 0.4408)
cifar100_std = (0.2675, 0.2565, 0.2761)