数据增广

简介

在实际的深度学习项目中,数据集的需求是非常大的,强大的模型包含更多的参数,训练这些参数需要大量的数据;大量的数据训练使得模型的泛化能力变强,一定程度上克制过拟合的出现。

数据增广是对数据集进行倍增的有效手段,首次成功应用于AlexNet取得巨大的效果。对图片增广其主要含义为对原来的图片进行翻转(水平翻转和垂直翻转)、扭曲、变形、拉伸、填充、换色、裁减等手段产生新的图片,该图片近似于原图分布且对模型而言是全新的图片,从而达到获取更多训练数据且有标注(标注与原图一致或可以通过变换得到)的目的。

Keras作为一个成熟的方便的深度学习框架提供了很高效的图片数据增广的API,本项目将逐一演示其作用。

原则

数据增广的手段是以任务为驱动的,是对任务有利的而不是有害的。

不恰当的数据增广会干扰模型的训练,而不会提高模型效果。(如将手写数据垂直翻转没有意义,没有人的手写字是倒置的且会使模型难以拟合。)

不是所有时候数据增广都是有效果的,有时候即使正确的增广未必会达到预期的效果,这是模型的问题。

数据增广

  • 说明

    • Keras要求在创建生成器的时候就指定增广方式,所以对于训练数据和测试数据必须创建不同的生成器(要求训练数据一般情况下是不需要增广的)。**注意,生成器只是生成器,要想生成数据需要调用生成器的flow方法或者flow_*方法才能得到数据集,调用flow得到的生成器才是fit_generator方法需要的生成器。
    • 参数说明
      •   from keras.preprocessing.image import ImageDataGeneratorimport keras.backend as Ktrain_gen = ImageDataGenerator(featurewise_center=False,samplewise_center=False,featurewise_std_normalization=False,samplewise_std_normalization=False,rescale=1/255.,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,preprocessing_function=None,data_format=K.image_data_format())
        
      • 说明
        • featurewise_center:布尔型,输入数据集去中心化(均值为0)。
        • samplewise_center:布尔型,输入数据每个样本均值为0。
        • featurewise_std_normalization:布尔型,将输入样本除以数据集的标准差以完成标准化。
        • samplewise_std_normalization:布尔型,将输入样本除以样本自身的标准差以完成标准化。
        • rescale:数值型,重放缩因子,默认为None。如果为None或0则不进行放缩,否则会将该放缩因子乘到样本数据上(在应用任何其他变换之前),一般设定为1/255.用于图片归一化。
        • zca_whitening:布尔型,对输入数据进行ZCA白化。
        • zca_epsilon: 数值型,ZCA白化使用的eposilon,默认1e-6。
        • rotation_range:整型,增广时图片随机转动的角度,取值为0-180。
        • width_shift_range:数值型,图片宽度的某个比例值,增广时图片水平偏移的幅度。
        • height_shift_range:数值型,图片高度的某个比例值,增广时图片竖直偏移的幅度。
        • shear_range:数值型,剪切强度(逆时针方向的剪切变换角度)。
        • zoom_range:数值型或[low, high]的列表,随机缩放的幅度,数值型表示[low, high]=[1-zoom_range, 1+zoom_range]。
        • channel_shift_range:数值型,通道偏移的幅度。
        • fill_mode:‘constant’,‘nearest’,'reflect’或’wrap’取值之一,当增广越出边界按该值指定的方法处理。
        • cval:数值型,当fill_mode为’constant’时,越界点的填充值。
        • horizontal_flip:布尔型,是否随机进行水平翻转。
        • vertical_flip:布尔型,是否随机进行竖直翻转。
        • preprocessing_function:将被应用于每个输入的函数。该函数将在图片缩放和数据增广之后运行。该函数接受一个参数,为一张图片(ndarray),并且输出一个具有相同shape的ndarray。
        • data_format:'channel_first’或’channel_last’之一,代表图像的通道维的位置。numpy类型图片通道维在最后,如(224,224, 3)。
    • flow方法参数说明
      •   train_generator = train_gen.flow(X,y, batch_size=1, shuffle=True, seed=None, save_to_dir=None, save_prefix='', save_format='png')
        
      • 说明
        • flow方法会死循环地返回一批随机增广后数据及其标签(在y不为None时)。
        • X:样本数据,四维数据。黑白图像的channel轴的值为1,彩色图像为3。
        • y:与X第一维数值相同的标签数据。
        • batch_size:批尺寸大小,默认为32。
        • shuffle:是否随机打乱数据,默认为True。
        • save_to_dir:默认为None,字符串类型,图片存储目录,该参数能让你将增广后的图片保存本地。
        • save_prefix:字符串类型,保存增广后图片时使用的前缀(如train), 仅当设置了save_to_dir时生效。
        • save_format:‘png’或’jpeg’之一,指定保存图片的数据格式,默认’jpeg’。
        • seed:随机数种子,保证复现。
  • 增广

    • 代码

      •   train_gen = ImageDataGenerator(featurewise_center=False,samplewise_center=False,featurewise_std_normalization=False,samplewise_std_normalization=False,rescale=1/255.,zca_whitening=False,zca_epsilon=1e-6,rotation_range=15,width_shift_range=0.2,height_shift_range=0.2,shear_range=0.2,zoom_range=0.2,channel_shift_range=0.,fill_mode='nearest',cval=0.,horizontal_flip=True,vertical_flip=True,preprocessing_function=None,data_format=K.image_data_format())train_generator = train_gen.flow(X,y, batch_size=1, shuffle=True, seed=None, save_to_dir='gene', save_prefix='train', save_format='png')index = 0for (batch_x, batch_y) in train_generator:index += 1if index > 50:break
        
    • 结果
      • 可以看到,每一批都有概率进行了随机增广。

