Pytorch小技巧-數據增強(下)

  • 2019 年 12 月 9 日
  • 筆記

Scale(縮放操作)

上圖可見,圖片由左至右分別增大了20%、40%。

利用之前知識可以採用Resize操作,如將28*28轉化成32*32。

train_loader = torch.utils.data.DataLoader(      datasets.MNIST('data', train=True, download=True,                     transform=transforms.Compose([                         transforms.RandomHorizontalFlip(),  # transforms.RandomHorizontalFlip()為水平翻轉                         transforms.RandomVerticalFlip(),  # transforms.RandomHorizontalFlip()為上下翻轉                         transforms.RandomRotation(15),  # 隨機旋轉了-15°至15°                         transforms.ToTensor(),                         transforms.RandomRotation([90, 180, 270]),  # 或者自定義旋轉了90°, 180°, 270°                         transforms.Resize([32, 32]),  # 轉化到32*32                     ])),       batch_size=batch_size, shuffle=True)

還有Crop Part(裁剪)部分

局部增強,一般裁剪操作是配合圖片旋轉操作共同進行,先裁減掉一部分,再進行旋轉即可。

程式碼如下

train_loader = torch.utils.data.DataLoader(      datasets.MNIST('data', train=True, download=True,                     transform=transforms.Compose([                         transforms.RandomHorizontalFlip(),  # transforms.RandomHorizontalFlip()為水平翻轉                         transforms.RandomVerticalFlip(),  # transforms.RandomHorizontalFlip()為上下翻轉                         transforms.RandomRotation(15),  # 隨機旋轉了-15°至15°                         transforms.ToTensor(),                         transforms.RandomRotation([90, 180, 270]),  # 或者自定義旋轉了90°, 180°, 270°                         transforms.Resize([32, 32]),  # 轉化到32*32                         transforms.RandomCrop([28, 28])  # 先旋轉了15°,轉換成32*32,再取28*28部分                     ])),       batch_size=batch_size, shuffle=True)

還有一個不是很常見的操作Noise(雜訊處理)

pytorch中暫時還沒有相關介面,這裡不再贅述

要注意的是,這種數據增強的操作是會對模型的訓練有所幫助,因為它或多或少的增加了一些可用於學習的數據。

即便理論上他可以將少數的照片擴展成無數張照片,但作用並不會有那麼大。因為他們間的差別很小,反而會導致訓練時間延長。