pytorch学习笔记(5)transforms 一定坚持学完啊!!

torchvision.transforms:常用的图像预处理方法

1.数据中心化
2.数据标准化
3.缩放
4.裁剪
5.旋转
6.翻转
7.填充
8.噪声添加
9.灰度变换
10.线性变换
11.仿射变换
12.亮度、饱和度以及对比度变换

1.transforms.Normalize()图片标准化

transforms.Normalize(
mean,各通道均值
std,各通道标准差
inplace 是否原地操作
)

2.transforms.CenterCrop() 从图像中心裁剪

transforms.CenterCrop(  从图像中心裁剪图片
size  所需裁剪图片尺寸
)

3.transforms.RandomCrop()

transforms.RandomCrop(
size, 所需裁剪的图片尺寸
padding, 填充设置 当为a时 四周都为a ;为(a,b)时,上下为a左右为b ;(a,b,c,d)表示上下左右
pad_if_needed, 若图像小于设定的size时需要填充
fill, constant时 设置填充的像素值
padding_mode='constant' 
1.constant 像素值由fill设定
2.edge 像素值由图像边缘像素决定
3.reflect:镜像填充,最后一个像素不镜像  1 2 3 4 -> 3 2 1 2 3 4 3 2
4.symmetric:镜像填充,最后一个像素镜像   1 2 3 4 ->2 1 1 2 3 4 4 3
)

4.RandomResizedCrop()

RandomResizedCrop(
size,  所需裁剪图片的尺寸
scale=(0.08,1.0) 随机裁剪面积比例 默认是0.08*1
ratio=(3/4,4/3) 随机长款比例 默认是3/4/4/3
interpolation,插值法
  plt.image.NEARST 最近邻
  plt.image.BILNEAR 双线性
  plt.image.BICUBIC
)

5.FiveCrop(size):在图像的上下左右以及中心裁剪出尺寸为size的5张图片

6.TenCrop()对这五张图片进行水平垂直镜像获得10张照片

TenCrop( TenCrop对这五张图片进行水平垂直镜像获得10张照片
size,
vertical_flip=False  是否进行垂直翻转
)

翻转1.RandomHorizontalFilp(p=0.5)

翻转2.RandomVerticalFlip(p=0.5)

p:翻转概率

翻转3.RandomRotation

RandomRotation(
degrees, 旋转角度 当为a时 在(-a,a)之间选择旋转角度 ;为(a,b)时,在(a,b)之间选择旋转角度
resample, 重采样方法
expand, 是否扩大图片,以保持原图信息
center 设置旋转点 默认为中心点
)

1.transforms.Pad()像素的填充

transforms.Pad{
padding,设置填充大小 当为a时 上下左右都是a 
fill=0, 设置填充像素值
padding_mode='constant'  填充模式 constant edge reflect symmetric
}

2.transforms.ColorJitter()图像色彩填充

transforms.ColorJitter{
brightness=0, 亮度调整因子 为(a,b)时 从[a,b]中随机选择 为a时,从[max(0,1-a),1+a]
constrast=0, 对比度参数
saturation=0, 饱和度参数
hue=0 色相参数 当为a时,从[-a,a]中选择,当为(a,b)时,从[a,b]中选择 a b的范围为
[-0.50.5]
}

3.RandomGrayscal() Grayscal()转为灰度图

RandomGrayscal(
num_output_channels,输出的通道数只能设置为13
p=0.1
)

4.RandomAffine()仿射变换

RandomAffine(
degrees,旋转角度设置
translate=None,平移区间设置 范围时0-1
scale=None,缩放比例设置
fill_color=0,填充颜色设置
shear=None,错且角度 
resample=False 重采样
)

5.RandomErasing()对图像进行随机遮挡

RandomErasing(
p=0.5,
scale=(0.02,0.33) 遮挡区域的面积
ration=(0.3,3.3) 遮挡区域长宽比
value=0,遮挡的像素值
inplace=False
)

6.transforms.Lambda()

lambda[arg1,arg2....]:expression

例子:
transforms.TenCrop(200,vertical_filp=True)

transforms.Lambda(lambda crops:torch.stack([transforms.Totensor()(crop) for crop in crops])

对transforms的选择操作

1.从一系列transforms方法中随机挑选一个transforms.RandomChoic([transform1,transform2,transforms3])

2.依据概率执行一组transforms操作

transforms.RandomApply([transform1,transform2,transforms3],p=0.5)

3.对一组transforms操作打乱顺序

transforms.RandomOrder([transform1,transform2,transforms3])

自定义transforms

1.仅接受一个参数,返回一个参数
2.注意上下游的输出与输入

通过类实现多参数输入


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

以椒盐噪声为例:
信噪比是衡量噪声的比例

class AddPepperNoise(object):

     def __init__(self,snr,p): snr 信噪比 P概率
        self.snr=snr
        self.p=p
     def __call__(self,img):
       ...
       具体实现和过程
       ...
       return img

你可能感兴趣的:(pytorch学习笔记)