Pytorch源码解读-torchvision.transforms

torchvision.transforms对于使用Pytorch的人肯定不陌生,我也用了Pytorch但是对transform却不是真正掌握,图片的预处理对网络的性能十分重要,所以打算仔细看看pytorch的源码。

Transforms组成

Transforms are common image transforms. They can be chained together using Compose
Transforms是常用的一些图像变换操作,可以用Compose将这些变换组合在一起

Transfroms由5部分组成

  • Transforms on PIL Image
  • Transforms on torch.Tensor
  • Conversion Transforms
  • Generic Transforms
  • Functional Transforms

其中,前两部分Transforms on PIL ImageTransforms on torch.*Tensor用的比较多。下面会详细说明,先说一下compose


compose
Compose是一个类用来组合所有的变换操作。
class torchvision.transforms.Compose(transforms)
使用方法,应该很常见:

transforms.Compose([
		transforms.CenterCrop(10),
	    transforms.ToTensor(),
        ])

Transforms on PIL Image

函数用途用法
CenterCrop(size)crops the given PIL image at the center
从图片中心剪裁一个size大小的图片
CenterCrop(160)
GrayScale(num)convert image to grayscale
将图片变成灰度图
GrayScale(1)或者
GrayScale(3)
RandomCrop(size)crop the given PIL image at a random location
在给定的图片中随机的剪裁一张size大小的图。
这个在训练中经常用到,算作一种数据增强的手段
RandomCrop(224)
RandomHorizontaFlip(p)Horizontally flip the given image randomly with a given probability
按照给定概率随机的对图片进行水平镜像
这一条也经常用于训练
RandomHorizontaFlip(0.5)
Resize(size)Resize the input PIL image to the given size
一般用在验证集和测试集
Resize(224)

Transforms on torch.Tensor

Tensor数据的处理只有一个函数Normalize(mean,std)
Normalize函数几乎都会用到,需要注意的是:
只能对Tensor数据进行Normalize,不能对PIL image用,即在用transform.Normalize()前先使用下面的transform.ToTensor()
用法:
transform.Normalize([127.5,127.5,127.5],[128,128,128])
对指定通道的像素减去均值除以方差,一般用于图片的归一化,均值和方差的取值需要注意。


Conversion Transforms

这部分包括两个变换:

  • class torchvision.transforms.ToPILImage(mode=None)
    将Tensor形式变成PIL Image形式,用的不多
  • class torchvision.transforms.ToTensor
    将PIL Image形式变成Tensor形式,用的很多,只要你用到gpu都会涉及到。

Converts a PIL Image or numpy.ndarray (H x W x C) in the range [0, 255] to a torch.FloatTensor of shape (C x H x W) in the range [0.0, 1.0].
将一个image或者numpy.ndarrya形式的图片,图片的取值范围[0,255]变成一个tensor,tensor的取值为[0,1],并且通道顺序由HWC变成CHW。

需要注意两点,图片的取值范围和通道顺序。取值范围会影响到接下来的归一化normalize。通道顺序从高x宽x通道变成通道x高x宽,简单说就是从224x224x3变成3x224x224

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值