【问题标题】:How should I handle large video datasets in Google Cloud ML Engine?我应该如何在 Google Cloud ML Engine 中处理大型视频数据集?
【发布时间】:2019-03-31 08:48:34
【问题描述】:

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

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

我的训练时间相当长,由于大量的读取操作,我怀疑生成器是我的瓶颈。

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

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

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

【问题讨论】:

    标签: keras google-cloud-storage large-data google-cloud-ml


    【解决方案1】:

    在这种情况下,您几乎总是会以时间换空间。你只需要弄清楚哪个更重要。

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

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

    • 降低为灰度(或上述绿色)
    • 对帧进行时间子采样(您需要每个连续的帧,还是可以每秒采样一次?)
    • 您使用整个帧还是只使用补丁?您可以裁剪或重新缩放视频序列吗?
    • 您使用的是光流吗?这是相当密集的处理器,也可以将其视为预处理步骤,因此您只需为每个剪辑执行一次(同样这是以空间换时间)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-05
      • 2017-09-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多