DAY17:Pytorch transforms(下)

torchvision.transforms

transforms可以用来改变样本的多样性,例如:旋转、平移等等,训练图像辨识时,一定会用到的工具,现在来跟大家介绍他有哪些用法!我拿还未处理过的资料来当示范。这里我把图片都转换成400*400的大小。

    from torchvision import transforms
    from PIL import Image

    def img_loader(img_path):
        image = Image.open(img_path)
        img = image.resize((400, 400),Image.ANTIALIAS)
        return img.convert('RGB')

  • transforms.Resize

    • 重置影像解析度。

      • size:图像大小,height * width,若height > width,则(size * height / width, size),若只设定一个数a,则为(a*a)。
      img = img_loader(r"C:\Users\Frank\PycharmProjects\practice\mountain\train\5_拓.jpg")
      tranform = transforms.Compose([transforms.Resize(size=(300))])
      img = tranform(img)
      img.show()
      

      img = img_loader(r"C:\Users\Frank\PycharmProjects\practice\mountain\train\5_拓.jpg")
      tranform = transforms.Compose([transforms.Resize(size=(300,200))])
      img = tranform(img)
      img.show()
      


  • 标准化:transforms.Normalize

    • 对资料按通道进行标准化,即先减均值,再除以标准差。

      • mean:均值。
      • std:标准差。

  • 转为tensor:transforms.ToTensor

    • 将PIL Image或者 ndarray 转换为tensor,并且归一化至[0-1],归一化至[0-1]是直接除以255。

  • 修改亮度、对比度和饱和度:transforms.ColorJitter

    • 调整亮度、对比度、饱和度、色相。

      • brightness:调整亮度因子。(当为 (a, b) 时,从 [a, b] 中选择)。
      • contrast:对比度。(当为 (a, b) 时,从 [a, b] 中选择)。
      • saturation:饱和度。(当为 (a, b) 时,从 [a, b] 中选择)。
      • hue:色相参数。(当为 (a, b) 时,从 [a, b] 中选择)。

      调整亮度

      img = img_loader(r"C:\Users\Frank\PycharmProjects\practice\mountain\train\5_拓.jpg")
      tranform = transforms.Compose([transforms.ColorJitter(brightness=(0.3,1.5))])
      img = tranform(img)
      img.show()
      

      调整对比

      img = img_loader(r"C:\Users\Frank\PycharmProjects\practice\mountain\train\5_拓.jpg")
      tranform = transforms.Compose([transforms.ColorJitter(contrast=(0.3,0.5))])
      img = tranform(img)
      img.show()
      
      


      调整饱和度

      img = img_loader(r"C:\Users\Frank\PycharmProjects\practice\mountain\train\5_拓.jpg")
      tranform = transforms.Compose([transforms.ColorJitter(saturation=(0.3,0.5))])
      img = tranform(img)
      img.show()
      

      调整色相

      img = img_loader(r"C:\Users\Frank\PycharmProjects\practice\mountain\train\5_拓.jpg")
      tranform = transforms.Compose([transforms.ColorJitter(hue=(0.3,0.5))])
      img = tranform(img)
      img.show()
      


  • 转为灰阶图:transforms.Grayscale

    • 转为灰阶图。

      • num_output_channels:输出的通道数,只能设置1或3。
      img = img_loader(r"C:\Users\Frank\PycharmProjects\practice\mountain\train\5_拓.jpg")
      tranform =         transforms.Compose([transforms.Grayscale(num_output_channels=1)])
      img = tranform(img)
      img.show()
      


  • 随机转为灰阶图:transforms.RandomGrayscale
    • 随机率p转为灰阶图。
      • p:转为灰阶图的机率。

  • 仿射变换:transforms.RandomAffine
      
    • 对图像进行仿射变换,为2维的线性转换。有五种基本操作,旋转、平移、缩放、错切及翻转。

      • degrees:旋转角度。
      • translate:平移区间。设置为比例,如(0.3,0.3)。
      • scale:缩放比例。
      • shear:错切角度。例如30,则为(-30,30)
      • fillcolor:填充的颜色。
        旋转
      img = img_loader(r"C:\Users\Frank\PycharmProjects\practice\mountain\train\5_拓.jpg")
      tranform = transforms.Compose([transforms.RandomAffine(degrees=30)])
      img = tranform(img)
      img.show()
      

      平移

      img = img_loader(r"C:\Users\Frank\PycharmProjects\practice\mountain\train\5_拓.jpg")
      tranform = transforms.Compose([transforms.RandomAffine(degrees= 0 ,translate=(0.2,0.5))])
      img = tranform(img)
      img.show()
      

      缩放

      img = img_loader(r"C:\Users\Frank\PycharmProjects\practice\mountain\train\5_拓.jpg")
      tranform = transforms.Compose([transforms.RandomAffine(degrees= 0 ,scale=(0.2,0.5))])
      img = tranform(img)
      img.show()
      

      错切

      img = img_loader(r"C:\Users\Frank\PycharmProjects\practice\mountain\train\5_拓.jpg")
      tranform = transforms.Compose([transforms.RandomAffine(degrees= 0 ,shear=(30))])
      img = tranform(img)
      img.show()
      


<<:  Day 17 中场休息,来做点酷东西(取值 & 验证)

>>:  [Day 15] 中场休息 pt.2-整个电脑,都是我的工作室

[Tableau Public] day 27:台湾姓氏分布分析-5

原本计画今天要把前四天的工作表合成数据仪表板,不过早上看了看原始资料後,发现其实还可以再做一张工作表...

[Day11]什麽是智慧合约?

智慧合约是一种可以让你避免有中间人介入的合约。如果你想要签约买车、买房子,都需要透过仲介、业务销售...

9. 关於 this 的 5 题练习

这篇只包含我自己不熟悉的题型,建议有看到文章的人自己做做看题目! 题目来自 六角学院 的 观念测验:...

软件测试覆盖率分析(测试粒度最细)-表达式(expressions)和决策结构

颗粒可视为测量单元。当我们说我们的软件被测试了50%,或者测试覆盖率是50%,这到底是什麽意思,因为...

[Day27]程序菜鸟自学C++资料结构演算法 – 堆积排序法(Heap sort)

前言:在第16、17天的时候有介绍到堆积,今天要利用堆积的特性来实现排序法,忘记或不知道堆积是甚麽的...