卷积神经网络 --- 数据增强
(注:本文将着重介绍数据增强的方法,具体原理不再阐述)
数据增强介绍
使用机器学习方法,尤其时涉及到深度学习时,小数据集常常会导致我们的模型过度拟合,而不能获得较好的泛化能力,此时我们就需要借助一些特殊的方法来解决这个问题。在众多方法中,最简单且常用的就是数据增强技术了。
在计算机视觉领域,数据增强是一种非常强大的降低过拟合的技术。过拟合的原因一般都是可用于训练的样本数据太少,如果拥有无限多的数据,那么模型将可以学习到所有数据的分布,并且永远不会过拟合。数据增强就是由此入手,通过对原始图像数据的随机变换来生成更多的训练数据。
数据增强的目标是通过不同的方式来呈现训练数据,对于人类而言这是无效的,因为无论如何都是同一个东西,但是对于机器模型而言,从不同角度表示的图像就意味新的数据,由此可以数据增强其实是最大程度地利用了原始数据,来增强模型的泛化能力。
下面将介绍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) 编辑 收藏 举报