一个非常简单的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)
- 项目
标签: