首页 > 解决方案 > 将keras中的conv2d逐帧应用于视频输入

问题描述

我想将 Conv2D 和 AveragePooling2D 分别应用于 Keras 中的视频输入的每一帧。视频大小为 (60,32,32,3) - 60 个时间帧,32x32 帧大小和 3 个颜色通道。

model = Sequential()
model.add(Conv2D(16,3, input_shape = (60,32,32,3), activation = 'relu'))
model.add(AveragePooling2D(pool_size = 2))

上面的代码给出了以下错误:

ValueError: Input 0 of layer average_pooling2d_10 is incompatible with the layer: expected 
ndim=4, found ndim=5. Full shape received: (None, 45, 30, 30, 16)

有什么办法解决这个问题?谢谢。

标签: keras

解决方案


如果输入是视频,那么最好将 Timedistributed 层与 Conv2D 一起使用。

考虑一批 16 个视频样本,其中每个样本是32x32 RGB具有 channels_last 数据格式的图像,跨越 60 个时间步长。批量输入形状为(16, 60, 32, 32, 3)

然后,您可以使用 TimeDistributed 将相同的 Conv2D 层分别应用于 60 个时间步长中的每一个:

inputs = tf.keras.Input(shape=(60, 32, 32, 3))
conv_2d_layer = tf.keras.layers.Conv2D(64, (3, 3))
outputs = tf.keras.layers.TimeDistributed(conv_2d_layer)(inputs)

推荐阅读