深度学习-数据增强(keras+PIL)

背景

有朋友在进行yolo的训练过程中遇到了数量量不够的情况,毕竟标注数据是实在太困难,另外真实场景的数据也不是那么容易获得。那么该如何缓解这种窘境呢?答案就是数据增强。

数据增强方案

  • 合成增强,假如你想识别的是一个死的物体,比如煤气罐。。而你又不想自己在各种场景下去拍照制作训练数据,那么进行数据合成算是一个思路。如果是猫狗这种动物的话,最后还是老老实实的收集数据
  • 图像变换,利用keras,对图片的角度、颜色通道、透明度等进行图像变化 也能产生不同的样本。

数据增强的核心目标就是减少过拟合,使模型更容易收敛。

合成增强

合成增强可以直接使用python的PIL模块,先安装
pip install pillow

准备一下背景:
在这里插入图片描述
准备一下一个贴图:
在这里插入图片描述

# coding: utf-8

from PIL import Image


def paste(img1, img2):
    base_img = Image.open(img1)
    paste_img = Image.open(img2)

    top = 200
    left = 300
    base_img.save('image/merge1.png')  # 保存图片
    paste_img = paste_img.convert('RGBA')
    print('保存图片1')
    base_img.paste(paste_img, (top, left, top + paste_img.width, left + paste_img.height))
    print('保存图片2')
    base_img.save('image/merge2.png')  # 保存图片


paste('image/background.png', 'image/dog.png')

图像变换

# coding: utf-8

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('image/dog.png')  # 这是一个PIL图像
x = img_to_array(img)  # 把PIL图像转换成一个numpy数组,形状为(3, 150, 150)
x = x.reshape((1,) + x.shape)  # 这是一个numpy数组,形状为 (1, 3, 150, 150)

# 下面是生产图片的代码
# 生产的所有图片保存在 `preview/` 目录下
i = 0
for batch in datagen.flow(x, batch_size=1, save_to_dir='preview'):
    i += 1
    if i > 10:
        break  # 否则生成器会退出循环

参数说明:
featurewise_center=False # 将输入全部数据的均值设置为 0。一般不用
samplewise_center=False # 将每个样本的均值设置为 0。一般不用
featurewise_std_normalization=False # 将输入除以全部数据标准差。一般不用
samplewise_std_normalization=False # 将输入除以其标准差。一般不用
zca_whitening=False # 是否应用 ZCA 白化
zca_epsilon=1e-6 # ZCA 白化的 epsilon 值。常用
rotation_range=0 # 整数。随机旋转的度数范围。常用
width_shift_range=0. # 浮点数,水平平移百分比,不宜太大一般0.1,0.2
height_shift_range=0. # 浮点数,垂直平移百分比,不宜太大一般0.1,0.2
brightness_range=None # 浮点数,亮度调整
shear_range=0. # 浮点数,错切变换角度
zoom_range=0.0 # 浮点数[0,1],随机缩放。[llow,upp]:随机缩放范围。
channel_shift_range=0., # 浮点数[0.0,255.0],图像上色
fill_mode=‘nearest’ # 边界填充,一般默认
cval=0. # 一般不用
horizontal_flip=False # 水平翻转,常用
vertical_flip=False # 垂直翻转,看应用场景使用
rescale=None # 数据缩放,常用:1/255.0
preprocessing_function=None,
data_format=None,
validation_split=0.0 # 验证集划分。常用
dtype=None
注:每次变化都是随机的,暂时没有发现能返回变化参数信息
参考:https://www.jianshu.com/p/4c7795af350b

重点是ImageDataGenerator的方法:

  • flow
  • flow_from_directory
  • flow_from_dataframe

方法的使用实战未完待续

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值