一.关于h5文件
h5文件是层次格式的第5代版本,用于存储科学数据的一种文件格式和库文件,由美国超级计算中心与应用中心研发的文件格式,用以存储和组织大规模数据.
一个h5文件中可以创建多个datasets
https://www.cnblogs.com/abella/p/11125466.html
二.遇到的问题
在训练模型时,需要读取两类上万张高分辨率图片并分块(一张1440*2560的图片划分为120个patch_size = 320*320的子块,将子块的Y通道保存在h5文件中),无法一次将所有数据读取然后存入h5文件,出现memory error
解决:
参考:https://www.jianshu.com/p/ae12525450e8
<1>在最开始创建h5文件及datasets
h5_file = h5py.File("my.h5", 'w') dataset1 = h5_file.create_dataset('dataset1', shape = (120, 320,320), maxshape=(None, 320,320), dtype=np.float32) dataset2 = h5_file.create_dataset('dataset2', shape = (120, 320,320), maxshape=(None, 320,320), dtype=np.float32)
dataset文件shape=(120, 320,320),一张图片被分为120个子块,每个子块大小为320*320,单通道,设置datasets最大值没有限制
<2>之后在原h5文件基础上进行添加
h5_file = h5py.File("my.h5", 'a') dataset1 = h5_file['dataset1'] dataset2 = h5_file['dataset2']
选择“a”模式在原始文件上进行修改
<3>将处理后的数据写入h5文件datasets,并扩展datasets,为保存下一张图片的120个patches作准备
dataset1[num*120:num*120+120,:] = data1 dataset2[num*120:num*120+120,:] = data2 dataset1.resize((dataset1.shape[0]+120,320,320)) dataset2.resize((dataset2.shape[0]+120,320,320))