- 数据增强的重要性:深度学习对数据量要求高,数据增强是解决训练集过拟合问题的有效手段,通过对现有数据进行变换,可扩充数据规模,提升模型泛化能力。
- 数据增强的实践操作
- 导包准备:使用
matplotlib.pyplot
用于数据可视化,PIL
的Image
模块处理图像,keras.preprocessing.image
替代opencv
操作图像,keras.backend
辅助图像操作,os
和glob
处理文件路径,numpy
进行数值计算。 - 查看原始数据:定义
print_result
函数展示图像,设置图像展示布局为 3 行 4 列,可展示 6 张图像。指定数据路径,读取特定文件夹下的图像数据,若文件夹中图像数量不足展示数量会报错,但不影响已读取图像的展示。 - 图像增强操作
- 调整图像大小:利用
ImageDataGenerator
设置target_size
,将图像统一调整为指定尺寸,如调整为 300×300 像素。通过flow_from_directory
函数指定源数据目录、批量大小、是否打乱数据、保存增强后图像的目录、文件名前缀等参数,执行next()
方法生成增强后的图像并保存。 - 角度旋转:设置
rotation_range
参数实现图像角度旋转,如设置为 45,表示图像可随机旋转 0 - 45 度。先读取数据,再进行数据增强和保存操作。 - 平移变换:通过
width_shift_range
和height_shift_range
分别设置图像在水平和垂直方向的平移范围,取值范围为 0 - 1,如设置为 0.3 表示可平移图像宽度或高度的 30%。 - 缩放操作:利用
zoom_range
设定缩放比例,如设置为 0.5 表示图像可在 0.5 倍(缩小)到 2 倍(放大)之间缩放。缩放可能导致图像位置空缺,有constant
(常量填充)、nearest
(最近邻填充)、reflect
(反射填充)、wrap
(循环填充)等填充方式。 - 通道移位(channel_shift):设置
channel_shift_range
实现通道移位,虽然肉眼难以察觉变化,但对计算机处理有影响,如设置为 15 表示通道值会在一定范围内移动。 - 翻转操作:通过
horizontal_flip=True
实现图像水平翻转,若想垂直翻转可添加vertical_flip=True
参数。此外,rescale
参数可对图像像素值进行重新缩放,将所有像素值映射到 0 - 1 之间。
- 调整图像大小:利用
- 导包准备:使用
- 猫狗训练实战:在猫狗分类任务中,分别定义训练数据生成器
train_datagen
和测试数据生成器test_datagen
。训练数据生成器对图像进行多种增强操作,包括重新缩放像素值、旋转、平移、错切、缩放、水平翻转等,并使用nearest
填充方式;测试数据生成器仅进行像素值重新缩放。通过flow_from_directory
函数分别从训练集和验证集目录读取数据,设置目标图像大小、批量大小和分类模式。最后使用model.fit_generator
函数进行模型训练,指定训练步数、训练轮数、验证数据和验证步数等参数。