一 概述
torchvision包主要由3个子包组成:
- torchvision.datasets:可以用来生成图片和视频数据集;
- torchvision.models:导入预训练模型 ;
- torchvision.transforms: 图像预处理。
其中 torchvision.transforms中有三大类:
1.裁剪
- 中心裁剪:transforms.CenterCrop
- 随机裁剪:transforms.RandomCrop
- 随机长宽比裁剪:transforms.RandomResizedCrop
- 上下左右中心裁剪:transforms.FiveCrop
- 上下左右中心裁剪后翻转,transforms.TenCrop
————————————————
2.翻转
- 依概率p水平翻转:transforms.RandomHorizontalFlip(p=0.5)
- 依概率p垂直翻转:transforms.RandomVerticalFlip(p=0.5)
- 随机旋转:transforms.RandomRotation
————————————————
3.变换
- 标准化:transforms.Normalize
- 填充:transforms.Pad
- 修改亮度、对比度和饱和度:transforms.ColorJitter
- 转灰度图:transforms.Grayscale
- 线性变换:transforms.LinearTransformation()
- 仿射变换:transforms.RandomAffine
- 依概率p转为灰度图:transforms.RandomGrayscale
- 将数据转换为PILImage:transforms.ToPILImage
二 实操
示例图片:(300, 500, 4)
加载图像
import matplotlib.pyplot as plt
from PIL import Image
path = "E:\\test\\h9.png"
# 加载图片
img = Image.open(path)
# 将图片格式转为np.array
img_arr = np.array(img)
# 显示图片
plt.imshow(img_arr)
plt.show()
1 裁剪(Crop)
1.1 随机裁剪:transforms.RandomCrop
torchvision.transforms.RandomCrop(size,padding = None,\
pad_if_needed = False,fill = 0,padding_mode ='constant' )
- size(sequence/int) - 输出大小。
如果size是int而不是像(h,w)这样的序列,则进行正方形裁剪。
- padding(int/sequence,optional) - 对图像每个边框上进行填充。可选。
默认值为None,即无填充。
如果提供长度为4的序列(1,2,3,4),则分别填充左1,上2,右3,下4的边界。
如果提供长度为2的序列(1,2),则分别用于填充左/右1,上/下2的边界。
- pad_if_needed(boolean) - 如果小于输出大小,填充自动图像以避免引发异常。
- fill - 恒定填充的像素填充值。
默认值为0。
如果长度为3的元组,则分别用于填充R,G,B通道。仅当padding_mode为常量时才使用此值。
- padding_mode-填充类型。
恒定,边缘,反射或对称。默认值是常量。
常量:具有常量值的焊盘,该值用填充指定
edge:填充图像边缘的最后一个值
反射:具有图像反射的垫(不重复边缘上的最后一个值),填充[1,2,3,4]在反射模式下两侧有2个元素将导致[3,2,1,2,3,4,3,2]
对称:具有图像反射的垫(重复边缘上的最后一个值),填充[1,2,3,4]在对称模式下两侧有2个元素将导致[2,1,1,2,3,4,4,3]
1.2 中心裁剪:transforms.CenterCrop
torchvision.transforms.CenterCrop(size)
- size(sequence/int) - 输出大小。
如果size是int而不是像(h,w)这样的序列,则进行正方形裁剪。
1.3 随机长宽比裁剪 transforms.RandomResizedCrop
torchvision.transforms.RandomResizedCrop(size, scale=(0.08, 1.0),/
ratio=(0.75, 1.3333333333333333), /
interpolation=2)
- size - 每条边的预期输出大小
- scale - 裁剪的原始尺寸的大小范围
- ratio - 裁剪的原始宽高比的宽高比范围
- interpolation - 默认值:PIL.Image.BILINEAR
1.4 上下左右中心裁剪:transforms.FiveCrop
torchvision.transforms.FiveCrop(size)
- size(sequence/int) - 输出大小。
如果size是int而不是像(h,w)这样的序列,则进行正方形裁剪。
对图片进行上下左右以及中心裁剪,获得5张图片,返回一个4D-tensor 参数
1.5 上下左右中心裁剪后翻转: transforms.TenCrop
torchvision.transforms.TenCrop(size, vertical_flip=False)
- size(sequence/int) - 输出大小。
如果size是int而不是像(h,w)这样的序列,则进行正方形裁剪。
- vertical_flip(bool) - 使用垂直翻转而不是水平翻转。
2 翻转予旋转(Flip or Rotation)
2.1 依概率p水平翻转transforms.RandomHorizontalFlip
torchvision.transforms.RandomHorizontalFlip(p=0.5)
- p- 概率,默认值为0.5
以给定的概率随机水平翻转图像。