前言

Keras中有一个图像数据处理器ImageDataGenerator,能够很方便地进行数据增强,并且从文件中批量加载图片,避免数据集过大时,一下子加载进内存会崩掉。但是从官方文档发现,并没有一个比较重要的图像增强方式:随机裁剪,本博客就是记录一下如何在对ImageDataGenerator中生成的batch做图像裁剪

国际惯例,参考博客:

官方ImageDataGenerator文档

Keras 在fit_generator训练方式中加入图像random_crop

Extending Keras’ ImageDataGenerator to Support Random Cropping

how to use fit_generator with multiple image inputs

第二个博客比较全,第三个博客只介绍了分类数据的增强,如果是图像分割或者超分辨率,输出仍是一张图像,所以涉及到对imagemask进行同步增强

代码

先介绍一下数据集目录结构:

test文件夹下,分别有GTNGT两个文件夹,每个文件夹存储的都是bmp图像文件

其次需要注意,从ImageDataGenerator中取数据用的是next(generator)函数

  • 载入相关包

    from keras_preprocessing.image import ImageDataGenerator
    import matplotlib.pyplot as plt
    import numpy as np
    
  • 先使用自带的ImageDataGenerator配合flow_from_director读取数据
    创建生成器

    train_img_datagen=ImageDataGenerator()#各种预处理
    train_mask_datagen=ImageDataGenerator()#各种预处理
    

    读取文件

    seed=2 #图像会随机打乱即shuffle,但是输入和输出的打乱顺序必须一样
    batch_size=2
    target_size=(1080,1920)
    train_img_gen=train_img_datagen.flow_from_directory('./test',classes=['NGT'],class_mode=None,batch_size=batch_size,target_size=target_size,shuffle=True,seed=seed,interpolation='bicubic')
    train_mask_gen=train_img_datagen.flow_from_directory('./test',classes=['GT'],class_mode=None,batch_size=batch_size,target_size=target_size,shuffle=True,seed=seed,interpolation='bicubic')
    

    封装打包

    train_generator=zip(train_img_gen,train_mask_gen)
    
  • 定义裁剪器,裁剪图像和对应的mask:

    def crop_generator(batch_gen,crop_size=(270,480)):while True:batch_x,batch_y=next(batch_gen)crops_img=np.zeros((batch_x.shape[0],crop_size[0],crop_size[1],3))crops_mask=np.zeros((batch_y.shape[0],crop_size[0],crop_size[1],3))height,width=batch_x.shape[1],batch_x.shape[2]for i in range(batch_x.shape[0]):#裁剪图像x=np.random.randint(0,height-crop_size[0]+1)y=np.random.randint(0,width-crop_size[1]+1)crops_img[i]=batch_x[i,x:x+crop_size[0],y:y+crop_size[1]]crops_mask[i]=batch_y[i,x:x+crop_size[0],y:y+crop_size[1]]yield (crops_img,crops_mask)
    
  • 使用裁剪器对Generator进行裁剪

    train_crops=crop_generator(train_generator)
    

可视化:

img,mask=next(train_crops)
print(img.shape)
plt.subplot(2,1,1)
plt.imshow(img[0]/255)
plt.subplot(2,1,2)
plt.imshow(mask[0]/255)

后记

记住要用while(True)死循环,并且yieldwhile循环内部,和for循环外部,代表每个批次

代码:
链接:https://pan.baidu.com/s/1UNZLke5kygBFHJ8iR8wV2A
提取码:e51e

