基于pytorch的数据预处理

1. 前言

    很多基于Pytorch的工具集都非常好用,比如处理图像视频的torchvision、处理音频的torchaudio、以及处理自然语言的torchtext,详见pytorch官网教程
在这里插入图片描述

    这里介绍的处理图像视频的torchvision参考官网包含6个模块:

  • torchvision.datasets
  • torchvision.io
  • torchvision.models
  • torchvision.ops
  • torchvision.transforms
  • torchvision.utils

其中torchvision.transforms提供了常用的图像操作,例如随机切割、旋转、数据类型转换、tensor与numpy 和PIL Image的互换等

2. 功能介绍

    torchvision.transforms模块按照功能,可分为以下几个部分,所有转换均可用torchvision.transforms.Compose() 来组合。
在这里插入图片描述

2.1 Transforms on PIL Image only

  • Resize:把给定的图片resize到给定的尺寸。
  • ToPILImage: 将torch.tensor 转换为PIL图像。
  • CenterCrop:以输入图的中心点为中心做指定size的裁剪操作。
  • RandomCrop:以输入图的随机位置为中心做指定size的裁剪操作。
  • RandomHorizontalFlip:随机水平翻转给定的PIL.Image,概率为0.5。即:一半的概率翻转,一半的概率不翻转。
  • RandomVerticalFlip:随机垂直翻转给定的PIL.Image,概率为0.5。
  • RandomResizedCrop:将给定图像随机裁剪为不同的大小和宽高比,然后再resize成给定的size大小。
  • Grayscale:将给定图像转换为灰度图像。
  • RandomGrayscale:将图像以指定的概率转换为灰度图像。
  • FiveCrop: 从一张输入图像中裁剪出5张指定size的图像,包括4个角的图像和一个中心。
  • TenCrop:剪出10张指定size的图像。做法是在FiveCrop的基础上,再将输入图像进行水平或竖直翻转,然后进行FiveCrop操作,这样一张图像可得到10张crop图像。
  • Pad:将给定的PIL.Image的所有边用给定的pad value填充。
  • ColorJitter:修改图像的亮度,对比度,饱和度和色度。
  • Lambda:做其参数指定的变换。

2.2 Conversion Transforms

PIL.Image/numpy.ndarray与Tensor的相互转换。

from torchvision import transforms

transform1 = transforms.Compose([
    transforms.ToTensor() #PIL Image/ndarray (H,W,C) [0,255] to tensor (C,H,W) [0.0,1.0]
    ]) 

一般我们加载的数据,RGB的值范围是[0,255],经过ToTensor除以255归一化到[0,1]

2.3 Transforms on torch.*Tensor only

  • transforms.Normalize(mean, std, inplace=False)。

在tensor上进行的转换(即需要转化为tensor后再操作),逐channel的对图像进行标准化(均值变为0,标准差变为1),可以加快模型的收敛。

  • 公式:output = (input - mean) / std
  • mean:各通道(RGB)的均值
  • std:各通道的标准差
  • inplace:是否原地操作
from torchvision import transforms

transform1 = transforms.Compose([
    transforms.ToTensor() 
	transforms.Normalize([0.5, 0.5, 0.5],[0.5, 0.5, 0.5])

根据公式,计算过程为:
input = [0,1]
output[0] = (0-0.5)/0.5=-1
output[1] = (1-0.5)/0.5=1
将input = [0,1]归一化到output = [-1,1]

    Pytorch图像预处理时,通常使用transforms.Normalize(mean, std)对图像按通道进行标准化,即减去均值,再除以方差。这样做可以加快模型的收敛速度。其中参数mean和std分别表示图像每个通道的均值和方差序列。
    另外可以计算指定图像数据集的均值和方差用于transforms.Normalize()标准化,可参考示例:https://blog.youkuaiyun.com/PanYHHH/article/details/107896526

3 代码示例

直接当调包侠就好在这里插入图片描述在这里插入图片描述
在这里插入图片描述
下面是比较常用的:

from torchvision import transforms
transforms = transforms.Compose(
        [
        transforms.Resize(224), 
        transforms.RandomResizedCrop(size=256, scale=(0.8, 1.0)),#scale为随机裁剪面积比例
        transforms.RandomRotation(degrees=15),#随机旋转
        transforms.RandomHorizontalFlip(),#随机水平翻转
        transforms.RandomVerticalFlip(),#随机垂直翻转
        transforms.CenterCrop(size=224),#中心裁剪到224*224
        
        transforms.ToTensor(),#转化成张量
        transforms.Normalize([0.485, 0.456, 0.406],#归一化
                             [0.229, 0.224, 0.225])
])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值