我正在利用深度学习对视频进行人类活动识别,并希望在我的自定义数据集上训练我的神经网络(ConvLSTM & LRCN)。我面临的问题是我的数据集超过50 GB,而且我没有足够的内存直接加载到内存中(16 GB内存和带5 GB VRAM的Nvidia P2000 )。我读到了用于有效加载数据集的TensorFlow flow_from_directory,但我的问题是,我希望为单个标签加载多个图像。
例如,视频中可能有n数目的帧,我从其中提取所需的帧,以训练我的NN。例如,30秒的步行标签视频可能有2000帧,我希望每20帧(20、40、60.2000年)得到一个帧。
现在,如何在使用TensorFlow flow_from_directory时处理这些帧的序列?我有40个关于每个标签的视频(40次步行,40次跑步,40次慢跑等等),我如何告诉TensorFlow,这些n帧属于这个单一的视频(例如步行标签),以及如何将它们立即发送到模型上进行培训?
据我所知,flow_from_directory的默认行为是,如果我们有4个文件夹(猫、狗、斑马和鱼),它会进入每个文件夹并从中获取每一张照片,并指定标签与标签名称相同。但在我的例子中,我有3个文件夹(行走、跑步和慢跑),而在每个文件夹中我有嵌套文件夹(步行视频1、行走视频2等等),每个文件夹中有n个属于该视频标签的帧。我该怎么处理呢?
嵌套文件夹结构
粗体表示文件夹
步行(行走视频1 (n帧属于视频1),步行视频2 (n帧属于视频2)等等)
运行(运行视频1 (n帧属于视频1),运行视频2 (n帧属于视频2)等等)
诸如此类的标签
发布于 2022-09-15 08:34:00
在早期阶段,您不必使用所有的数据,而是构建一个具有合理数据量(例如: 4Gb)的第一个模型,原因有三个: 1-学习时间短得多,因此可以应用快速改进循环。2.必要的硬件更实惠。3-它很容易扩展到50 to。
除此之外,您还可以应用一些预处理技术来压缩数据,降低定义,或者选择具有良好可微性的最有意义的场景。
场景也应该是可比较的,具有相同的频率和相同的帧,这样你的神经网络就可以很容易地在正确的时间找到模式。
帧速率可能较低:现有的模型在15 fps或更少的情况下可以有很好的效果。您可以从15 fps开始,查看结果是否正确,并增加或减少它,直到达到最佳结果。
最后,一旦掌握了具有较小数据集的模型,就可以将其扩展到50 or,定义更小的批,并使用RAM或硬盘内存。否则,您可以购买更好的硬件或租用一个超级GPU在云(cf )。GCloud,AWS或Paperspace),价格实惠。
https://datascience.stackexchange.com/questions/114435
复制相似问题