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中暂时还没有相关接口,这里不再赘述

要注意的是,这种数据增强的操作是会对模型的训练有所帮助,因为它或多或少的增加了一些可用于学习的数据。

即便理论上他可以将少数的照片扩展成无数张照片,但作用并不会有那么大。因为他们间的差别很小,反而会导致训练时间延长。