pytorch学习笔记(三)---transforms

        本篇自学笔记来自于b站《PyTorch深度学习快速入门教程(绝对通俗易懂!)【小土堆】》,Up主讲的非常通俗易懂,文章下方有视频连接,如有需要可移步up主讲解视频,如有侵权,实非故意,深表歉意,请与我联系,删除相关内容!

本篇笔记主要学习了pytorch中的transforms类的用法,包括ToTensor,Normalize,Resize,Compose以及RandomCrop的用法演示。

首先介绍transforms,这里所说的其实是transforms.py文件,该文件里有很多class,可以被拿来使用。将transforms看作一个有许多工具模板的工具箱,我们在使用的时候,要选择里面的工具模板,然后创建自己的工具,有了工具之后,给一个输入,通过该工具便可以得到响应的输出。这便是使用的一个基本思路。

  1. ToTensor():把一个PIL或者Numpy类型的图片转换为tensor类型
  2. Normalize():输入为tensor类型的图像,参数为均值和标准差的序列,对应于图片的通道数
  3. Resize():把给定的图片重新定义为指定尺寸,输入为PIL图片,参数为[h,w],若只指定一个参数,则会给其匹配一个参数,相当于等比例缩放。
  4. Compose():把几个transform的功能进行组合,参数是集中transform的列表
  5. RandomCrop():随机裁剪,裁剪为给定参数,参数格式和resize的相同,输入同样也为PIL

以下为上述几种transform的代码展示:

#展示transforms类的用法
""""
    1.展示如何使用transforms(以ToTensor为例)
    2.给出transforms中常用的几个常用类的展示
"""
from PIL import Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms

writer = SummaryWriter('logs')

img_path = 'dataset/data2/train/bees_image/17209602_fe5a5a746f.jpg'
img_PIL = Image.open(img_path)
print("Image.open读取的图片的类型:")
print(type(img_PIL))

#以ToTensor为例展示如何使用transforms
    #ToTensor把 一个PIL或者Numpy类型的图片转换为tensor类型
    #1.把transforms看作一个工具库,首先要根据里面的工具模板创建自己的工具
trans_tensor = transforms.ToTensor()
    #2.通过给工具一个输入,经过处理得到了结果
tensor_img = trans_tensor(img_PIL)
writer.add_image("ToTensor",tensor_img,1)
print("经过ToTensor之后的图片类型:")
print(type(tensor_img))

#transforms中常用的几个类
#1.normalize
""""
    参数为均值和标准差,均为序列,对应每个通道,如图片为三通道,则定义如下
    注意:输入图片不支持PIL类型的
"""
trans_normalize = transforms.Normalize([0.5,0.5,0.5],[1,1,1])
normalize_img = trans_normalize(tensor_img)
writer.add_image("normalize",normalize_img,1)
print("经过normalize的图片类型:")
print(type(normalize_img))

#2.resize():把输入图片重新定义尺寸
""""
    以前支支持输入为PIL类型的图片,现在也支持输入类型为Tensor的图片
    参数为(H,W)如果给了两个参数则输出尺寸会与之匹配
    如果只给了一个int类型的参数,那么将会给它匹配一个,相当于等比例缩放
"""
print(img_PIL.size)
trans_resize = transforms.Resize([512,512])
resize_img = trans_resize(img_PIL)
print("经过resize的图片尺寸")
print(resize_img.size)
resize_img = trans_tensor(resize_img)#把PIL图片转换为tensor才可以使用add_image()
writer.add_image("resize",resize_img,1)
#只定义一个参数的效果
trans_resize_single = transforms.Resize(360)
resize_img2 = trans_resize_single(img_PIL)
print("经过resize的图片尺寸")
print(resize_img2.size)
resize_img2 = trans_tensor(resize_img2)
writer.add_image("resize",resize_img2,2)

#3.Rompose():把几个transform的功能进行组合
""""
    参数为几种transform的列表
    Example:
        >>> transforms.Compose([
        >>>     transforms.CenterCrop(10),
        >>>     transforms.ToTensor(),
        >>> ])
"""
trans_compose = transforms.Compose([trans_resize_single,trans_tensor,trans_normalize])
compose_img = trans_compose(img_PIL)
writer.add_image("compose",compose_img,1)

#4.RandomCrop():随机剪裁
""""
    输入为PIL图片
    参数和resize的参数要求一样,[h,w]的序列,如果只给了一个参数size,则默认为[size,size]
"""
trans_randomcrop = transforms.RandomCrop(240)
randomcrop_img = trans_randomcrop(img_PIL)
print("经过randomcrop的图片尺寸")
print(randomcrop_img.size)
randomcrop_img = trans_tensor(randomcrop_img)
writer.add_image("randomcrop",randomcrop_img,1)


视频地址:PyTorch深度学习快速入门教程(绝对通俗易懂!)【小土堆】_哔哩哔哩_bilibili

你可能感兴趣的:(pytorch,学习笔记,python,pytorch)