当前位置:   article > 正文

PyTorch快速入门教程【小土堆】-Transforms的使用_transforms.totensor

transforms.totensor

1.transforms作用

transforms.py像一个工具箱,里面有很多工具,工具有totensor类、resize类等等

图片经过工具 会输出我们想要的一个图片变换的结果

2.常用的transforms

(1)Totensor

作用:将PIL类型或numpy类型的图片转换为tensor类型的图片

trans_totensor=transforms.ToTensor()
img_tensor=trans_totensor(img)

注:这里重点说一下__call__

可调用对象:凡是可以将()运用到自身并执行的都可以称为可调用对象,例如 对象名(),对于可调用对象名称()可以理解为是名称.__call__()的缩写

__call__函数功能类似于在类中重载()运算符,使实例对象可以像普通函数那样,以对象名()的形式调用,将类的实例对象变为可调用对象

所以trans_totensor=transforms.ToTensor()相当于实例化,img_tensor=trans_totensor(img)调用了__call__

(2)normalize

作用:用均值和标准差归一化一个tensor类型的图片

计算方式:output[channel] = (input[channel] - mean[channel]) / std[channel]

trans_norm=transforms.Normalize([0.5,0.5,0.5],[0.5,0.5,0.5])#类实例化,参数是每个通道的均值和标准差
img_norm=trans_norm(img_tensor)

 (3)Resize

作用:将输入图像的大小调整到给定大小输出

视频讲的该类使用时输入图片类型仅能是PIL类型,目前输入类型PIL,tensor都可以

但add_image参数类型仅能是tensor或numpy类型不能是PIL类型

trans_resize=transforms.Resize((512,512))#类实例化
img_resize=trans_resize(img)#调整大小

(4)Compose

作用:组合几个transforms变换,按照参数操作

参数:需要是一个列表,python中,列表的表示形式为[数据1,数据2,...],在compose中数据需要的是transforms类型,所以得到Compose([transforms参数1,transforms参2...])

#传入PIL类型,经过Transforms类型参数1:trans_resize_2,实现缩放,经过Transforms类型参数2:trans_totensor实现将PIL类型转为tensor类型
trans_compose=transforms.Compose([trans_resize_2,trans_totensor])#输入为PIL类型
img_resize_2=trans_compose(img)

5.RandomCrop

作用:裁剪给定图像

参数:size 希望裁剪输出的大小 如果是int类型 进行正方形裁剪,如果是像 (h, w)这样的序列,按照 (h, w)裁剪

trans_random=transforms.RandomCrop(512)#进行正方形裁剪,按照512*512
trans_random2=transforms.RandomCrop((500,1000))#进行长方形裁剪 500*1000
img_crop=trans_random(img_tensor)
img_crop2=trans_random2(img_tensor)

代码如下:

  1. from PIL import Image
  2. from torch.utils.tensorboard import SummaryWriter
  3. from torchvision import transforms
  4. writer=SummaryWriter('logs')#类实例化,传入存储事件文件的文件夹名称
  5. img=Image.open("images/9.jpg")
  6. print(img)
  7. #1.Totensor
  8. # 作用:将PIL或numpy类型的图片转换为tensor类型的图片
  9. trans_totensor=transforms.ToTensor()#类实例化
  10. #调用totensor的__call__函数
  11. #作用:将PIL类型或numpy.ndarray类型的图片转换为tensor类型
  12. img_tensor=trans_totensor(img)
  13. writer.add_image("ToTensor",img_tensor)
  14. #2.normalize
  15. # 作用:用均值和标准差归一化一个tensor类型的图片
  16. #计算方式:output[channel] = (input[channel] - mean[channel]) / std[channel]
  17. print(img_tensor[0][0][0])
  18. trans_norm=transforms.Normalize([0.5,0.5,0.5],[0.5,0.5,0.5])#类实例化
  19. img_norm=trans_norm(img_tensor)
  20. print(img_norm[0][0][0])
  21. writer.add_image("Normalize",img_norm)
  22. #3.Resize
  23. # 作用:将输入图像的大小调整到给定大小输出
  24. print(img.size)
  25. trans_resize=transforms.Resize((512,512))#类实例化
  26. #(1)输入图片类型是PIL
  27. img_resize=trans_resize(img)#调整大小
  28. #输出也是PIL类型,将PIL转化为tensor类型,
  29. img_resize=trans_totensor(img_resize)
  30. writer.add_image("Resize_inputPIL",img_resize)
  31. print(img_resize)
  32. #(2)输入图片类型也可以是tensor类型
  33. img_resize_tensor=trans_resize(img_tensor)
  34. writer.add_image("Resize_inputTensor",img_resize_tensor)
  35. #4.Compose--resize--2
  36. # 作用:组合几个transforms变换,按照参数操作
  37. # 参数:需要是一个列表,python中,列表的表示形式为[数据1,数据2,...],在compose中数据需要的是transforms类型,所以得到
  38. #Compose([transforms参数1,transforms参2...])
  39. trans_resize_2=transforms.Resize(512)
  40. #传入PIL类型,经过Transforms类型参数1:trans_resize_2,实现缩放,经过Transforms类型参数2:trans_totensor实现将PIL类型转为tensor类型
  41. trans_compose=transforms.Compose([trans_resize_2,trans_totensor])#输入为PIL类型
  42. img_resize_2=trans_compose(img)
  43. writer.add_image("Resize",img_resize_2,1)
  44. img_resize_1=trans_resize_2(img_tensor)#输入为tensor类型直接调用resize即可
  45. writer.add_image("Resize",img_resize_1,2)
  46. #5.RandomCrop
  47. #作用:裁剪给定图像
  48. #参数:size 希望裁剪输出的大小 如果是int类型 进行正方形裁剪,如果是像 (h, w)这样的序列,按照 (h, w)裁剪
  49. trans_random=transforms.RandomCrop(512)#进行正方形裁剪,按照512*512
  50. trans_random2=transforms.RandomCrop((500,1000))#进行长方形裁剪 500*1000
  51. for i in range(10):
  52. img_crop=trans_random(img_tensor)
  53. img_crop2=trans_random2(img_tensor)
  54. writer.add_image("Random",img_crop,i)
  55. writer.add_image("Random2", img_crop2, i)
  56. writer.close()

注意:

(1)关注输入、输出类型

(2)多看官方文档,按住ctrl直接点击函数和类即可看到函数或类的信息

(3)关注方法需要什么参数,ctrl+p软件会提示需要输入范润参数

(4)不知道返回值类型的时候时候 print 、print(type)、debug

(5)看transforms的structure,可以transforms包含哪些类和函数,点击structure中的类和函数,即可看到它们的官方声明

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/351021
推荐阅读
相关标签
  

闽ICP备14008679号