Datawhale 零基础入门CV赛事-Task2 数据读取与数据扩增

  • 1 扩增目的

    • 从上一次打卡中我们得知本次训练数据较少,而且本次训练图片较小,所以我们不得不采用一定的数据扩充手段来扩大数据量,并且降低对图像的依赖。以期获得更好的成绩。

  • 2 常用的扩增手段

    • 图像翻转
    • 我根据本次问题的实际情况决定不采用图像翻转,因为数字翻转以后可能成为别的数字,比如$6翻转180°就成为了9$,数字不光要根据形状,还要根据摆放确定,所以翻转以后效果可能会适得其反。
    • 图像切割
    • 图像切割也不能直接使用,但是在本次中这是一种完全可用的方法,我们需要把图像按照数字切割出来。这样会极大的增加数据量,也增加训练量。
    • 图像颜色
    • 另一类增广方法是变化颜色。我们可以从4个方面改变图像的颜色:亮度、对比度、饱和度和色调。显然这在本次问题中是一种切实可行的图像扩增方案
  • 3 数据扩增代码
通过torchvision.transforms模块创建RandomHorizontalFlip实例来实现一半概率的图像水平(左右)翻转
apply(img, torchvision.transforms.RandomHorizontalFlip())

创建RandomVerticalFlip实例来实现一半概率的图像垂直(上下)翻转
apply(img, torchvision.transforms.RandomVerticalFlip())

每次随机裁剪出一块面积为原面积10%∼100%的区域,且该区域的宽和高之比随机取自0.5∼2,然后再将该区域的宽和高分别缩放到200像素。若无特殊说明,本节中aa和bb之间的随机数指的是从区间[a,b]中随机均匀采样所得到的连续值。
shape_aug = torchvision.transforms.RandomResizedCrop(200, scale=(0.1, 1), ratio=(0.5, 2))
apply(img, shape_aug)

将图像的亮度随机变化为原图亮度的50%(1−0.5)∼150%(1+0.51)。
apply(img, torchvision.transforms.ColorJitter(brightness=0.5))
随机变化图像的色调
apply(img, torchvision.transforms.ColorJitter(hue=0.5))
随机变化图像的对比度
apply(img, torchvision.transforms.ColorJitter(contrast=0.5))
随机的调整以上四个参数
color_aug = torchvision.transforms.ColorJitter(
    brightness=0.5, contrast=0.5, saturation=0.5, hue=0.5)
apply(img, color_aug)

通过Compose实例将上面定义的多个图像增广方法叠加起来,再应用到每张图像之上。
augs = torchvision.transforms.Compose([
    torchvision.transforms.RandomHorizontalFlip(), color_aug, shape_aug])
apply(img, augs)
Last modification:May 23rd, 2020 at 09:45 am
If you think my article is useful to you, please feel free to appreciate