如果我们的训练集过少,我们可以对训练集进行图像强化,因为一种图片进行裁剪,反转,平移,对图片的类别不会发生改变,但对计算机来说就是不同的图片。
代码主要包含这些,只需要对训练集处理,不需要对测试集处理。
data_transform={ 'train': transforms.Compose([ # 调整图像大小为300x300像素 transforms.Resize([256, 256]), # 随机旋转:-45到45度之间随机选择角度 transforms.RandomRotation(45), # # # 从中心裁剪出256x256的区域 transforms.CenterCrop([256, 256]), # 随机水平翻转:以50%的概率进行水平镜像 transforms.RandomHorizontalFlip(p=0.5), # 随机垂直翻转:以50%的概率进行垂直镜像 transforms.RandomVerticalFlip(p=0.5), # # 颜色抖动:随机调整亮度、对比度、饱和度和色调 transforms.ColorJitter( brightness=0.2, # 亮度变化幅度为20% contrast=0.1, # 对比度变化幅度为10% saturation=0.1, # 饱和度变化幅度为10% hue=0.1 # 色调变化幅度为10% ), # # 随机灰度化:以10%的概率将图像转换为灰度图 transforms.RandomGrayscale(p=0.1), # 将PIL图像转换为PyTorch张量,并自动归一化到[0,1]范围 transforms.ToTensor(), # 标准化:使用ImageNet数据集的均值和标准差进行标准化 transforms.Normalize( [0.485, 0.456, 0.406], # 均值(R, G, B通道) [0.229, 0.224, 0.225] # 标准差(R, G, B通道) ) ]), # 验证/测试数据的预处理(通常不需要数据增强) 'test': transforms.Compose([ transforms.Resize([256, 256]), # transforms.CenterCrop(224), transforms.ToTensor(), transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]) ]) }
这里用一个表格来展示作用
变换名称 (Transform) | 主要作用 | 常见参数及说明 | 引用来源 |
---|---|---|---|
transforms.Resize([256, 256]) | 将输入图像缩放至指定尺寸 | size : 目标尺寸。可以是 (h, w) 元组,也可以是单个整数(将图像短边缩放到该值,长边按比例缩放)。 interpolation : 插值方法,如 BILINEAR (默认)。 | |
transforms.RandomRotation(45) | 随机旋转图像,增加模型对物体角度的鲁棒性 | degrees : 旋转角度范围。可以是 (-deg, +deg) ,也可以是单个数字(表示±角度)。 | |
transforms.CenterCrop([256, 256]) | 从图像中心裁剪出指定大小的区域。通常在随机旋转等可能改变图像边界的操作后,用于得到固定大小的输入。 | size : 裁剪的目标尺寸。 | |
transforms.RandomHorizontalFlip(p=0.5) | 以给定概率随机水平翻转图像。这是非常常用且有效的增强方式,能提供图像的镜像视角。 | p : 翻转概率,默认为0.5。 | |
transforms.RandomVerticalFlip(p=0.5) | 以给定概率随机垂直翻转图像。适用于上下对称的物体或场景。 | p : 翻转概率,默认为0.5。 | |
transforms.ColorJitter(...) | 随机改变图像的亮度、对比度、饱和度和色调。模拟不同光照、摄像头等造成的颜色差异。 | brightness , contrast , saturation , hue : 调整的幅度范围。 | |
transforms.RandomGrayscale(p=0.1) | 以一定概率将图像转换为灰度图。迫使模型不过度依赖颜色信息,关注形状和纹理特征。 | p : 转换概率。 | |
transforms.ToTensor() | 转换格式。将PIL图像或NumPy数组转换为PyTorch张量(Tensor),并将像素值从[0, 255]归一化到[0, 1]。 | 这是后续操作(如Normalize)的基础。 | |
transforms.Normalize(...) | 标准化。用均值和标准差对每个通道进行标准化,使数据分布更稳定,加速模型收敛。 |
在训练上,如果我们们每次进行一轮数据进行训练,数据都是不一样,所以这里我们的训练准确率会一直增加,但是一开始我们的准确率比较低,但是这个准确率比我们不增强数据的上限要高。