pytorch(09)transform模块(基础)

transforms

  1. transforms运行机制
    torchvision.transforms:常用的图像预处理方法
    torchvision.datasets:常用数据及的dataset实现,mnist,cifar-10,imagenet等
    torchvision.model:常用的模型与训练,AlexNet,VGG,ResNet,GoogLeNet等
    torchvision:计算机视觉工具包

我们对图片进行预处理的图像增强,主要就是增加图片的泛化能力,丰富训练数据。
泛化能力(generalization ability)是指机器学习算法对新鲜样本的适应能力。学习的目的是学到隐含在数据背后的规律,对具有同一规律的学习集以外的数据,经过训练的网络也能给出合适的输出,该能力称为泛化能力。

  1. 数据标准化——transform.normalize
    transforms.Normalize(mean,std,inplace=False)
    逐channel对图像进行标准化
    output = (input - mean) / std
  • mean:各通道的均值
  • std:各通道的标准差
  • inplace:是否原地操作数据标准化的目的:
    在于标准化后能够使整体数据样本接近于0,在进行sigmoid激活函数时候能够发现收敛速度更快

transforms ——裁剪

  1. crop 裁剪
    transforms.CenterCrop,从图像中心裁剪图片,size(所需要的裁剪图片尺寸)
from PIL import Image
from torchvision import transforms
x_img = Image.open("paper.jpg").convert('RGB')
x_img = transforms.CenterCrop((88, 10))(x_img)
x_img.show()
  1. RandomCrop
    transforms.RandomCrop(size,padding=None,pad_if_needed=False,fill=0,padding_mode='constant')
  • size:尺寸
  • padding:设置填充大小
    当为a时,上下左右均填充a个像素
    当为(a,b)时,上下填充b个像素,左右填充a个像素
    当为(a,b,c,d)时,左上右下分别填充a,b,c,d
  • pad_if_need:若图像小于设定size,则填充
  • padding_mode:填充模式,有四种:
    1. constant:像素值由fill设定
    2. edge:像素值由图像边缘像素决定
    3. reflect:镜像填充,最后一个像素不镜像,eg:[1,2,3,4]->[3,2,1,2,3,4,3,2]
    4. symmetric:镜像填充,最后一个像素镜像,eg:[1,2,3,4]->[2,1,1,2,3,4,4,3]
  • fill:constant时,设置填充的像素值
flag = True
# flag = False
if flag:
    x_img = Image.open("face.jpg").convert('RGB')
    x_img = transforms.RandomCrop((900,200), padding=100, fill=(255,0,0))(x_img) # 如果裁剪像素大于原始,则需要进行pad_if_needed
    x_img.show()
  1. RandomResizedCrop
    随机大小、长宽比裁剪图片
    RandomResizedCrop(size,scale=(0.08,1.0),ratio=(3/4,4,3),interpolation)
  • scale:随机裁剪面积比例,默认(0.08, 1)
  • ratio:随机长宽比,默认(3/4,4/3)
  • interpolation:插值方法
    PIL.Image.NEAREST
    PIL.Image.BILINEAR
    PIL.Image.BICUBIC
flag = True
# flag = False
if flag:
    x_img = Image.open("paper.jpg").convert('RGB')
    x_img = transforms.RandomResizedCrop((400,200),scale=(0.5,1.0),
                                         ratio=(3./4,4./3),
                                         interpolation=0)(x_img)
    x_img.show()
  1. FiveCrop
# ===================04 FiveCrop=================
flag =True
# flag = False
if flag:
    x_img = Image.open("face.jpg").convert('RGB')
    x_img1, x_img2, x_img3, x_img4, x_img5 = transforms.FiveCrop((300,300))(x_img)
    x_img2.show()
  1. TenCrop
    在图像的上下左右以及中心裁剪出尺寸为size的5张图片,TenCrop对这5张图片进行水平或者垂直镜像获得10张图片
  • size:所需裁剪图片尺寸
  • vertical_flip:是否垂直翻转
# ===================05 TenCrop=================
flag =True
# flag = False
if flag:
    x_img = Image.open("face.jpg").convert('RGB')
    x_img1, x_img2, x_img3, x_img4, x_img5 \
        ,x_img6 ,x_img7,x_img8,x_img9,x_img10= transforms.TenCrop((300,300),vertical_flip=True)(x_img)
    x_img7.show()

transforms——翻转、旋转

  1. transforms flip
    1. RandomHorizontalFlip
    2. RandomVerticalFilp
# ===================06 Flip=================
flag = True
# flag = False
if flag:
    x_img = Image.open("face.jpg")
    x_imgd = transforms.RandomVerticalFlip(p=1)(x_img)
    plt.imshow(x_imgd)
    plt.show()
  1. RandomRoatation
    随机旋转图片
    RandomRotation(degress, resample=False, expand=False, center=None)
  • degress:旋转角度
    为a时,在(-a,a)之间选择旋转角度
    为(a,b)时,在(a,b)之间选择旋转角度
  • resample:重采样方法
  • expand:是否扩大图片,保持原图信息
# ===================07 Rotation==============
flag = True
# flag = False
if flag:
    x_img = Image.open("face.jpg")
    x_imgd = transforms.RandomRotation(60, resample=Image.BILINEAR, expand=True, center=(40,80))(x_img)
    x_imgd.show()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值