HDF5数据的打包与使用(以图像数据为例)

简介: HDF5 数据是存储在一种名为 Hierarchical Data Format version 5 (HDF5) 的二进制文件格式中的数据。这种文件格式可以用来存储大量的多维数据,并且提供了很多的功能来帮助用户组织和管理数据。

注:此篇内容主要作为使用PyTorch构建GAN生成对抗网络博客中,HDF5数据类型的补充介绍。


1 什么是HDF5数据


HDF5 数据是存储在一种名为 Hierarchical Data Format version 5 (HDF5) 的二进制文件格式中的数据。这种文件格式可以用来存储大量的多维数据,并且提供了很多的功能来帮助用户组织和管理数据。


HDF5 数据文件中包含了一系列的数据集,每个数据集都是一个多维数组。数据集的维度可以是任意的数量,并且每个数据集都可以有自己的属性。这使得 HDF5 文件格式非常适合用来存储大量的数值型数据,比如图像、音频、视频等。


72163b3d298742ac8cb693fbfbdddbf8.png


HDF5文件格式主要有以下特点:


大小:HDF5 数据文件可以非常大,可以达到几十 GB 甚至几 TB。

数据类型:HDF5 文件可以存储各种各样的数据类型,包括整数、浮点数、字符串、布尔值等。

多维数组:HDF5 文件中的数据集是多维数组,每个数据集都可以有任意数量的维度。

数据压缩:HDF5 文件支持数据压缩,可以使用不同的压缩算法来压缩数据集。

数据分块:HDF5 文件中的数据集可以被分成若干个数据块,每个数据块可以单独读取。这使得 HDF5 文件在处理大型数据集时非常高效。

索引:HDF5 文件可以使用索引来快速访问数据集中的元素。

属性:HDF5 文件中的数据集可以有自己的属性,每个属性都是一个键-值对。

2 HDF5数据格式的生成


以CelebA数据集为例,在官网下载时,我们将会得到一个压缩包,里面包含人脸图片与属性标注,如果希望将人脸图片转入到HDF5中的数据集中,可参考的代码如下:


hdf5_file = '你希望的h5py存放地'

Celeba_file='你的数据存放地'

total_images = 10000 # 你需要打包的图片数量


with h5py.File(hdf5_file, 'w') as hf:
    count = 0
    with zipfile.ZipFile(Celeba_file, 'r') as zf:
        for i in zf.namelist():
            if (i[-4:] == '.jpg'):
                # 图片提取
                ofile = zf.extract(i)
                img = imageio.imread(ofile)
                os.remove(ofile)
                # 添加数据到HDF5文件
                hf.create_dataset('img_align_celeba/' + str(count) + '.jpg', data=img, compression="gzip", compression_opts=9)
                # 停止控制
                if (count == total_images):
                    break



对上面的代码进行一下讲解:首先我们打开了你下载的人脸数据 zip 文件(官方提供的数据格式就是压缩包的形式,我们下载后也不需要对其解压),并遍历文件中的所有文件名。如果文件名的扩展名是 .jpg,则提取该文件并将其读取为一个图像数组。将图像数组写入一个 HDF5 文件中,保存在你希望的h5py存放地目录下,文件名为递增的数字。

当读取了指定数量的图像时,停止读取过程。之所以设置了停止功能,是因为这个数据集的数据量比较大,有时实验并不需要数据集的全部内容。在处理大型数据集时,也可以添加计数器功能,每处理一定量的文件进行打印进程。


3 HDF5数据的查看


打开数据集可以使用常规的with…as语法:

with h5py.File('数据集位置.h5py', 'r') as file_object:  
   for group in file_object:
      print(group)


这段代码用于查看HDF5文件中的数据组名,输出是img_align_celeba,这是因为我们前面在制作HDF5文件时,指定的路径就是保存在img_align_celeba下,所以这些保存进去的数据都被认为是img_align_celeba组中的数据。

with h5py.File('数据集位置.h5py', 'r') as file_object:
   dataset = file_object['img_align_celeba']
   image = numpy.array(dataset['1.jpg'])
   plt.imshow(image, interpolation='none')
   plt.show()


前面我们制作数据集时,指定了数据集中数据的命名规则是图片序号+‘jpg’,所以可以通过类似字典的方式,打开img_align_celeba数据组中的第一张图片。再通过plt绘制出图片,以判断数据集读取是否成功。执行成功后,应该能看到如下图片:




849823889ee84e849fb82f4f5d166a6b.png

同时,我们可以看一下这个数据的大小:


print(image.shape)


输出的是(218, 178, 3)。说明这个图片的像素是218*178,3代表的是RGB三层数据。


相关文章
|
C语言 Perl 存储
优化求解器之MPS文件的格式简介
在使用MindOpt优化求解器解决实际问题时,其中重要的一环在于如何建立优化模型,以及存储优化模型以便于作为求解器的输入文件。存储优化模型的文件,其关键在于定义一种清晰的格式,用来说明优化模型的数学结构和相关的数据。接下来我们将发布一系列文章,对常见的MPS/LP等格式的模型文件和命名规范进行简要的介绍。
优化求解器之MPS文件的格式简介
|
1月前
步骤 5统计每个子文件夹语音文件数量
【10月更文挑战第9天】步骤 5统计每个子文件夹语音文件数量.
29 1
|
5月前
|
存储 运维 Cloud Native
函数计算产品使用问题之SD常用模型插件是否都需要自己下载模型或者上传吗
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
5月前
|
运维 Cloud Native Serverless
函数计算产品使用问题之下载vae是安装到哪个目录
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
5月前
|
运维 Serverless API
函数计算产品使用问题之上传了几个g的模型到sd目录之后,无法打开,同时也无法打开webui,是什么导致的
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
5月前
|
机器学习/深度学习 运维 监控
函数计算产品使用问题之如何解决SD插件安装后不显示的问题
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
6月前
防止图片重复下载方案,图像压缩保存与压缩显示
防止图片重复下载方案,图像压缩保存与压缩显示
65 0
|
6月前
|
Serverless API 计算机视觉
函数计算FC的Stable Diffusion(SD)应用支持一次性生成多张图
【2月更文挑战第6天】函数计算FC的Stable Diffusion(SD)应用支持一次性生成多张图
139 1
|
Linux
Linux下采集摄像头的图像再保存为JPG图片存放到本地(YUYV转JPG)
Linux下采集摄像头的图像再保存为JPG图片存放到本地(YUYV转JPG)
2019 1
Linux下采集摄像头的图像再保存为JPG图片存放到本地(YUYV转JPG)
ENVI_IDL:(批量处理)如何对HDF5文件进行GLT文件的创建并进行几何校正最终输出为IMG格式?
ENVI_IDL:(批量处理)如何对HDF5文件进行GLT文件的创建并进行几何校正最终输出为IMG格式?
183 0