Python 加载视频数据集(Keras)
我正在尝试实现一个LRCN/C(LSTM)RNN来对视频中的情绪进行分类。我的数据集结构分为两个文件夹——“训练集”和“有效集”。 当你打开其中任何一个文件夹时,你都可以找到3个文件夹,“肯定”、“否定”和“惊喜”。最后,这3个文件夹中的每一个都有视频文件夹,每个文件夹都是.jpg中视频帧的集合。视频有不同的长度,因此一个视频文件夹可以有200帧,它旁边的一个有1200帧,700帧。。。!要加载数据集,我正在使用来自目录的flow\u。在这里,我需要一些澄清:Python 加载视频数据集(Keras),python,tensorflow,video,keras,Python,Tensorflow,Video,Keras,我正在尝试实现一个LRCN/C(LSTM)RNN来对视频中的情绪进行分类。我的数据集结构分为两个文件夹——“训练集”和“有效集”。 当你打开其中任何一个文件夹时,你都可以找到3个文件夹,“肯定”、“否定”和“惊喜”。最后,这3个文件夹中的每一个都有视频文件夹,每个文件夹都是.jpg中视频帧的集合。视频有不同的长度,因此一个视频文件夹可以有200帧,它旁边的一个有1200帧,700帧。。。!要加载数据集,我正在使用来自目录的flow\u。在这里,我需要一些澄清: 在我的例子中,flow\u fro
flow\u from\u directory
会按顺序逐个加载视频吗?他们的框架李>
flow\u from\u directory
是否根据视频中图像的顺序进行分批flow_from_directory
是否会选择包含5个和3个视频的两个批次,或者它会重叠视频,从第一个文件夹+第二个文件夹中获取所有5个图像?它会混合我的视频吗timedistributed
层做了什么?如果我把它应用到CNN的密集层或者CNN的每一层呢flow\u from\u directory
是为图像而不是电影制作的。它不会理解您的目录结构,也不会创建“框架”维度。您需要自己的生成器(通常更好地实现)- 由于电影的长度不同,您可以逐个加载电影
- 你用空帧填充视频,使它们的长度相同
keras.utils.Sequence()
,那么只要您的实现知道每部电影是什么,就会保持安全性TimeDistributed
允许在索引1处使用额外维度的数据。示例:通常采用(批次大小,…其他dim…
的图层将采用(批次大小,额外dim,…其他dim…
)。这个额外的维度可能意味着任何东西,不一定是时间,它将保持不变
- CNN对每幅图像的工作原理完全相同,但您可以按
格式组织数据(批量大小、视频帧、高度、宽度、频道)
非常感谢。因此,如果我按顺序读取视频帧ofc(现在假设批量大小为1),则每个帧都会按CNN密集层进行分类。迭代1完成,帧被送入RNN。在迭代2,第二个视频帧通过CNN,时间分布现在将时间维度上的输出张量扩展到2,使其指向时间步长2?那么这将作为LSTM的一个新步骤?每次迭代都是这样吗?如果是这样,CNN的密集型快照是将其所有累积的快照重新输入(在本例中)RNN,还是只传递最新的快照?一批快照应为
(1,帧,高度,宽度,频道)
中的时间分布(Conv2D(…)
,或RNN中的(1,帧,特征)
或密集型。并没有可见的迭代,每一层都会按它应该做的去做。(关于帧
)的迭代在RNN内部不可见地发生。您可以在RNN中选择return\u sequences=True
,将帧保留到最后-最后一层将对每个帧进行分类。或者,您可能不会在最后一个RNN层中选择该层以消除帧维度并获得“视频分类”。如回答中所述,您的形状应为(批次、帧、高度、宽度、通道)
(Conv2D())
或(批次、帧、allTheRest)
对于RNN和稠密
批处理=电影
,每部电影都是一个示例/示例。不幸的是,没有自动读取文件夹。Keras没有标准的电影发生器。您必须在自定义生成器中控制文件夹结构和图像加载。所以,不管你的文件夹结构是什么,只要你加载和分离哪些帧属于哪些电影。