一个非常简单的Keras HDF5图像数据生成器

h5imagegenerator的Python项目详细描述


Keras HDF5图像数据发生器

用于Keras:zap:

概述

有时您希望使用无法放入内存的大规模图像数据集。幸运的是,Keras提供了各种数据生成器,只需传递源路径,就可以直接从目录向网络提供小批量数据。但这种方法效率极低。在训练过程中,模型必须处理磁盘上的大量I/O操作,这会带来巨大的延迟。在

一种更有效的方法是利用HDF5数据结构,该结构针对I/O操作进行了优化。我们的想法是:(1)将原始图像及其标签存储到HDF5文件中,(2)创建一个生成器,实时加载和预处理小批量。在

这个图像生成器构建在KerasSequence类之上,对于多处理来说是安全的。它还使用了超快速图像处理相册库。在

安装/使用

要使用pip安装:

$ pip install h5imagegenerator

依赖关系

  • 煤油
  • Numpy公司
  • 专辑
  • h5py型

贡献

随时提出任何变更/请求。:咧嘴笑:

示例

首先,导入图像生成器类:

^{pr2}$

然后,创建新的图像生成器:

train_generator=HDF5ImageGenerator(src='path/to/train.h5',X_key='images,y_key='labels,scaler=True,labels_encoding='hot',batch_size=32,mode='train')
  • src:源HDF5文件
  • X_key:图像张量数据集的键(默认值为images
  • y\u key:标签数据集的键(默认值是labels
  • scaler:将输入缩放到范围[0,1](基本规范化)(默认值为True
  • labels_encoding:将其设置为hot以将整数标签转换为二进制矩阵(一个热编码), 将其设置为smooth以执行平滑编码(默认值为hot
  • batch\u size:每次迭代生成的样本数(默认值为32
  • mode:'train'生成图像样本和标签的元组,'test'只生成图像样本(默认值是'train'

注:

(1)使用smooth标签编码时,应提供smooth_因子(默认为0.1)。在

(2)存储在HDF5文件中的标签必须是整数或列表/整数元组列表,以防进行多标签分类。即:labels=[1, 2, 3, 6, 9] or labels=[(1, 2), (5, 9), (3, 9)]。。。在

有时您希望在运行中执行一些数据增强,以翻转、缩放、旋转或缩放图像。您可以将albumentations转换管道传递给生成器:

my_augmenter=Compose([HorizontalFlip(p=0.5),RandomContrast(limit=0.2,p=0.5),RandomGamma(gamma_limit=(80,120),p=0.5),RandomBrightness(limit=0.2,p=0.5),Resize(227,227,cv2.INTER_AREA)])train_generator=HDF5ImageGenerator(src='path/to/train.h5',X_key='images,y_key='labels,scaler=True,labels_encoding='hot',batch_size=32,augmenter=my_augmenter)

注:

(1)albumentations提供了ToFloat(max_value=255)转换,它将像素强度从[0,255]缩放到[0,1]。因此,在使用它时,必须关闭缩放:scaler=False。在

(2)如果您想应用标准化(mean/std),您可能需要使用albumentationsNormalize。在

(3)确保在使用evaluate_generator()predict_generator()时关闭数据扩充(augmenter=False)。在

最后,将生成器传递给模型:

model.compile(loss='categorical_crossentropy',metrics=['accuracy'],optimizer='rmsprop')# Example with fit:model.fit_generator(train_generator,validation_data=val_generator,workers=10,use_multiprocessing=True,verbose=1,epochs=1)# Example with evaluate:model.evaluate_generator(eval_generator,workers=10,use_multiprocessing=True,verbose=1,epochs=1)

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Spring 4升级后未加载java应用程序上下文   java Android 2.3.3 internet可以在我的Galaxy S上运行,但不能在我的Galaxy选项卡上运行?(许可?)   java通过不改变其原始位置对大小写字母进行排序   java Spring Boot一直在破坏我的电脑。。。sts的最佳配置是什么。Windows 10上的ini文件?   css Java Spring+引导问题   java Jackson将GeoJsonPoint序列化为纬度/经度   xml Java Transformer:如何将其结果生成OutputStream?   java如何更改字体、文本大小和设置文本位置?   在JavaSpringHibernate3.6.3中,如何告诉一个方法等待,直到获得锁,以及如何重试失败的事务?   java安卓服务代替线程   Java Swing使用鼠标移动JFrame