我正在尝试实施LRCN / C(LSTM)RNN对视频中的情绪进行分类。我的数据集结构分为两个文件夹-“ train_set”和“ valid_set”。 当您打开其中一个文件夹时,可以找到3个文件夹,“正”,“负”和“惊奇”。最后,这3个文件夹中的每个文件夹都有视频文件夹,每个文件夹都是.jpg中视频帧的集合。视频的长度不同,因此,一个视频文件夹可以有200帧,旁边是1200、700 ...!要加载数据集,我正在使用flow_from_directory。在这里,我需要一些澄清:
flow_from_directory
将按顺序逐个加载视频吗?他们的框架? flow_from_directory
是否根据视频中图像的顺序排序进行批量处理?flow_from_directory
最终将选择两批5和3个视频,否则它将与这些视频重叠,将全部来自第一个文件夹的5张图片+第二个文件夹的2张图片?会混合我的视频吗?shuffle
,它会改组它读取视频文件夹的顺序还是会开始从随机文件夹中随机提取帧?TimeDisributed
层的作用是什么?如果我将其应用于CNN的密集层或CNN的每一层怎么办?答案 0 :(得分:2)
flow_from_directory
用于图像而不是电影。它不会理解您的目录结构,也不会创建“框架”维度。您需要自己的生成器(通常最好实现keras.utils.Sequence)
您只能在以下情况下分批加载:
与1相同。
如果您使自己的生成器实现keras.utils.Sequence()
,则只要实现知道每部电影是什么,安全性就将得到保持。
如果您正在加载图像,它将随机播放图像
TimeDistributed
允许数据在索引1处具有额外的维数。例如:通常使用(batch_size, ...other dims...)
的图层将使用(batch_size, extra_dim, ...other dims...)
。这个额外的维度可能意味着任何东西,不一定是时间,它将保持不变。
(batch_size, video_frames, height, width, channels)