Keras 我应该如何处理谷歌云ML引擎中的大型视频数据集?

Keras 我应该如何处理谷歌云ML引擎中的大型视频数据集?,keras,google-cloud-storage,large-data,google-cloud-ml,Keras,Google Cloud Storage,Large Data,Google Cloud Ml,我正在云ML引擎中尝试使用Keras进行视频分类。我的数据集包含作为单独图像保存的视频序列(例如,seq1_frame1.png、seq1.frame2.png…),我已将其上传到GCS存储桶中 我使用一个csv文件引用不同子剪辑的开始帧和结束帧,并使用一个生成器将一批剪辑提供给模型。生成器负责从bucket加载帧,将其作为图像读取,并将其连接为numpy数组 我的培训时间相当长,我怀疑生成器是我的瓶颈,因为大量的阅读操作 在我在网上找到的例子中,人们通常将预先格式化的剪辑作为tfrecords

我正在云ML引擎中尝试使用Keras进行视频分类。我的数据集包含作为单独图像保存的视频序列(例如,seq1_frame1.png、seq1.frame2.png…),我已将其上传到GCS存储桶中

我使用一个csv文件引用不同子剪辑的开始帧和结束帧,并使用一个生成器将一批剪辑提供给模型。生成器负责从bucket加载帧,将其作为图像读取,并将其连接为numpy数组

我的培训时间相当长,我怀疑生成器是我的瓶颈,因为大量的阅读操作

在我在网上找到的例子中,人们通常将预先格式化的剪辑作为tfrecords文件直接保存到GCS。我觉得这个解决方案对于非常大的数据集来说并不理想,因为它意味着重复数据,如果我们决定提取重叠的子唇,更是如此

我的方法有问题吗?更重要的是,使用大型视频数据集进行机器学习是否有“黄金标准”


PS:我解释了我的设置以供参考,但我的问题并不局限于Keras、Generator或Cloud ML。

在这方面,你几乎总是在用时间换取空间。你只需要找出哪个更重要

理论上,每帧的高度*宽度*3个字节。假设有3个彩色通道。节省空间的一种可能方法是只使用一个通道(可能选择绿色,或者更好的是,将整个数据集转换为灰度)。这将使您的全尺寸视频数据减少到三分之一。视频中的颜色数据的分辨率往往低于亮度数据,因此可能不会影响您的训练,但这取决于您的源文件

您可能知道,.png是一种无损图像压缩。每次加载一个,生成器都必须先解压缩,然后连接到剪辑。使用不同的压缩编解码器可以节省更多的空间,但这意味着每个剪辑都需要完全解压缩,可能会增加您的时间。你说得对,反复减压需要时间。保存未压缩的视频将占用大量空间。不过,有些地方可以节省空间:

  • 降低到灰度(或如上所述的绿色)
  • 临时子采样帧(您需要每个连续帧,还是可以每秒钟采样一帧?)
  • 你用的是整帧还是贴片?你能裁剪或重新缩放视频序列吗
  • 你在用光流吗?它是处理器密集型的,也把它看作是一个预处理步骤,所以你只需要在每个剪辑上做一次(这是时间的交易空间)