Normalize是干什么的
在深度学习的transform操作中,Normalize主要用于对图像数据进行归一化处理。其作用是将每个通道(如RGB图像的红、绿、蓝通道)的像素值调整到特定的均值和标准差范围,以便于加速训练收敛并改善模型的性能。
Normalize(mean, std) 一般有两个主要参数:
- mean:对每个通道的像素值进行均值平移(减去对应通道的均值)。
- std:将每个通道的像素值除以对应通道的标准差,从而使数据在0附近呈现标准化的分布。
归一化的公式是:

例如,若使用Normalize(mean=[0.5, 0.5, 0.5], std=[0.5, 0.5, 0.5]),表示将图像的RGB三个通道的每个像素值减去0.5,并除以0.5。这通常将图像的像素值范围从[0, 1]变换为[-1, 1]。
为什么需要Normalize?
- 使模型更容易训练:归一化后的数据使模型能够更快速地收敛,因为它消除了不同通道之间的尺度差异。
-
提升模型泛化能力:通过归一化,输入特征的分布更加一致,可以提升模型在测试集或新数据上的表现
示例代码:
writer = SummaryWriter("logs")
img_path = "dataset/train/ants_image/0013035.jpg"
img = Image.open(img_path)
# ToTensor
trans_tensor = transforms.ToTensor()
tensor_img = trans_tensor(img)
# Normalize
trans_norm = transforms.Normalize([0.5,0.5,0.5],[0.5,0.5,0.5])
img_norm = trans_norm(tensor_img)
writer.add_image("Norm",img_norm)
writer.close()
# print(tensor_img)
一般数据集的mean和std需要自己算,我这里示例就是随便写的,计算方式如下:
1. 计算每个通道的均值(mean):
- 对数据集中所有图像的每个通道的像素值求平均。
2. 计算每个通道的标准差(std):
- 对每个通道的像素值计算标准差,反映数据集的像素值在均值附近的波动范围。
有小白肯定会问,通道是什么,在计算机视觉中,通道(Channel)是指图像中的颜色维度。图像通常由多个颜色通道组成,每个通道保存图像在某种颜色或光谱下的强度信息。比如RGB图片就是三通道,红绿蓝。
Resize是干什么的
在图像处理领域中,transform 中的 resize 是用来调整图像大小的操作。它将图像缩放到指定的宽度和高度,这对于统一图像输入尺寸、节省计算资源或适应模型输入要求非常有用。
具体地,resize 在深度学习中的作用包括:
-
调整输入尺寸:很多神经网络模型需要固定大小的输入图像。
resize可以将不同大小的图像调整到同一尺寸,从而使模型能够处理这些图像。 -
保持或不保持比例:
resize操作可以选择是否保持原始图像的宽高比例。在某些情况下,可能需要严格保持比例,而在其他情况下,可能需要拉伸或压缩图像。 -
数据增强:在训练模型时,调整图像的大小可以作为一种数据增强方法,通过改变图像尺寸来丰富数据集,从而提升模型的泛化能力。
示例代码;
# Resize
# Resize不会改变图片的类型
writer = SummaryWriter("logs")
img_path = "dataset/train/ants_image/0013035.jpg"
img = Image.open(img_path)
# ToTensor
trans_tensor = transforms.ToTensor()
tensor_img = trans_tensor(img)
trans_resize = transforms.Resize((256,256))
img_resize = trans_resize(tensor_img)
writer.add_image("Resize",img_resize)
运行之后在terminal中打开Tensorboard查看下


2083

被折叠的 条评论
为什么被折叠?



