Pytorch学习记录(2)Transforms的使用

Pytorch学习记录(2)Transforms的使用

  1. 什么是Transforms?

1.1 Transforms的定义与使用:

对于视觉方向的图像处理方面,PyTorch提供了很好的预处理接口,对于图像的转换处理,使用 torchvision.tranforms 模块使得这些操作非常高效。

1.2 Transforms中定义了哪些类?

__all__ = ["Compose", "ToTensor", "PILToTensor", "ConvertImageDtype", "ToPILImage", "Normalize", "Resize", "Scale",
           "CenterCrop", "Pad", "Lambda", "RandomApply", "RandomChoice", "RandomOrder", "RandomCrop",
           "RandomHorizontalFlip", "RandomVerticalFlip", "RandomResizedCrop", "RandomSizedCrop", "FiveCrop", "TenCrop",
           "LinearTransformation", "ColorJitter", "RandomRotation", "RandomAffine", "Grayscale", "RandomGrayscale",
           "RandomPerspective", "RandomErasing", "GaussianBlur", "InterpolationMode", "RandomInvert", "RandomPosterize",
           "RandomSolarize", "RandomAdjustSharpness", "RandomAutocontrast", "RandomEqualize"]

粗浅地理解,transforms.py可以看作一个工具箱,我们将图片作为输入,放入Transforms这个工具中,并将图像转换为其他类型的输出,以用于深度学习的工作。

2. Transforms的实例应用:

2.1 Tensor数据类型介绍

可以理解为,Tensor数据类型在保留了图像的原始数据的基础上,包装了神经网络所需要的理论基础的参数的实体。

在神经网络的训练中,通常需要我们提前将图像数据的原始类型转换为Tensor数据类型,便于我们后续的神经网络的训练。

2.2 ToTensor()的使用:

首先引入torchvision库中的transforms类:

通过PIL库中的image类,调用image.open()函数,对于文件进行读入:

可以观察到,通过open()函数读入的文件类型为JpegImageFile类型,模式是RGB,并且大小为3648*2736。

接下来需要将JpegImageFile类型的对象转换为Tensor类型的对象,通过ToTensor()函数实现,首先创建一个ToTensor函数的对象,方便调用:

接下来往函数对象中传入参数,参数为上述读入的图片对象:

通过print函数对于对象进行查看,可以看到转换后的对象的类型已经转换为Tensor类:

通过Tensorboard查看图像类型是否可以传入Tensorboard中,并且在Tensorboard界面查看:

同样,通过创建SummaryWriter类来对数据进行读入:

接下来在Tensorboard界面查看:

可以观察到成功上传了图片。

2.3 Nomalize的使用:

通过help()函数查看Nomalize()函数的参数以及具体使用方法:

可以通过阅读了解到,Normalize()函数实现的是归一化,具体来说是对于每一个信道的输入进行归一化,Normalize()函数对应的参数为每个信道的均值与标准差。

在了解完了之后,在Jupyter Notebook中创建Normalize的实例对象,并且将上述的Tensor类型的图像数据作为参数传入Normalize对象中,可以得到归一化的结果:

接下来将归一化的结果传入Tensorboard上进行查看:

虽然这个归一化的成果看起来比较抽象。。但是还是成功完成了归一化的任务,表明Normalize的实用性。

2.4 Resize()的使用:

通过help()查看Resize类的使用:

可以了解到,Resize的主要功能是将图像调整成对应的大小,若输入的参数为长和宽,可以调整成对应的大小,若只输入一个参数,图像的最小边会匹配该参数,并将图像按照输入的参数进行等比的缩放。

接下来创建Resize对象,并设置需要转换的尺寸大小,此处设置为512*512:

观察转换前后的图像的大小,可以观察到图像的大小从3648*2736转换成512*512,并且保留了原图像的通过open()函数读入之后的图像类型。

接下来需要将对象放入Tensorboard上进行观察,需要先将图像的类型转换为Tensor类型,因此需要调用先前的ToTensor()来进行转换。

转换完成之后,放入Tensorboard上进行查看:

可以观察到图像被转换成指定的大小。

2.5 Compose的使用

Compose()的作用是整合多个transforms类型的步骤到一起,只用一步完成多个转换操作。

Compose()的参数需要的是一个列表,数据需要的是transforms类型,列表的形式为[transforms类型1, transforms类型2]。

因此根据Compose()的功能以及参数需要,依次进行构造Compose对象。

首先构造一个新的只有一个参数的Resize对象:

接下来将Resize对象以及ToTensor对象整合在一个Compose对象中,因此可以实现一次性调用:

再接着把图像数据进行导入并查看transform的结果:

可以观察到图像进行了等比缩放。

2.6 RandomCrop的使用:

RandomCrop类的主要作用是实现对图片随机裁剪,裁剪的尺寸根据给定的参数进行,如果给定的是1个参数,则裁剪成正方形,如果是两个参数,则裁剪成两个参数指定的长和宽。

3. 总结

在本文中总结了几种常用的Transforms,主要包括:ToTensor、Normalize、Resize、Compose、RandomCrap等。在新接触这些类时,几种常用的学习方法总结如下:

  1. 多关注每个函数的输入值类型、输出值类型;

  1. 多看函数的源码,根据源码中提供的内容对函数的使用方法进行掌握;

  1. 通过关注函数的参数类型、参数个数、参数作用对函数的使用方法进行了解;

  1. 如果不知道函数的返回值是什么类型,借助print()函数,输出其类型或者格式,进行查看。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值