Heretic0224

卷积神经网络 --- 数据增强

(注:本文将着重介绍数据增强的方法,具体原理不再阐述)

数据增强介绍

  使用机器学习方法,尤其时涉及到深度学习时,小数据集常常会导致我们的模型过度拟合,而不能获得较好的泛化能力,此时我们就需要借助一些特殊的方法来解决这个问题。在众多方法中,最简单且常用的就是数据增强技术了。

  在计算机视觉领域,数据增强是一种非常强大的降低过拟合的技术。过拟合的原因一般都是可用于训练的样本数据太少,如果拥有无限多的数据,那么模型将可以学习到所有数据的分布,并且永远不会过拟合。数据增强就是由此入手,通过对原始图像数据的随机变换来生成更多的训练数据。

  数据增强的目标是通过不同的方式来呈现训练数据,对于人类而言这是无效的,因为无论如何都是同一个东西,但是对于机器模型而言,从不同角度表示的图像就意味新的数据,由此可以数据增强其实是最大程度地利用了原始数据,来增强模型的泛化能力。

下面将介绍Keras中进行数据增强的方法。

 

Keras中的数据增强

  Keras是深度学习经常用到的框架,因此对于数据增强来说是一个绝佳的实践场所。在Keras中,可以通过对ImageDataGenerator实例读取的图像执行多次随机变换来实现。举个例子。

 

datagen = ImageDataGenerator(
           rotation_range=40,
           width_shift_range=0.2,
           height_shift_range = 0.2,
           shear_range = 0.2,
           zoom_range = 0.2,
           horizontal_flip = True,
           fill_mode = 'nearest')  
  • rotation_range是角度值,表示图像随机旋转的角度范围
  • width_shift 和 height_shift是图像在水平或垂直方向上平移的范围(相对于总宽度或总高度的比例)
  • shear_range是随机错切变换的角度
  • zoom_range是图像随机缩放的范围
  • horizontal_flip是随机将一半的图像水平翻转
  • fill_mode是用于填充新创建像素的方法。

增强后效果如下

                                                                                    

          图1  随机旋转                                   图2  水平平移                                            图3  垂直平移 

                    

        图4  随机错切                                    图5  随机缩放                                            图6  水平翻转

具体操作代码如下:

from keras.preprocessing.image import ImageDataGenerator, array_to_img, img_to_array, load_img

datagen = ImageDataGenerator(
#rotation_range=40,
#width_shift_range=0.2,
#height_shift_range=0.2,
#shear_range=0.2,
#zoom_range=0.2,
horizontal_flip=True,
fill_mode='nearest')

#如果指向执行一种数据增强方法只需选定一个方法就行,当全部选定时,生成的图片将满足所有的条件

 

img = load_img('cat.jpg') # 导入图片
x = img_to_array(img) # 将图像转换成一个numpy数组,其形状为(3, 150, 150)
x = x.reshape((1,) + x.shape) # numpy数组其形状为(1, 3, 150, 150)


# 生成的图片将保存在 'databag/' 目录下
i = 0
for batch in datagen.flow(x, batch_size=1,save_to_dir='databag'):
i += 1
if i > 1:# 一次只生成2张,这里可根据自己的情况调整
break # 生成器退出循环

  下面将给出ImageDataGenerator中的剩余部分的参数,其使用方法与上述方法一直,具体的参数可以根据具体的场景调整,另外附上ImageDataGenerator的官方说明链接,可以深入了解。

datagen = ImageDataGenerator(
        featurewise_center=False,         samplewise_center=False,         featurewise_std_normalization=False,         samplewise_std_normalization=False,         zca_whitening=False,         zca_epsilon=1e-6,         rotation_range=0.,         width_shift_range=0.,         height_shift_range=0.,         shear_range=0.,         zoom_range=0.,         channel_shift_range=0.,         fill_mode='nearest',         cval=0.,         horizontal_flip=False,         vertical_flip=False,         rescale=None,         preprocessing_function=None,         data_format=K.image_data_format())

 

 

 ImageDataGenerator的官方说明: https://keras.io/preprocessing/image/

 

posted on 2020-09-24 21:22  Heretic0224  阅读(784)  评论(0编辑  收藏  举报

导航