内容目录
归一化处理是数据预处理的一种常见技术,旨在将数据转换为标准的、可比较的范围。在深度学习中,归一化通常是对输入数据进行处理,以便使其具有零均值和单位方差,或者将其缩放到特定的范围。
在图像处理中,常见的归一化方式是对图像进行均值和标准差的归一化。
在pyTorch中:
data_transform = {
"train": transforms.Compose([
# transforms.Resize((32,32)),
transforms.RandomResizedCrop((32, 32)),
transforms.RandomHorizontalFlip(),
transforms.ToTensor(),
transforms.Normalize([0.29055837, 0.2479621, 0.24285364], [0.28176972, 0.2415727, 0.20479323])]),
"val": transforms.Compose([transforms.Resize((32, 32)),
transforms.CenterCrop(32),
transforms.ToTensor(),
transforms.Normalize([0.29055837, 0.2479621, 0.24285364], [0.28176972, 0.2415727, 0.20479323])])
}
使用transforms.Normalize进行归一化,而其中参数可以通过以下代码计算出来
import numpy as np
import cv2
from PIL import Image
from cnn.data.utils import read_split_data
# img_h, img_w = 32, 32
img_h, img_w = 128, 128 #根据自己数据集适当调整,影响不大
means, stdevs = [], []
img_list = []
# 图片保存地址
imgs_path = 'C:/Users/离歌/Desktop/Data/train'
train_images_path, train_images_label, val_images_path, val_images_label = read_split_data(imgs_path)
imgs_path_list = train_images_path
len_ = len(imgs_path_list)
i = 0
for item in imgs_path_list:
img = Image.open(item)
img = cv2.cvtColor(np.array(img), cv2.COLOR_RGB2BGR)
# img = cv2.imread(os.path.join(imgs_path,item))
img = cv2.resize(img,(img_w,img_h))
img = img[:, :, :, np.newaxis]
img_list.append(img)
i += 1
print(i,'/',len_)
imgs = np.concatenate(img_list, axis=3)
imgs = imgs.astype(np.float32) / 255.
for i in range(3):
pixels = imgs[:, :, i, :].ravel() # 拉成一行
means.append(np.mean(pixels))
stdevs.append(np.std(pixels))
# BGR --> RGB , CV读取的需要转换,PIL读取的不用转换
means.reverse()
stdevs.reverse()
print("normMean = {}".format(means))
print("normStd = {}".format(stdevs))
本质就是累加各个图片的参数,取其平均值和方差等
代码参考他人博客