transforms——图像变换

1、Pad

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

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

  • padding:设置填充大小
  • 当为a时,上下左右均填充a个像素
  • 当为(a,b)时,上下填充b个像素,左右填充a个像素
  • 当为(a,b,c,d)时,左上右下分别填充a,b,c,d
  • padding_mode:填充模式,有4种模式,constant、edge、reflect和symmetric
  • fill:constant时,设置填充的像素值,(R,G,B)or(Gray)

2、ColorJitter

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

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

  • brightness: 亮度调整因子
    当为a时,从[max(0, 1-a), 1+a]中随机选择
    当为(a,b)时,从[a,b]中随机选择
  • contrast:对比度参数,同brightness
  • saturation:饱和度参数,同brightnes
  • hue:色相参数,当为a时,从[-a, a]中选择参数,注:0<=a<=0.5
    当为(a, b)时,从[a,b]中选择参数,注:-0.5<=a<=b<=0.5

3、Grayscale

4、RandomGrayscale

RandomGrayscale(num_output_channels, p=0.1)
Grayscale:(num_output_channels)

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

  • num_output_channels:输出通道数只能设1或3
  • p:概率值,图像被转换为灰度图的概率

5、RandomAffine

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

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

  • degrees:旋转角度设置
  • translate:平移区间设置,如(a,b),a设置宽(width),b设置高(height)图像在宽维度平移的区间为 -img_width * a < dx <img_width * a
  • scale:缩放比例(以面积为单位)
  • fill_color: 填充颜色设置
  • shear: 错切角度设置,有水平错切和垂直错切。若为a,则仅在x轴错切,错切角度在(-a,a)之间,若为(a,b)则a设置x轴角度,b设置y轴的角度,若为(a,b,c,d),则a,b设置x轴角度,c,d设置y轴角度
  • resample: 重采样方式,有NEAREST,BILINEAR,BICUBIC

6、RandomErasing

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)or(Gray)

transforms.Lambda

transforms.Lambda(lambd)

功能:用户自定义lambda方法

  • lambd:lambda匿名函数
    lambda[arg1[, arg2, …, argn]]:expression

transforms——transforms方法操作

transforms.RandomChoice

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

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

transforms.RandomApply

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

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

transforms.RandomOrder

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

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

自定义transforms方法

自定义transforms要素:

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

1、仅接收一个参数,返回一个参数
2、注意上下游的输出与输入,当前transforms的输入是上一个transforms的输出,所以要注意数据类型的匹配

通过类实现多参数传入:

class YourTransforms(object):
	def __init__(self, ...):
		...
	def __call__(self, img):
		...
		return img

椒盐噪声

椒盐噪声又称为脉冲噪声,是一种随机出现的白点或者黑点,白点称为盐噪声,黑色为椒噪声

信噪比(Signal-Noise Rate, SNR)是衡量噪声的比例,图像中为图像像素的占比

pytorch自行编译 pytorch自定义transform_灰度图

class AddPepperNoise(object):
	def __init__(self, snr, p):
		assert isinstance(snr, float) or (isinstance(p, float))
		self.snr = snr
		self.p = p
		
	def __call__(self, img):
		'''
		Args:
			img(PIL Image):PIL Image
		Returns:
			PIL Image: PIL Image
		'''
		if random.uniform(0, 1) < self.p:
			img_ = np.arrayZ(img).copy()
			h, w, c = img.shape
			signal_pct = self.snr
			noise_pct = (1 - self.snr)
			mask = np.random.choice((0, 1, 2), size=(h, w, 1), p=[sigmal_pct, noise_pct])
			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
		
		return img

pytorch自行编译 pytorch自定义transform_pytorch自行编译_02

数据增强实战

原则: 让训练集与测试集更接近

  • 空间位置:平移
  • 色彩:灰度图,色彩抖动
  • 形状:仿射变换
  • 上下文场景:遮挡,填充