补充说明

本项目重点是数据增广,数据的多种读入方式没有过多提及。具体代码上传至我的Github,欢迎Star或者Fork。

Keras-数据增广相关推荐

  1. keras数据增广并保存到本地文件夹

    当需要对指定文件夹下的图片进行数据增广时,使用keras的ImageDataGenerator类的flow_from_directory()方法可快速的实现 1.首先实例化ImageDataGener ...

  2. 机器学习17:用Keras实现图片数据增广的方法和实践

    Keras图片增强 CNN中图片具有平移不变形,旋转不变形,如下图,而在实际应用中训练数据常常不足, 或不均衡, 因此我们可以通过增强数据,扩展训练集. 我们可以对现有的数据,进行平移.翻转.旋转.缩 ...

  3. 【深度学习】利用一些API进行图像数据增广

    [深度学习]利用一些API进行图像数据增广 文章目录 [深度学习]利用一些API进行图像数据增广 1 先送上一份最强的翻转代码(基于PIL) 2 Keras中的数据增强API种类概述 3 特征标准化 ...

  4. 常用数据增广方法,解决数据单一问题

    Datawhale干货 作者:陈信达,Datawhale优秀学习者 寄语:本文将对传统图像算法的数据增广方式进行学习,以最常用的平移和旋转为例,帮助大家梳理几何变换的概念和应用,并对其在OpenCV的 ...

  5. 计算机视觉的数据增广技术大盘点!附涨点神器,已开源!

    如果要把深度学习开发过程中几个环节按重要程度排个序的话,相信准备训练数据肯定能排在前几位.要知道一个模型网络被编写出来后,也只是一坨代码而已,和智能基本不沾边,它只有通过学习大量的数据,才能学会如何作 ...

  6. 谷歌简单粗暴“复制-粘贴”数据增广,刷新COCO目标检测与实例分割新高度

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 近日,谷歌.UC伯克利与康奈尔大学的研究人员公布了一篇论文 Sim ...

  7. python ssd目标检测_【目标检测】SSD amp; pyramidbox数据增广

    1.本文pyhton代码参考:DSFD数据增广,RandomBaiduCrop类的代码有重构,其他基本一致 2.标题图是用来数据增广的原图 SSD数据增广 SSD的数据增广堪称经典,论文中,使用数据增 ...

  8. 深度学习 之 数据增广(包含源码及注释文件更改)

    数据增广:平移,水平/垂直翻转,旋转,缩放,剪切,对比度,色彩抖动,噪声  #coding=utf-8 ################################################ ...

  9. 【深度学习】基于深度学习的数据增广技术一览

    ◎作者系极市原创作者计划特约作者Happy 周末在家无聊,偶然兴心想对CV领域常用的数据增广方法做个简单的调研与总结,重点是AI时代新兴的几种反响还不错的方法.各种第三方与官方实现代码等.那么今天由H ...

  10. Mixup vs. SamplePairing:ICLR2018投稿论文的两种数据增广方式

    在碎片化阅读充斥眼球的时代,越来越少的人会去关注每篇论文背后的探索和思考. 在这个栏目里,你会快速 get 每篇精选论文的亮点和痛点,时刻紧跟 AI 前沿成果. 点击本文底部的「阅读原文」即刻加入社区 ...

最新文章

  1. python批量提取word指定内容_使用python批量读取word文档并整理关键信息到excel表格的实例...
  2. Asp.Net 上传大文件专题(3)--从请求流中获取数据并保存为文件[下]
  3. 【Qt】Qt之网格布局
  4. margin折叠-从子元素margin-top影响父元素引出的问题
  5. thuinkphp5 input('post.arr1')接收数组出现:variable type error:array
  6. request技巧-utils的功能-cookie对象与字典的转换-URL编码与解码-关掉SSL验证
  7. MTK eCos系统的有线驱动收包流程
  8. 拓端tecdat|r语言中如何进行两组独立样本秩和检验
  9. 国二c语言程序设计分值分布,计算机二级分值
  10. django 数据库配置
  11. 配置git mergetool不产生*.orig文件
  12. Tiny C Compiler最小的C语言编译器
  13. 哇!8款帮你轻松瘦脸的美食
  14. android锁屏软件开发,Android一键锁屏开发全过程
  15. JS:随机数 或 获取验证码
  16. python中的_和__
  17. 一个程序员在北京买房的经历
  18. 手写call,apply,bind函数
  19. DM DISQL使用
  20. 华硕驱动问题,(触摸板可以用,可是手势不可以用,很多方法都试了,还是本机自带的东西好用)

热门文章

  1. G1与CMS的区别是什么
  2. ZkServer服务启动的逻辑-NIOServerCnxnFactory.configure
  3. 轻量级锁的加锁和解锁逻辑
  4. ES6新特性之字符串扩展
  5. MyBatis二级缓存的配置
  6. 字典-字典的统计、合并、清空操作
  7. Oracle之垂直水平分库分表(二)
  8. linux内核启动配置,启动linux内核配置
  9. 基于Hadoop的Spark超快安装
  10. USB的端点描述符详解-重新排版