转载自https://blog.csdn.net/Hansry/article/details/84071316,感谢原作者辛苦付出,仅作笔记之用,侵删
Transfoms 是很常用的图片变换方式,可以通过compose
将各个变换串联起来
1. class torchvision.transforms.Compose (transforms)
这个类将多个变换方式结合在一起
参数:各个变换的实例对象
举例:
transforms.Compose([
transforms.CenterCrop(10),
transforms.ToTensor(),
])
1.class torchvision.transforms.CenterCrop(size)
剪切并返回PIL图片上中心区域
参数:size (序列或者整型) — 输出的中心区域的大小。如果输入的size是整型而不是类似于 (h,w)的序列,那么将会转成类似(size, size)的序列。
2.class torchvision.transforms.ColorJitter(brightness=0, contrast=0, saturation=0, hue=0)
随机改变图片的亮度、对比度和饱和度
参数:
对比度: 对比度指不同颜色之间的差别。对比度越大,不同颜色之间的反差越大,所谓黑白分明,对比度过大,图像就会显得很刺眼。对比度越小,不同颜色之间的反差就越小。
亮度: 亮度是指照射在景物或者图像上光线的明暗程度,图像亮度增加时,会显得刺眼或耀眼,亮度越小,会显得灰暗。
色相: 色相就是颜色,调整色相就是调整景物的颜色。
饱和度: 饱和度指图像颜色的浓度。饱和度越高,颜色越饱满,所谓的青翠欲滴的感觉。饱和度越低,颜色就会越陈旧,惨淡,饱和度为0时,图像就为灰度图像。
3. class torchvision.transforms.FiveCrop(size)
将给定的PIL图像剪裁成四个角落区域和中心区域
注意: 这个变换返回的是一个图像元组(tuple of images), 因此其输出跟输出的数量会不匹配。
参数: size(序列或者整型) —— 需要返回的剪裁区域的尺寸。如果输入的是整型,那么会被转成(size,size)序列。
例子:
transform = Compose([
FiveCrop(size),
Lambda(lambda crops:torch.stack([ToTensor()(crop) for crop in crops])) #return a 4D tensor
])
#in your test loop you can do the following:
input ,target = batch #input is a 5d tensor, target is 2d
bs, ncrops,c ,h ,w = input.size()
result = model(input.view(-1,c,h,w)) #fuse batch size and ncrops 转成(bs*ncrops, c, h , w)
result_avg = result.view(bs, ncrops, -1).mean(1) #avg over crops 转成(bs,ncrops, c*h*w)
4. class torchvision.transforms.Grayscale(num_output_channels=1)
将图片转成灰度图
参数: num_output_channels(int) —— (1或者3),输出图片的通道数量
返回: 输入图片的灰度图,如果num_output_channels=1, 返回的图片为单通道. 如果 num_output_channels=3, 返回的图片为3通道图片,且r=g=b
返回类型:PIL图片类型
5. class torchvision.transforms.Pad(padding, fill=0, padding_mode=‘constant’)
对给定的PIL图像的边缘进行填充,填充的数值为给定填充数值
参数:
6. class torchvision.transforms.RandomAffine(degrees, translate=None, scale=None)
保持中心不变的对图片进行随机仿射变化
参数:添加链接描述
7.torchvision.transforms.RandomApply(transforms, p=0.5)
随机选取变换中(各种变换存储在列表中)的其中一个,同时给定一定的概率
参数:
变换(list或者tuple) —— 转换的列表
p (float 类型) —— 概率,选取某个变化需要的概率
8.transforms.RandomSizedCrop() RandomApply() RandomChoice() RadomCrop RamdomGrayscale() RamdomHorizontalFlip(p=0.5) RamdomRotation() … 还有各种Random,详细请查看torch.transforms
9.torchvision.transforms.Resize(size,interpolation=2)
将输入的PIL图片转换成给定的尺寸的大小
参数:
1. class torchvision.transforms.Normalize(mean,std)
用均值和标准差对张量图像进行标准化处理。给定n通道的均值(M1, … , Mn) 和标准差(S1, … ,Sn), 这个变化将会归一化根据均值和标准差归一化每个通道值。例如,input[channel] = (input[channel]-mean[channel])/std(channel)
参数:
__call__(tensor) 参数:tensor(Tensor) , 尺寸为(C,H,W)的图片将会被归一化 ; 返回:归一化后的Tensor类型图片 ; 返回类型:Tensor
1. class torchvision.transforms.ToPILImage(mode=None)
将tensor类型或者ndarray转换成PIL图片
将 CxHxW大小的torch.*Tensor或者HxWxC 大小的numpy 矩阵转成PIL图片
参数:如果model为None,那么如果输入有三个通道,那么mode为RGB; 如果input有4个通道,mode为RGBA. 如果输入是1通道,mode为数据类型,如int, float, short
__call__(pic) 参数:pic (Tensor或者numpy.ndarray类型的) —— 转换成PIL图片; 返回PIL图片; 返回类型为PIL类型
2. torchvision.transforms.ToTensor
将PIL图片或者numpy.ndarray转成Tensor类型的
将PIL图片或者numpy.ndarray(HxWxC) (范围在0-255) 转成torch.FloatTensor (CxHxW) (范围为0.0-1.0)
__call__(pic) 参数:pic(PIL图片或者numpy.ndarray) —— 将图片转成向量; 返回Tensor类型的图片
1. torchvision.transforms.Lambda(lambd)
使用用户定义的lambda作为转换
参数:lambd(function) —— 用Lambda/funtion 作为变换
2. torchvision.transforms.functional.adjust_brightness(img, brightness_factor)
调整图片的亮度
参数:
3.torchvision.transforms.functional.adjust_contrast(img,contrast_factor)
调整图片的对比度
参数:
4. torchvison.transforms.function.adjust_gamma(img, gamma, gain=1)
对图片进行gamma校正,gamma校正详情
I o u t = 255 ∗ g a i n ∗ ( I i n / 255 ) γ I o u t = 255 ∗ g a i n ∗ ( I i n / 255 ) γ I o u t = 255 ∗ g a i n ∗ ( I i n / 255 ) γ Iout=255∗gain∗(Iin/255)γIout=255∗gain∗(Iin/255)γ I_{out}=255*gain*(I_{in}/255)^{\gamma} Iout=255∗gain∗(Iin/255)γIout=255∗gain∗(Iin/255)γIout=255∗gain∗(Iin/255)γγ也是非零实数。gamma大于1使得阴影部分更暗,gamma小于1使得暗的区域亮些。
5.torchvision.transforms.functional.ajust_hue (img,hue_factor)
调整图片的色相
通过将图像转换为HSV来调整图像的色调,并在色调通道(H)中循环移动强度,然后将图像转换回原始图像模式。
色相因子是H通道平移量,其必须在区间[-0.5,0.5]中。
参数
5. tochvision.transforms.functional.adjust_saturation(img, hue_factor)
调整图片的颜色饱和度
参数:
6. torchvision.transforms.functional.affine(img, angle, translate, scale, shear, resample=0, fillcolor=None)
对图片进行放射变换,保持中心不变。
参数:
7.torchvision.transforms.functional.crop(img,i,j,h,w)
剪裁给定的PIL图片
参数:
8. torchvision.transforms.functional.normalize(tensor, mean, std)
根据给定的标准差和方差归一化tensor图片
参数:
9.
torchvision.transforms.functional.pad(img, padding, fill=0, padding_mode=‘constant’)、torchvision.transforms.functional.resize(img, size, interpolation=2)、
torchvision.transforms.functional.rotate(img, angle, resample=False, expand=False, center=None)、torchvision.transforms.functional.to_grayscale(img, num_output_channels=1)
等均与上述函数类似,这里不再重复。
10.
torchvision.transforms.functional.to_pil_image(pic, mode=None) 将tensor或者numpy.ndarray转成PIL图片
torchvision.transforms.functional.to_tensor(pic) 将PIL图片或者numpy.ndarray转成tensor
参考:
https://pytorch.org/docs/master/torchvision/transforms.html?highlight=torchvision%20transforms