【TensorFlow-windows】keras接口——ImageDataGenerator裁剪相关推荐

  1. 【TensorFlow-windows】keras接口——利用tensorflow的方法加载数据

    前言 之前使用tensorflow和keras的时候,都各自有一套数据读取方法,但是遇到一个问题就是,在训练的时候,GPU的利用率忽高忽低,极大可能是由于训练过程中读取每个batch数据造成的,所以又 ...

  2. windows安装TensorFlow和Keras遇到的问题及其解决方法

    windows安装TensorFlow和Keras遇到的问题及其解决方法 参考文章: (1)windows安装TensorFlow和Keras遇到的问题及其解决方法 (2)https://www.cn ...

  3. 加快Tensorflow和Keras图像数据集的训练速度

    这几天在训练一个CNN网络,使用到了两百多万个图片,虽然使用到了GPU NVIDIA GeForce GTX 1080Ti,但是还是很慢.故查阅了一些训练提速的文章,跟大家分享. Tensorflow ...

  4. 2_初学者快速掌握主流深度学习框架Tensorflow、Keras、Pytorch学习代码(20181211)

    初学者快速掌握主流深度学习框架Tensorflow.Keras.Pytorch学习代码 一.TensorFlow 1.资源地址: 2.资源介绍: 3.配置环境: 4.资源目录: 二.Keras 1.资 ...

  5. 深度学习:常见深度学习框架【Theano、TensorFlow、Keras、Caffe/Caffe2、MXNet、CNTK、PyTorch】

    常见的深度学习框架有 TensorFlow .Caffe.Theano.Keras.PyTorch.MXNet等,如下图所示.这些深度学习框架被应用于计算机视觉.语音识别.自然语言处理与生物信息学等领 ...

  6. 主流深度学习框架对比(TensorFlow、Keras、MXNet、PyTorch)

    近几年来,深度学习的研究和应用的热潮持续高涨,各种开源深度学习框架层出不穷,包括TensorFlow,Keras,MXNet,PyTorch,CNTK,Theano,Caffe,DeepLearnin ...

  7. 【TensorFlow-windows】keras接口——卷积手写数字识别,模型保存和调用

    前言 上一节学习了以TensorFlow为底端的keras接口最简单的使用,这里就继续学习怎么写卷积分类模型和各种保存方法(仅保存权重.权重和网络结构同时保存) 国际惯例,参考博客: 官方教程 [注] ...

  8. TensorFlow和Keras入门必读教程

    导读:本文对TensorFlow的框架和基本示例进行简要介绍. 作者:本杰明·普朗什(Benjamin Planche)艾略特·安德烈斯(Eliot Andres) 来源:大数据DT(ID:hzdas ...

  9. Win10安装GPU版tensorflow和keras

    Win10安装GPU版tensorflow和keras 1.python安装 在此选用python3.7安装见详细教程https://blog.csdn.net/weixin_43545253/art ...

最新文章

  1. 最全Pycharm教程(43)——Pycharm扩展功能之UML类图使用 代码结构
  2. 智能指针shared_ptr的用法
  3. forall oracle 游标,FORALL用法小结
  4. element显示true或者false_vue+element-ui实现行数可控的表格输入
  5. show processlist解析
  6. Annihilate(SA)
  7. java 内省学习笔记
  8. “我,程序员,33岁,距离退休,只剩2年了!”
  9. 认识RabbitMQ交换机模型
  10. CCF201512-4 送货(100分)
  11. 图档生成bin文件_「嵌入式笔记」hex文件、bin文件、axf文件的区别?
  12. 微信公众号从测试号迁移到正式号
  13. 专插本计算机二级英语四级,专插本考试需要英语四级吗?
  14. 唱好铁血丹心谐音正规_铁血丹心(谐音歌词)
  15. 基于单片机自制MP3播放器,开源所有电路图,单片机程序
  16. 鸿蒙3.0来了,这次,我真的想批评鸿蒙了
  17. 信息安全考研和就业的选择分析
  18. Flink on yarn集群HA配置
  19. 什么是大数据?大数据的特征有哪些?
  20. 做程序员必须懂英语吗?_您必须懂英语才能成为程序员吗?

热门文章

  1. 语言舒尔特方格程序_有效提升孩子注意力的方法,舒尔特方格训练法,简单有效...
  2. 一个按键控制数码管的开和关_一个按键控制一个数码管
  3. java thread_Java(多线程Thread)
  4. 【图像超分辨率】Understanding Deformable Alignment in Video Super-Resolution
  5. java指针的数组_java 指针 数组的使用
  6. 在Virtualbox下为Ubuntu16.04开机自动挂载共享目录的最佳方法
  7. linux-shell命令之rmdir(remove dir)【删除目录】
  8. python学习: 如何循序渐进学习Python语言
  9. 感知算法论文(二)Pelee: A Real-Time Object Detection System on Mobile Devices(2018)译文
  10. 深度学习与计算机视觉(二)线性SVM与Softmax分类器