Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.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
如何从视频数据集生成数据集(tensorflow优先)_Tensorflow_Dataset_Pytorch_Hdf5_Tfrecord - Fatal编程技术网

如何从视频数据集生成数据集(tensorflow优先)

如何从视频数据集生成数据集(tensorflow优先),tensorflow,dataset,pytorch,hdf5,tfrecord,Tensorflow,Dataset,Pytorch,Hdf5,Tfrecord,各位 现在我有一个对象分类任务,我有一个包含大量视频的数据集。在每个视频中,有些帧(不是每帧,大约16万帧)有其标签,因为一帧可能有多个对象 我对创建数据集有些困惑。我的想法是首先将视频转换为帧,然后每个仅带有标签的帧将制作为tfrecord或hdf5格式。最后,我会将每个帧的路径写入csv文件(培训和验证),用于我的任务 我的问题是: 1.是否有足够的效率(tfrecord或hdf5)?在创建tfrecord或hdf5文件之前,我是否应该预处理每个帧(如压缩)以节省存储空间? 2.有没有办法直

各位

现在我有一个对象分类任务,我有一个包含大量视频的数据集。在每个视频中,有些帧(不是每帧,大约16万帧)有其标签,因为一帧可能有多个对象

我对创建数据集有些困惑。我的想法是首先将视频转换为帧,然后每个仅带有标签的帧将制作为tfrecord或hdf5格式。最后,我会将每个帧的路径写入csv文件(培训和验证),用于我的任务

我的问题是: 1.是否有足够的效率(tfrecord或hdf5)?在创建tfrecord或hdf5文件之前,我是否应该预处理每个帧(如压缩)以节省存储空间? 2.有没有办法直接在tensorflow或pytorch中处理视频数据集


我想找到一种有效且常规的方法来处理视频数据集。真的很期待每一个答案。

我不是TensorFlow的人,所以我的答案不会涵盖这一点,对不起

由于利用数据中的时间相关性,视频格式通常以更长的随机访问时间为代价获得压缩。这是有道理的,因为人们通常按顺序访问视频帧,但如果您的访问完全是随机的,我建议您转换为hdf5。否则,如果您访问视频的子序列,使用视频格式可能是有意义的

Pytork没有任何“受祝福”的方法来制作视频AFAIK,但我用它来阅读视频和寻找特定的帧。一个短包装器使其遵循PyTorch API。该代码相当简单,但有一个警告,这是允许在多处理中使用它所必需的


此代码可以修改为支持多个视频文件,也可以根据需要输出标签。

谢谢。如果我使用hdf5格式来存储,是否所有的训练图像都应转换为一个hdf5文件?它太大了吗?这取决于你的限制:你的视频、硬盘有多大,等等。这是你的问题,不是我的问题
import imageio, torch

class VideoDataset:
    def __init__(self, path):
        self.path = path

        # explained in __getitem__
        self._reader = None

        reader = imageio.get_reader(self.path, 'ffmpeg')
        self._length = reader.get_length()

    def __getitem__(self, ix):
        # Below is a workaround to allow using `VideoDataset` with
        # `torch.utils.data.DataLoader` in multiprocessing mode.
        # `DataLoader` sends copies of the `VideoDataset` object across
        # processes, which sometimes leads to bugs, as `imageio.Reader`
        # does not support being serialized. Since our `__init__` set
        # `self._reader` to None, it is safe to serialize a
        # freshly-initialized `VideoDataset` and then, thanks to the if
        # below, `self._reader` gets initialized independently in each
        # worker thread.

        if self._reader is None:
            self._reader = imageio.get_reader(self.path, 'ffmpeg')

        # this is a numpy ndarray in [h, w, channel] format
        frame = self._reader.get_data(ix)

        # PyTorch standard layout [channel, h, w]
        return torch.from_numpy(frame.transpose(2, 0, 1))

     def __len__(self):
        return self.length