DAY16: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.CenterCrop
    • 中心裁剪是从中心算你给他的size多大,他就裁多大。我们设置剪下200*200的图片大小。下面是比较图。
      • 参数size:你要裁剪的大小。
      img = img_loader(r"C:\Users\Frank\PycharmProjects\practice\mountain\train\5_拓.jpg")
      img.show()
      tranform = transforms.Compose([transforms.CenterCrop(size=((200,200)))])
      img = tranform(img)
      img.show()    
      
    • 若裁剪的比原图还大时,多出来的部分会用黑色填补。
      img = img_loader(r"C:\Users\Frank\PycharmProjects\practice\mountain\train\5_拓.jpg")
      img.show()
      tranform = transforms.Compose([transforms.CenterCrop(size=((750,500)))])
      img = tranform(img)
      img.show() 
      

  • 随机裁剪:transforms.RandomCrop

    • 将图档随机裁剪你设定的size。

      • size:要剪裁下来的大小。
      • padding:将原图先填补你给的值的像素,会在随机裁剪前填补。
      • pad_if_need:当图片小於设置的size时,是否填补。
      • fill:填补的颜色,预设黑色,例如可改为红色(255,0,0)。
      img = img_loader(r"C:\Users\Frank\PycharmProjects\practice\mountain\train\5_拓.jpg")
      img.show()
      tranform =         transforms.Compose([transforms.RandomCrop(size=((200,200)),padding=100)])
      img = tranform(img)
      img.show()
      

      img = img_loader(r"C:\Users\Frank\PycharmProjects\practice\mountain\train\5_拓.jpg")
      img.show()
      tranform =         transforms.Compose([transforms.RandomCrop(size=((200,200)),padding=100,fill = (255,0,0))])
      img = tranform(img)
      img.show()
      


  • 随机长宽比裁剪:transforms.RandomResizedCrop
    • 随机大小及随机长宽比裁剪原始图片,最後再resize到设定好的size。

      • size:要剪裁的图片大小。
      • scale:例如scale=(0.2, 1.0),则会随机从0.2到1.0中,选一个倍数裁剪,如0.2则裁剪原图的0.2倍。
      • ratio:长宽比区间,随机选取。
      img = img_loader(r"C:\Users\Frank\PycharmProjects\practice\mountain\train\5_拓.jpg")
      img.show()
      tranform = transforms.Compose([transforms.RandomResizedCrop(size = (200,200),scale=(0.2, 1.0), ratio=(0.5, 1.1))])
      img = tranform(img)
      img.show()
      


  • 水平翻转:transforms.RandomHorizontalFlip
    • 依照P的机率,资料集的P倍图片会被水平翻转。

      • p:为水平翻转的机率,若为1则所有图片都被水平翻转。
      img = img_loader(r"C:\Users\Frank\PycharmProjects\practice\mountain\train\5_拓.jpg")
      img.show()
      tranform = transforms.Compose([transforms.RandomVerticalFlip(p = 0.9)])
      img = tranform(img)
      img.show()
      


  • 垂直翻转:RandomHorizontalFlip

    • 依照P的机率,资料集的P倍图片会被垂直翻转。

      • p:为垂直翻转的机率,若为1则所有图片都被垂直翻转。
      img = img_loader(r"C:\Users\Frank\PycharmProjects\practice\mountain\train\5_拓.jpg")
      tranform = transforms.Compose([transforms.RandomHorizontalFlip(p = 0.9)])
      img = tranform(img)
      img.show()
      


  • 随机旋转:RandomRotation

    • 依照设置的degrees,随机旋转图片。

      • degrees:若设为d值,则在(-d,d)之间旋转;若设为(a,b),则在a到b之间旋转。
      • center:旋转中心的座标。预设为中心点。(0,0)为左上角。
      img = img_loader(r"C:\Users\Frank\PycharmProjects\practice\mountain\train\5_拓.jpg")
      tranform = transforms.Compose([transforms.RandomRotation(degrees = 30,center=(0,0))])
      img = tranform(img)
      img.show()
      


  • 填补:Pad

    • 依照设置的值为像素,由外而内填补。
      • padding:将原图填补你给的值的像素。
      • fill:填补的颜色,预设黑色,例如可改为红色(255,0,0)。
      img = img_loader(r"C:\Users\Frank\PycharmProjects\practice\mountain\train\5_拓.jpg")
      tranform = transforms.Compose([transforms.Pad(padding = 30,fill=(255,200,0))])
      img = tranform(img)
      img.show()
      

今日小结

  • 还没有介绍完,目前都是剪裁跟旋转的部分,後面还有会调整图片的函数。
  • 做这些转换可以增加图片的多样性,提高模型的泛化程度。

<<:  Day16 - 快速回顾 Finite State Machine, State Chart + 浅嚐 XState

>>:  【第十七天 - Flutter Cloud Messaging(上)】

[DAY 28] 用google sheet 做简易UI介面(3/3)

题库一个人不容易维护 如果想要多人共用试算表 就会怕有些人动到你设定好的格式 此时可以选择保护工作表...

[火锅吃到饱-12] 温野菜日本涮涮锅专门店 Taiwan On-Yasai @秀泰-台中站前店

我在这一区出生的(小时候也住在这里),拍这集的时候,不自觉的会想要多介绍一些周遭的环境。 阿公家在这...

Day21 探讨setting(3)

昨天我们已经介绍到ALLOW_HOSTS了,那我们今天就继续介绍吧! 下一个我们看到的是INSTAL...

Android Studio - LOG

安卓有五种LOG的方式 搭配logcat 标记出你想知道的讯息 可以提升侦错的效率和优化程序码 Lo...

Day43 ( 电子元件 ) 触碰开灯 ( 引脚按下 )

触碰开灯 ( 引脚按下 ) 教学原文参考:触碰开灯 ( 引脚按下 ) 这篇文章会介绍如何使用「当引脚...