PyTorch学习笔记(2)--常见的Transforms

PyTorch学习笔记(2)–常见的Transforms

    本博文是PyTorch的学习笔记,第2次内容记录,主要记录了常见Transforms的使用方法。

1.Python中的类

1.1Python中怎样定义类

    在Transforms使用之前,需要了解一下Python中类的使用方法。在Python中定义类的方法如下:

# coding :UTF-8
# 文件功能: 代码实现class基本功能
# 开发人员: dpp
# 开发时间: 2021/8/11 11:14 上午
# 文件名称: class_use.py
# 开发工具: PyCharm

class Person:
    def __init__(self, name):
        print("__init__ " + name)

    def __call__(self, name):
        print("__call__ " + "hello " + name)

    def hello(self, name):
        print("hello " + name)


person = Person("first name")    # 对象创建时初始化,自动调用__init__函数
person.__call__("zhangsan")   # 对象显示地调用__call__函数
person("zhangsan")     # 对象直接调用__call__函数,调用效果与显示调用__call__一样
person.hello("lisi")    # 对象调用hello方法

1.2Python类中常用的内置函数

   在Python中有很多常用的内置函数,包括__init__、callnew__等,提醒这里的下滑线是2个短横线,在上面的例子中举例实现了__init、__call__等函数的使用方法。详细的Python内置函数的使用可以参考这两篇文章:【Python进阶篇】python之函数的类的内置方法python 类中 call__与__init

2.PyTorch中常用Transforms

2.1ToTensor和Normalize的使用

    ToTensor是实现将图像转换为tensor张量类型,Normalize是实现对张量的归一化操作。具体实例代码为:

# coding :UTF-8
# 文件功能: 代码实现常用Transforms的功能
# 开发人员: dpp
# 开发时间: 2021/8/11 11:58 上午
# 文件名称: Use_of_Transforms.py
# 开发工具: PyCharm

from PIL import Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms

writer = SummaryWriter("logs")
img = Image.open("images/pytorch.jpg").convert('RGB')    #convert('RGB')实现将图片映射到RGB三通道上面
print(img)

# Totensor的使用  ToTensor是指把PIL.Image(RGB) 或者numpy.ndarray(H x W x C) 从0到255的值映射到0到1的范围内,并转化成Tensor格式
trans_totensor = transforms.ToTensor()
img_tensor = trans_totensor(img)
print(img_tensor.shape)
writer.add_image("ToTensor", img_tensor)

# Normalize的使用 Normalize(mean,std)是通过下面公式实现数据归一化,mean表示平均值,std表示标准差
# channel=(channel-mean)/std
print(img_tensor[0][0][0])  # 输出第一个像素点归一化之前的值
trans_norm = transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5])  # 假设均值为[0.5, 0.5, 0.5],标准差为[0.5, 0.5, 0.5]
img_norm = trans_norm(img_tensor)    # 将图片转换为tensor之后,对tensor进行归一化处理
print(img_norm[0][0][0])  # 输出第一个像素点归一化之后的值
writer.add_image("Normalize", img_norm, 1)
writer.close()

    可以在Tensorboard中查看运行结果:
在这里插入图片描述

2.2Resize的使用

    Resize是修改原来图像的尺寸信息,代码如下:

# coding :UTF-8
# 文件功能: 代码实现常用Transforms的功能
# 开发人员: dpp
# 开发时间: 2021/8/11 11:58 上午
# 文件名称: Use_of_Transforms.py
# 开发工具: PyCharm

from PIL import Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms

writer = SummaryWriter("logs")
img = Image.open("images/pytorch.jpg").convert('RGB')    #convert('RGB')实现将图片映射到RGB三通道上面
print(img)

# Totensor的使用  ToTensor是指把PIL.Image(RGB) 或者numpy.ndarray(H x W x C) 从0到255的值映射到0到1的范围内,并转化成Tensor格式
trans_totensor = transforms.ToTensor()
img_tensor = trans_totensor(img)
print(img_tensor.shape)
writer.add_image("ToTensor", img_tensor)

# Normalize的使用 Normalize(mean,std)是通过下面公式实现数据归一化,mean表示平均值,std表示标准差
# channel=(channel-mean)/std
print(img_tensor[0][0][0])  # 输出第一个像素点归一化之前的值
trans_norm = transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5])  # 假设均值为[0.5, 0.5, 0.5],标准差为[0.5, 0.5, 0.5]
img_norm = trans_norm(img_tensor)    # 将图片转换为tensor之后,对tensor进行归一化处理
print(img_norm[0][0][0])  # 输出第一个像素点归一化之后的值
writer.add_image("Normalize", img_norm, 1)

# Resize的使用
print(img.size)
trans_resize = transforms.Resize((512, 512))
# img PIL -> resize -> img_resize PIL
img_resize = trans_resize(img)
# img_resize PIL -> totensor -> img_resize tensor
img_resize = trans_totensor(img_resize)
writer.add_image("Resize", img_resize, 0)
print(img_resize)

writer.close()

    可以在Tensorboard中查看Resize的运行结果:
在这里插入图片描述

2.3Compose的使用

    Compose类的主要作用是串联多个图片变换的操作,代码如下:

