代码之家  ›  专栏  ›  技术社区  ›  KDX2

加载视频数据集(KERA)

  •  1
  • KDX2  · 技术社区  · 6 年前

    我正在尝试实现一个lrcn/c(lstm)RNN来对视频中的情绪进行分类。我的数据集结构分为两个文件夹-“train_set”和“valid_set”。 当你打开它们时,你可以找到3个文件夹:“正”、“负”和“惊喜”。最后,这三个文件夹中的每一个都有视频文件夹,每个文件夹都是.jpg格式的视频帧的集合。视频有不同的长度,因此一个视频文件夹可以有200帧,旁边的一帧是1200,700…!要加载数据集,我使用的是来自目录的流。这里,我需要澄清一下:

    1. 就我而言 flow_from_directory 按1:1顺序加载视频?他们的框架?
    2. 如果我批量装载,是吗? 从目录流 根据视频中图像的顺序进行批处理?
    3. 如果我有5个图像的video_1文件夹和3个视频的video_2文件夹,批量大小为7,将 从目录流 最后选择两批5和3个视频,还是将重叠视频,从第一个文件夹+第二个文件夹中获取所有5个图像?它会混合我的视频吗?
    4. 数据集加载线程是否安全?Worker One按顺序从文件夹1获取视频帧,Worker 2从文件夹2获取视频帧等…或者每个工人都可以从任何地方和任何文件夹获取帧,这会破坏我的连续阅读?
    5. 如果我启用 shuffle ,它会改变读取视频文件夹的顺序还是从随机文件夹中随机获取帧?
    6. 什么? TimeDisributed 从我真的无法想象的文档来看,层是怎样的?如果我把它应用到CNN的密集层或者CNN的每一层呢?
    1 回复  |  直到 6 年前
        1
  •  2
  •   Daniel Möller    6 年前
    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)