python - 加载视频数据集(Keras)

标签 python tensorflow video keras

我正在尝试实现 LRCN/C(LSTM)RNN 来对视频中的情绪进行分类。我的数据集结构分为两个文件夹——“train_set”和“valid_set”。 当你打开其中一个时,你会发现3个文件夹,“positive”,“negative”和“surprise”。最后,这 3 个文件夹中的每一个都有视频文件夹,每个文件夹都是 .jpg 格式的视频帧的集合。视频有不同的长度,因此一个视频文件夹可以有 200 帧,旁边的是 1200、700 帧......!要加载数据集,我正在使用 flow_from_directory。在这里,我需要澄清几点:

  1. 在我的例子中,flow_from_directory 会按顺序逐一加载视频吗?他们的框架?
  2. 如果我分批加载,flow_from_directory 是否会根据视频中图像的顺序进行批处理?
  3. 如果我有包含 5 个图像的 video_1 文件夹和包含 3 个视频的 video_2 文件夹,批量大小为 7,flow_from_directory 最终会选择两批 5 个和 3 个视频,否则视频会重叠,从第一个文件夹中获取所有 5 张图片 + 第二个文件夹中的 2 张?它会混合我的视频吗?
  4. 数据集加载是线程安全的吗?工作人员 1 从文件夹 1 中顺序获取视频帧,工作人员 2 从文件夹 2 中获取视频帧,依此类推...或者每个工作人员都可以从任何地方和任何文件夹中获取视频帧,这会破坏我的顺序阅读吗?
  5. 如果我启用shuffle,它会打乱读取视频文件夹的顺序,还是会开始以随机顺序从随机文件夹中获取帧?
  6. 根据我无法想象的文档,TimeDisributed 层做了什么?如果我将它应用于 CNN 的密集层或 CNN 的每一层会怎样?

最佳答案

  1. flow_from_directory 是为图像而不是电影制作的。它不会理解您的目录结构,也不会创建“框架”维度。您需要自己的生成器(通常最好实现 keras.utils.Sequence )

  2. 只有在以下情况下才能批量加载:

    • 由于长度不同,你一个一个地加载电影
    • 你用空帧填充你的视频,使它们都具有相同的长度
  3. 同1。

  4. 如果您让自己的生成器实现 keras.utils.Sequence(),只要您的实现知道每部电影是什么,就会保持安全。

  5. 如果您正在加载图片,它会随机播放图片

  6. TimeDistributed 允许在索引 1 处具有额外维度的数据。示例:通常采用 (batch_size, ...other dims...) 的层将采用 (batch_size, extra_dim, ...other dims...)。这个额外的维度可能意味着任何东西,不一定是时间,它会保持不变。

    • 循环层不需要这个(除非你真的因为不寻常的原因想要一个额外的维度),它们已经将索引 1 视为时间。
    • 对于每张图像,CNN 的工作方式完全相同,但您可以按照格式组织数据 (batch_size, video_frames, height, width, channels)

关于python - 加载视频数据集(Keras),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54004682/

相关文章:

python - 如何在Python中根据json文件的最新时间戳条件创建并写入文件?

python - 在 Python 中,如何翻译 *(1+(int*)&x)?

python - 函数中列表的总和

python - 激活或权重的丢失

java - 用opencv java打开视频文件

python - 作为另一个函数的参数的函数

python - TensorFlow 中的矩阵范数

python - 使用 tensorflow 的数据集管道,我如何*命名* `map` 操作的结果?

javascript - Youtube Iframe API loadVideoById() 跳过视频

android - 如何在 android 上使用 ffmpeg 录制视频?