Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance 如何使用h5py加速gzip压缩?_Performance_Compression_Hdf5_H5py - Fatal编程技术网

Performance 如何使用h5py加速gzip压缩?

Performance 如何使用h5py加速gzip压缩?,performance,compression,hdf5,h5py,Performance,Compression,Hdf5,H5py,我正在尝试使用h5py将mp4视频的帧存储到hdf5中。起初,我只是尝试不压缩数据。这导致存储在hdf5中的5000 MB视频约为500 GBs。我正在尝试使用gzip压缩来使数据集更易于管理,但是使用压缩存储视频的单个帧大约需要一分钟。下面是一个简单的代码示例 import h5py hdf5 = h5py.File(file, mode='a') dset = hdf5.create_dataset(dset_name, shape=(70000, 1080, 1920, 3),

我正在尝试使用h5py将mp4视频的帧存储到hdf5中。起初,我只是尝试不压缩数据。这导致存储在hdf5中的5000 MB视频约为500 GBs。我正在尝试使用gzip压缩来使数据集更易于管理,但是使用压缩存储视频的单个帧大约需要一分钟。下面是一个简单的代码示例

import h5py
hdf5 = h5py.File(file, mode='a')
dset = hdf5.create_dataset(dset_name, shape=(70000, 1080, 1920, 3), 
    dtype=np.uint8, chunks=True, compression='gzip')

for i, frame in enumerate(video_stream):
    dset[i] = frame

每个视频都有大约70e3张1080p rbg图像。video_stream是一个对象,迭代时返回(10801920,3)个数组。如果你认为这很重要,你可以看看。那么,如何以合理的速度将这些数据存储到hdf5中,并最终获得合理的文件大小呢?有可能接近mp4压缩吗

MP4是一种非常先进的标准,专门设计用于存储视频,通常具有硬件加速功能。当它能够在50亿字节内打包超过4000亿个值时,您就会看到它的效率

HDF5不是视频标准,GZip也不太适合视频。Python可能并不重要,因为gzip压缩可能是用C编写的,但应该注意的是,代码是单线程的。总之,你不会得到任何接近MP4的东西


老实说,你为什么还要尝试?我怀疑你对视频数据还没有太多的亲和力

MP4是一种非常先进的标准,专门设计用于存储视频,通常具有硬件加速功能。当它能够在50亿字节内打包超过4000亿个值时,您就会看到它的效率

HDF5不是视频标准,GZip也不太适合视频。Python可能并不重要,因为gzip压缩可能是用C编写的,但应该注意的是,代码是单线程的。总之,你不会得到任何接近MP4的东西


老实说,你为什么还要尝试?我怀疑你对视频数据还没有太多的亲和力

你说得对,我对视频数据没有太多经验。我在视频数据上训练神经网络。现在我只是用我的视频流从视频文件中提取图像并将其输入神经网络,但这需要很长时间,最终成为我程序的瓶颈。我测试了将一个视频传输到hdf5。速度快得多,但占用空间太大。我希望找到一种方法来快速从视频中提取图像,而不必为每个视频占用大约半TB的存储空间。@mdornfe1:首先要了解的是,相邻的视频帧非常相似,因此MP4不会压缩单个帧,因此从MP4中解压缩单个帧的成本相当高。尽管如此,您的GPU仍将忙于处理一批图像(您正在GPU上使用CNN?),因此只需开始在CPU上并行解压缩下一批图像。谢谢,我认为这可能是解决方案。您是对的,我对视频数据没有太多经验。我在视频数据上训练神经网络。现在我只是用我的视频流从视频文件中提取图像并将其输入神经网络,但这需要很长时间,最终成为我程序的瓶颈。我测试了将一个视频传输到hdf5。速度快得多,但占用空间太大。我希望找到一种方法来快速从视频中提取图像,而不必为每个视频占用大约半TB的存储空间。@mdornfe1:首先要了解的是,相邻的视频帧非常相似,因此MP4不会压缩单个帧,因此从MP4中解压缩单个帧的成本相当高。尽管如此,您的GPU仍将忙于处理一批图像(您正在GPU上使用CNN?),因此只需开始在CPU上并行解压缩下一批图像。谢谢,我认为这可能是解决方案。