欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 时评 > DAY06:【pytorch】图像增强

DAY06:【pytorch】图像增强

2025/4/16 10:27:42 来源:https://blog.csdn.net/CH3_CH2_CHO/article/details/147126077  浏览:    关键词:DAY06:【pytorch】图像增强

1、基本概念

数据增强,又称数据增广、数据扩增,是对训练集进行变换,使训练集更丰富,从而让模型更具泛化能力

2、裁剪 — — Crop

2.1 transforms.CenterCrop

功能:从图像中心裁剪图片

  • size:所需裁剪图片尺寸

2.2 transforms.RandomCrop

# transforms.RandomCrop(
#     size,
#     padding=None,
#     pad_if_needed=False,
#     fill=0,
#     padding_mode='constant',
# )

功能:从图片中随机裁剪出尺寸为 size 的图片

  • size:所需裁剪图片尺寸

  • padding:设置填充大小

    • 为 a 时,上下左右均填充 a 个像素
    • 为 (a, b) 时,上下填充 b 个像素,左右填充 a 个像素
    • 为 (a, b, c, d) 时,左、上、右、下分别填充 a,b,c,d 个像素
  • pad_if_need:若图像小于设定的 size,则填充

  • padding_mode:填充模式,有4种模式

    1. constant:像素值由 fill 设定
    2. edge:像素值由图像边缘像素决定
    3. reflect:镜像填充,最后一个像素不镜像
    4. symmetric:镜像填充,最后一个像素要镜像
  • fill:为 constant时,设置填充的像素值

2.3 RandomResizedCrop

# transforms.RandomResizedCrop(
#     size,
#     scale=(0.08, 1.0),
#     ratio=(3/4, 3/4),
#     interpolation
# )

功能:随机大小、长宽比裁剪图片

  • size:所需裁剪图片尺寸

  • scale:随机裁剪面积比例,默认为(0.08, 1.0)

  • ratio:随机长宽比,默认为(3/4, 4/3)

  • interpolation:插值方式,默认为PIL.Image.BILINEAR

    • PIL.Image.NEAREST:最近邻近插值
    • PIL.Image,BILINEAR:双线性插值
    • PIL.Image.BICUBIC:三次样条插值
    • PIL.Image.LANCZOS:兰索斯插值
    • PIL.Image.HAMMING:汉明码插值
    • PIL.Image.BOX:盒插值

2.4 FiveCrop

# transforms.FiveCrop(
#     size
# )

2.5 TenCrop

# transforms.TenCrop(
#     size,
#     vertical_flip=False,
# )

功能:在图像的上下左右以及中心裁剪出尺寸为 size 的图片,TenCrop 对5张图片进行水平或垂直镜像获得10张图片

  • size:所需裁剪图片的尺寸
  • vertical_flip:是否进行垂直镜像

3、翻转 — — Flip

3.1 RandomHorizontalFlip

# transforms.RandomHorizontalFlip(
#     p=0.5
# )

3.2 RandomVerticalFlip

# transforms.RandomVerticalFlip(
#     p=0.5
# )

功能:依概率水平(左右)或垂直(上下)翻转图片

  • p:翻转概率,默认为0.5

3.3 RandomRotation

# transforms.RandomRotation(
#     degrees,
#     resample=False,
#     expand=False,
#     center=None
# )

功能:随机翻转图片

  • degree:旋转角度

    • 为 a 时,在 (-a, a) 之间选择旋转角度
    • 为 (a, b) 时,在 (a, b) 之间选择旋转角度
  • resample:重采样方法

  • expand:是否扩大图片,以保持原图信息

  • center:旋转点设置,默认为图像中心

4、图像变换

4.1 Pad

# transforms.Pad(
#     padding,
#     fill=0,
#     padding_mode='constant'
# )

功能:对图片边缘进行填充

  • padding:设置填充大小

    • 为 a 时,上下左右均填充 a 个像素
    • 为 (a, b) 时,上下填充 a 个像素,左右填充 b 个像素
    • 为 (a, b, c, d) 时,分别填充上、下、左、右的 a,b,c,d 个像素
  • padding_mode:填充模式

    • constant:常数填充
    • edge:边缘填充,即边缘像素会被重复
    • reflect:镜像填充,即边缘像素会被镜像到对称位置
    • symmetric:对称填充,即边缘像素会被镜像到对称位置,最后一个镜像也会镜像
  • fill:为 constant 时,设置填充像素值,(R, G, B) 或 (Gray)

4.2 ColorJitter

# transforms.ColorJitter(
#     brightness=0,
#     contrast=0,
#     saturation=0,
#     hue=0
# )

功能:调整亮度、对比度、饱和度和色相

  • brightness:亮度调整因子

    • 为 a 时,从 [max(0, 1-a), 1+a] 中随机选择
    • 为 (a, b) 时,从 [a, b] 中随机选择
  • constrast:对比度参数,同 brightness

  • saturation:饱和度参数,同 brightness

  • hue:色相参数

    • 为 a 时,从 [-a, a] 中随机选择,且 a 的取值范围为 [0, 0.5]
    • 为 (a, b) 时,从 [a, b] 中随机选择,且 a、b 的取值范围为 [0, 0.5]

