国家建设工程网站,用wordpress做官网,怎么查询网站的设计公司名称,wordpress首页模板文件前言
Keras中有一个图像数据处理器ImageDataGenerator#xff0c;能够很方便地进行数据增强#xff0c;并且从文件中批量加载图片#xff0c;避免数据集过大时#xff0c;一下子加载进内存会崩掉。但是从官方文档发现#xff0c;并没有一个比较重要的图像增强方式#x…前言
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
第二个博客比较全第三个博客只介绍了分类数据的增强如果是图像分割或者超分辨率输出仍是一张图像所以涉及到对image和mask进行同步增强
代码
先介绍一下数据集目录结构
在test文件夹下分别有GT和NGT两个文件夹每个文件夹存储的都是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_datagenImageDataGenerator()#各种预处理
train_mask_datagenImageDataGenerator()#各种预处理读取文件 seed2 #图像会随机打乱即shuffle但是输入和输出的打乱顺序必须一样
batch_size2
target_size(1080,1920)
train_img_gentrain_img_datagen.flow_from_directory(./test,classes[NGT],class_modeNone,batch_sizebatch_size,target_sizetarget_size,shuffleTrue,seedseed,interpolationbicubic)
train_mask_gentrain_img_datagen.flow_from_directory(./test,classes[GT],class_modeNone,batch_sizebatch_size,target_sizetarget_size,shuffleTrue,seedseed,interpolationbicubic)封装打包 train_generatorzip(train_img_gen,train_mask_gen)定义裁剪器裁剪图像和对应的mask: def crop_generator(batch_gen,crop_size(270,480)):while True:batch_x,batch_ynext(batch_gen)crops_imgnp.zeros((batch_x.shape[0],crop_size[0],crop_size[1],3))crops_masknp.zeros((batch_y.shape[0],crop_size[0],crop_size[1],3))height,widthbatch_x.shape[1],batch_x.shape[2]for i in range(batch_x.shape[0]):#裁剪图像xnp.random.randint(0,height-crop_size[0]1)ynp.random.randint(0,width-crop_size[1]1)crops_img[i]batch_x[i,x:xcrop_size[0],y:ycrop_size[1]]crops_mask[i]batch_y[i,x:xcrop_size[0],y:ycrop_size[1]]yield (crops_img,crops_mask)使用裁剪器对Generator进行裁剪 train_cropscrop_generator(train_generator)可视化
img,masknext(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)死循环并且yield在while循环内部和for循环外部代表每个批次
代码 链接https://pan.baidu.com/s/1UNZLke5kygBFHJ8iR8wV2A 提取码e51e