tensorflow - 如何从视频数据集制作数据集(首先是 tensorflow )

标签 tensorflow dataset pytorch hdf5 tfrecord

大家。

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

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

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

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

最佳答案

我不是 TensorFlow 专家,所以我的回答不会涵盖这一点,抱歉。

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

PyTorch 没有任何“有福”的视频方法,据我所知,但我使用 imageio阅读视频并寻找特定的帧。一个简短的包装器使其遵循 PyTorch Dataset API。该代码相当简单,但有一个警告,这是允许将其与多处理一起使用所必需的 DataLoader .

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

可以调整此代码以支持多个视频文件,并根据您的需要输出标签。

关于tensorflow - 如何从视频数据集制作数据集(首先是 tensorflow ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55353187/

相关文章:

tensorflow - keras 训练的 DenseNet 模型的 TensorFlow-lite 转换的量化性能差异很大

python - Windows 10、RTX 2070] : Failed to get convolution algorithm

c# - 如何将数据表保存到 xml 并将 xml 保存回数据表并保留列,即使没有行?

dataset - 在 sas 中定义变量来清理代码

logging - Hadoop日志数据集

variables - Tensorflow中默认的variable_scope是什么?

python - 在 Tensorflow 模型中添加低层

machine-learning - 使用 PyTorch 训练神经网络时出现错误 "' Softmax' 对象没有属性 'log_softmax'

python - 对于较大的交叉或外积,NumPy 比 PyTorch 更快

tensorflow - ImageNet 预训练的 ResNet50 主干在 Pytorch 和 TensorFlow 之间有所不同