归一化参数的获取
内容目录

归一化处理是数据预处理的一种常见技术,旨在将数据转换为标准的、可比较的范围。在深度学习中,归一化通常是对输入数据进行处理,以便使其具有零均值和单位方差,或者将其缩放到特定的范围。

在图像处理中,常见的归一化方式是对图像进行均值和标准差的归一化。

在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))

本质就是累加各个图片的参数,取其平均值和方差等

代码参考他人博客

上一篇
下一篇