# coding :UTF-8
# 文件功能: 代码实现常用Transforms的功能
# 开发人员: dpp
# 开发时间: 2021/8/11 11:58 上午
# 文件名称: Use_of_Transforms.py
# 开发工具: PyCharm

from PIL import Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms

writer = SummaryWriter("logs")
img = Image.open("images/pytorch.jpg").convert('RGB')    #convert('RGB')实现将图片映射到RGB三通道上面
print(img)

# Totensor的使用  ToTensor是指把PIL.Image(RGB) 或者numpy.ndarray(H x W x C) 从0到255的值映射到0到1的范围内,并转化成Tensor格式
trans_totensor = transforms.ToTensor()
img_tensor = trans_totensor(img)
print(img_tensor.shape)
writer.add_image("ToTensor", img_tensor)

# Normalize的使用 Normalize(mean,std)是通过下面公式实现数据归一化,mean表示平均值,std表示标准差
# channel=(channel-mean)/std
print(img_tensor[0][0][0])  # 输出第一个像素点归一化之前的值
trans_norm = transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5])  # 假设均值为[0.5, 0.5, 0.5],标准差为[0.5, 0.5, 0.5]
img_norm = trans_norm(img_tensor)    # 将图片转换为tensor之后,对tensor进行归一化处理
print(img_norm[0][0][0])  # 输出第一个像素点归一化之后的值
writer.add_image("Normalize", img_norm, 1)

# Resize的使用
print(img.size)
trans_resize = transforms.Resize((512, 512))
# img PIL -> resize -> img_resize PIL
img_resize = trans_resize(img)
# img_resize PIL -> totensor -> img_resize tensor
img_resize = trans_totensor(img_resize)
writer.add_image("Resize", img_resize, 0)
print(img_resize)

# compose - resize - 2
trans_resize_2 = transforms.Resize(512)
# PIL -> PIL -> tensor
trans_compose = transforms.Compose([trans_resize_2, trans_totensor])
img_resize_2 = trans_compose(img)
writer.add_image("Compose", img_resize_2, 1)

writer.close()

    可以在Tensorboard中查看Compose的运行结果:
在这里插入图片描述

2.4RandomCrop的使用

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

# coding :UTF-8
# 文件功能: 代码实现常用Transforms的功能
# 开发人员: dpp
# 开发时间: 2021/8/11 11:58 上午
# 文件名称: Use_of_Transforms.py
# 开发工具: PyCharm

from PIL import Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms

writer = SummaryWriter("logs")
img = Image.open("images/pytorch.jpg").convert('RGB')    #convert('RGB')实现将图片映射到RGB三通道上面
print(img)

# Totensor的使用  ToTensor是指把PIL.Image(RGB) 或者numpy.ndarray(H x W x C) 从0到255的值映射到0到1的范围内,并转化成Tensor格式
trans_totensor = transforms.ToTensor()
img_tensor = trans_totensor(img)
print(img_tensor.shape)
writer.add_image("ToTensor", img_tensor)

# Normalize的使用 Normalize(mean,std)是通过下面公式实现数据归一化,mean表示平均值,std表示标准差
# channel=(channel-mean)/std
print(img_tensor[0][0][0])  # 输出第一个像素点归一化之前的值
trans_norm = transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5])  # 假设均值为[0.5, 0.5, 0.5],标准差为[0.5, 0.5, 0.5]
img_norm = trans_norm(img_tensor)    # 将图片转换为tensor之后,对tensor进行归一化处理
print(img_norm[0][0][0])  # 输出第一个像素点归一化之后的值
writer.add_image("Normalize", img_norm, 1)

# Resize的使用
print(img.size)
trans_resize = transforms.Resize((512, 512))
# img PIL -> resize -> img_resize PIL
img_resize = trans_resize(img)
# img_resize PIL -> totensor -> img_resize tensor
img_resize = trans_totensor(img_resize)
writer.add_image("Resize", img_resize, 0)
print(img_resize)

# compose - resize - 2
trans_resize_2 = transforms.Resize(512)
# PIL -> PIL -> tensor
trans_compose = transforms.Compose([trans_resize_2, trans_totensor])
img_resize_2 = trans_compose(img)
writer.add_image("Compose", img_resize_2, 1)

# RandomCrop随机裁剪
trans_random = transforms.RandomCrop(512)  #裁剪图像尺寸为512×512
trans_compose_2 = transforms.Compose([trans_random, trans_totensor])
for i in range(10):   #对原始图像随机裁剪0-9一共10个图像
    img_crop = trans_compose_2(img)
    writer.add_image("RandomCrop", img_crop, i)

writer.close()

    可以在Tensorboard中查看RandomCrop的运行结果:
在这里插入图片描述

3.学习小结

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

  1. 多关注每个函数的输入值类型、输出值类型;
  2. 多看函数的源码,根据源码中提供的内容对函数的使用方法进行掌握;
  3. 通过关注函数的参数类型、参数个数、参数作用对函数的使用方法进行了解;
  4. 如果不知道函数的返回值是什么类型,借助print()函数,输出其类型或者格式,进行查看。
  • 9
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值