4.3 GrayScale

# transforms.Grayscale(
#     num_output_channels=1
# )

4.4 RandomGradeCrop

# transforms.RandomGrayscale(
#     num_output_channels=1,
#     p=0.1
# )

功能:依概率将图片转换为灰度图

  • num_outpuut_channels:输出通道数,1表示灰度图,3表示 RGB 彩色图
  • p:概率,0.5表示将图片转换为灰度图的概率为 50%

4.5 RandomAffine

# transforms.RandomAffine(
#     degrees,
#     translate=None,
#     scale=None,
#     shear=None,
#     resample=False,
#     fillcolor=0
# )

功能:对图像进行仿射变换,仿射变换是二维的线性变换,由五种基本原子变换构成,分别是旋转、平移、缩放、错切、剪切

  • degrees:旋转角度设置

  • translate:平移区间设置

    • 为 (a, b) 时,表示 x 轴和 y 轴的平移范围均为 [-a, b]
    • 为 (a, b, c, d) 时,表示 x 轴平移范围为 [-a, b],y 轴平移范围为 [-c, d]
  • scale:缩放比例(以面积为单位)

  • fillcolor:填充色设置

4.6 RandomErasing

# transforms.RandomErasing(
#     p=0.5,
#     scale=(0.02, 0.33),
#     ratio=(0.3, 3.3),
#     value=0,
#     inplace=False
# )

功能:对图像进行随机遮挡

  • p:概率值,执行该操作的概率
  • scale:遮挡区域的面积
  • ratio:遮挡区域长宽比
  • value:设置遮挡区域的像素值,(R, G, B) 或 (Gray),默认为0

4.7 Lamdba

# transforms.Lambda(
#     lambda
# )

功能:用户自定义 lamdba 方法

  • lambda:匿名函数,可以把函数作为参数传递给另一个函数

5、方法选择

5.1 transforms.RandomChoice

# transforms.RandomChoice(
#     [transforms1, transforms2, transforms3]
# )

功能:从一系列 transforms 方法中随机挑选一个

5.2 transforms.RandomApply

# transforms.RandomApply(
#     [transforms1, transforms2, transforms3],
#     p=0.5
# )

功能:依概率执行一组 transforms 操作

5.3 transforms.RandomOrder

# transforms.RandomOrder(
#     [transforms1, transforms2, transforms3]
# )

功能:对一组 transforms 操作打乱顺序

6、自定义

# class Compose(object):
#     def __call__(self, img):
#         for t in self.transforms:
#             img = t(img)
#         return img

二要素:

  1. 仅接受一个参数,返回一个参数
  2. 注意上下游的输出和输入
# 通过继承类,实现多参数传入
# class YourTransform(object):
#     def __init__(self, ...):
#         ...#     def __call__(self, img):
#         ...
#         return img

示例 — — 椒盐噪声:

  1. 概念:椒盐噪声,又称脉冲噪声,是一种随机出现的白点或者黑点,白点称为盐噪声,黑点称为椒噪声。
  2. 产生原因:椒盐噪声的产生是由于光照不均匀导致的。光线经过物体时,某些部分会被吸收,而另一些部分会被反射,产生了椒噪声和盐噪声。椒噪声的大小与光照强度成正比,盐噪声的大小与物体表面粗糙度成正比。椒盐噪声的产生是随机的,并不是均匀分布的。
  3. 解决方法:椒盐噪声的解决方法有两种:一是采用白盒处理,即对图像进行预处理,去除椒盐噪声;二是采用白盒处理,采用数据增强的方法,对图像进行数据增强,增加椒盐噪声。
  4. 信噪比:信噪比(SNR)是指信号与噪声的比值,即信噪比越高,则噪声的影响越小,信号的影响越大。信噪比越高,图像的质量越好。
class AddPepperNoise(object):"""增加椒盐噪声Args:snr (float): Signal Noise Ratep (float): 概率值,依概率执行该操作"""def __init__(self, snr, p=0.9):assert isinstance(snr, float) or (isinstance(p, float))self.snr = snrself.p = pdef __call__(self, img):"""Args:img (PIL Image): PIL ImageReturns:PIL Image: PIL image."""if random.uniform(0, 1) < self.p:img_ = np.array(img).copy()h, w, c = img_.shapesignal_pct = self.snrnoise_pct = (1 - self.snr)mask = np.random.choice((0, 1, 2), size=(h, w, 1), p=[signal_pct, noise_pct/2., noise_pct/2.])mask = np.repeat(mask, c, axis=2)img_[mask == 1] = 255   # 盐噪声img_[mask == 2] = 0     # 椒噪声return Image.fromarray(img_.astype('uint8')).convert('RGB')else:return img

微语录:自己有了光芒才配得上自己追逐的星星。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词