将数据集从 1 个 HDF5 文件提取到多个文件

Extracting datasets from 1 HDF5 file to multiple files

我实际上提出了一个关于从 HDF5 生成 img 的问题。 现在,我遇到的另一个问题是从现有的生成 h5。

例如,我有一个[ABC.h5],里面有图像数据集及其gt_density地图。键是 [images, density_maps]

我想要 [GT_001.h5]、[GT_002.h5]... 而不是单个 h5 文件。 这是为每个图像提取的 [density_maps]。

如何实现?非常感谢。

[编辑] 这里有更多相关信息。感谢@kcw78 的指导。 在 CRSNet 的原始数据集中,h5 中有一个图像文件及其地面真值密度图。此密度图是 。 因此,在这个数据集中,对于每个 IMG_001.jpg,都有一个根据 IMG_001.h5.

在我的数据集中,它是一个包含以下信息的 h5 文件: HDF5 数据集“density_maps”:形状 (300, 380, 676, 1),键入“

我已经成功地从文件中生成了相应的图像。因此,我目前的问题是如何将数据集循环复制到另一个新的 h5 中,并为每个图像构建相应的密度图 h5。用一个例子来解释,我怎样才能从这个单一的 H5PY 文件

中实现 IMG_001.h5...

这根据我对您的数据的解释回答了您的问题。如果不能解决您的问题,请在下面说明摘要。

首先,请注意“数据集”一词。它与h5py有特定的含义。您使用“数据集”来指代用于训练和测试 CNN 的一组数据。当还有数据集 IN 一个 HDF5 文件时,这就变得困难了。

根据您的解释,这是我对您用于训练和测试的不同文件的理解。

您在 CRSNet 中的原始训练和测试数据集:
图像文件:IMG_###.jpg
地面实况密度图文件:IMG_###.h5 属性:name="density";形状=(544, 932); type="
您有成对的图像和密度文件 -- IMG_001 到 IMG_NNN.

的 1 个 .jpg 和 .h5 文件

你的新训练集和测试集:
H5 文件名: [ABC.h5]
H5 数据集 1: name="images": shape=(300, 380, 676, 1), type="|u1"
H5 数据集 2: name="density_maps", shape=(300, 380, 676, 1), type="

您已从该 .h5 文件中的“图像”数据集中提取数据以创建 IMG_###.jpg(就像您的原始训练和测试数据集)。现在您想从 .h5 文件中的“density_maps”数据集中提取数组以创建 IMG_###.h5.

如果是,则过程与图像提取过程相同。唯一的区别是您将数据写入 .h5 文件而不是 .jpg 文件。请参阅下面的伪代码。

with h5py.File('yourfile.h5','r') as h5r:
    for i in range(h5r['density_maps'].shape[0]):
        dmap_arr = h5r['density_maps'][i,:] 
        h5w=h5py.File(f'IMG_{i:03}.h5','w')
        h5w.create_dataset('density_maps',data=dmap_arr)
        h5w.close()
        

请注意,当您阅读 dmap_arr 时,您可能会得到 shape=(380, 676, 1)。如果是这样,您可以使用 .reshape(380, 676) 进行整形。像这样:

        dmap_arr = h5r['density_maps'][i,:].reshape(380, 676)