列表

详情


64. 生成对抗网络比起常用的数据增强为什么有效,有效在哪里

回答思路

常用的数据增强包括:

几何变换(Geometric Transformations)

颜色变换(Color Space)

旋转|反射变换(Rotation/Reflection)

噪声注入(Noise Injection)

混合图像(Mix)

随机擦除(Random Erasing)

缩放变换(Zoom)

翻转变换(Flipping)

裁剪(Cropping)

但这些常用的数据增广无法解决特定场景的复杂的问题,比如对于行人检测而言,我们白天采集数据,然后用白天采集的数据训练模型,把这个模型用到晚上,就会发现效果很差。于是,你不得不晚上再去采集数据。当然,AugGAN的存在让你不再需要晚上再去采集数据。这里有个原因是,白天数据和晚上数据其实冗余成分很大,只是数据域(domain)的不同。如果能把一个数据域的数据搬移到另一个数据域,是不是就增强了数据呢?我们可以通过白天的数据来生成晚上的数据;我们可以通过夏天的数据生成冬天的数据;我们也可以通过晴天的数据生成雾霾的数据……

也就是说,利用生成对抗网络,我们可以很方便地生成海量的复杂数据,有的放矢,有针对性地补足数据,提升模型性能。

这里也给出了一个数据增广的demo,以及对应的可视化结果。

import numpy as np import imgaug as ia import imgaug.augmenters as iaa   images = np.array(     [ia.quokka(size=(64, 64)) for _ in range(32)],     dtype=np.uint8 )  seq = iaa.Sequential([      #随机水平翻转     iaa.Fliplr(0.5),      #随机裁剪     iaa.Crop(percent=(0, 0.1)),      #以50%的概率进行高斯模糊     iaa.Sometimes(         0.5,         iaa.GaussianBlur(sigma=(0, 0.5))     ),     #调整对比度     iaa.LinearContrast((0.75, 1.5)),     #添加高斯噪声     iaa.AdditiveGaussianNoise(loc=0, scale=(0.0, 0.05*255), per_channel=0.5),     #调整亮度     iaa.Multiply((0.8, 1.2), per_channel=0.2),     #仿射变换     iaa.Affine(         scale={"x": (0.8, 1.2), "y": (0.8, 1.2)},         translate_percent={"x": (-0.2, 0.2), "y": (-0.2, 0.2)},         rotate=(-25, 25),         shear=(-8, 8)     ) ], random_order=True) #乱序  images_aug = seq(images=images)   #画图import matplotlib.pyplot as plt %matplotlib inline for i in range(len(images_aug)):     plt.subplot(4, 8, i+1)     plt.axis('off')     plt.imshow(images_aug[i]) plt.show()

数据增广的可视化结果,一张图瞬间变成了32份,有效提高模型的泛化能力

上一题