常见的Transforms的使用方法

常见的Transforms使用方法

目录

前言

一、pythion中__call__()方法的用法

二、ToTensor的使用

三、Normalize(归一化)的使用

四、Resize的使用

五、在Compose中使用Resize

六、RandomCrop(随机裁剪)的使用

总结


前言

transforms的使用要非常注意三点:输入——输出——作用
常见的图片格式有:PIL(使用Image.open()打开,python自带的);tensor(使用ToTensor()打开);narrays(使用cv.imread()打开)


一、python中__call__()方法的用法

我们知道函数是可被调用的。内置函数callable可以验证该对象是否是可以调用对象,所以如果把一个函数名传给callable(),就会返回True。
__call__() 方法可以用来将类实例变成为可调用对象, 说的直白点就是如果在类里重写了__call__函数,该类实例就可以当做函数一样被调用。

代码如下:

class Person:                       #创建一个Person类
    def __call__(self, name):     #定义___call__函数,name是参数
        print("__call__ "+ "hello "+ name)

    def hello(self, name):        #定义hello函数,name是参数
        print("hello "+ name)

person = Person()     #新建一个Person的对象,名字叫person(创建一个Person实例person)
person("zhangsan")    #调用__call__函数
person.hello("haha")  #调用hello函数

二、ToTensor的使用

TensorBoard默认是tensor的数据类型。

代码如下:

trans_ToTensor = transforms.ToTensor()    #创建一个实例
img_tensor = trans_ToTensor(img)    #使用totensor方法把图片转化为tensorg类型
writer.add_image("totensor", img_tensor, 1)   #写入tensorboard中

三、Normalize(归一化)的使用

归一化一个tensor的数据类型,给入均值和标准差,输出归一化结果

代码如下:

print(img_tensor[0, 0, 0])  #归一化前图片的数据
trans_norm = transforms.Normalize([0.5,0.5,0.5], [0.5,0.5,0.5])    #创建一个实例,
输入均值,方差
img_norm = trans_norm(img_tensor)   #调用函数随图片进行归一化处理
print(img_norm[0, 0, 0])   #归一化后图片的数据
writer.add_image("normalize", img_norm, 2)  #写入tensorboard中

四、Resize的使用

代码如下:

print(img.size)   #输出图片尺寸
trans_resize = transforms.Resize(400)   #创建一个实例,调用resize()方法
img_resize = trans_resize(img)          #按比例进行变换
img_resize_tensor = trans_ToTensor(img_resize)     #将图片格式转换为tensor类型
print(img_resize_tensor)            #输出图片尺寸
writer.add_image("resize", img_resize_tensor , 3)   #写入tensorboard中

五、在Compose中使用Resize

如果说torchvision.transforms是pytorch中的图像预处理包,有很多步骤。Compose的作用就是把多个步骤整合到一起。

比如说:
transforms.Compose([
transforms.CenterCrop(10),
transforms.ToTensor(),  ])
这样就把两个步骤整合到了一起。

注意:compose([], [], ...)  中括号内的每一步都是有顺序的,从前到后,前一个输出的结果,就是后一步输入的,所以要保证数据类型一致,要不然会报错。

代码如下:

trans_resize_2 = transforms.Resize(500)    #创建一个实例,调用resize()方法
trans_compose = transforms.Compose([trans_resize_2, trans_ToTensor])   #使用compose函数
img_resize_2 = trans_compose(img)
writer.add_image("conpose_resize", img_resize_2, 5)    #写入tensorboard中

六、RandomCrop(随机裁剪)的使用

代码如下:

trans_random = transforms.RandomCrop(300, 200)     #创建一个实例,调用randomcrap()方法
trans_compose_2 = transforms.Compose([trans_random, trans_ToTensor])    #先裁剪,在转换成tensor类型
for i in range(10):         #for循环
    img_crop = trans_compose_2(img)
    writer.add_image("randomcrop", img_crop, i)

全部代码如下:

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

writer = SummaryWriter("logs")

img = Image.open("train/ants/0013035.jpg")
print(img)

#ToTensor的使用
trans_ToTensor = transforms.ToTensor()  #创建一个实例
img_tensor = trans_ToTensor(img)        #使用totensor方法把图片转化为tensorg类型
writer.add_image("totensor", img_tensor, 1)  #写入tensorboard中

#Normalize
print(img_tensor[0, 0, 0])  #归一化前图片的数据
trans_norm = transforms.Normalize([0.5,2,1.5], [0.5,1,1.2])    #创建一个实例,输入均值,方差
img_norm = trans_norm(img_tensor)   #调用函数随图片进行归一化处理
print(img_norm[0, 0, 0])   #归一化后图片的数据
writer.add_image("normalize", img_norm, 1)  #写入tensorboard中

#Resize
print(img.size)   #输出图片尺寸
trans_resize = transforms.Resize(400)   #创建一个实例,调用resize()方法
img_resize = trans_resize(img)          #按比例进行变换
img_resize_tensor = trans_ToTensor(img_resize)     #将图片格式转换为tensor类型
print(img_resize_tensor)            #输出图片尺寸
writer.add_image("resize", img_resize_tensor , 3)   #写入tensorboard中

#在Compose中使用resize
trans_resize_2 = transforms.Resize(250)    #创建一个实例,调用resize()方法
trans_compose = transforms.Compose([trans_resize_2, trans_ToTensor])   #使用compose函数
img_resize_2 = trans_compose(img)
writer.add_image("conpose_resize", img_resize_2, 6)    #写入tensorboard中

#RandomCorp
trans_random = transforms.RandomCrop(300, 200)     #创建一个实例,调用randomcrap()方法
trans_compose_2 = transforms.Compose([trans_random, trans_ToTensor])    #先裁剪,在转换成tensor类型
for i in range(10):         #for循环
    img_crop = trans_compose_2(img)
    writer.add_image("randomcrop", img_crop, i)

writer.close()
 


总结

使用transforms要注意输入输出的数据类型;
多看官方的注解/用法;
关注方法需要什么参数;
不知道返回值的类型的时候可以使用print(); print(typr()); debug来运行查看一下。

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晓亮.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值