如何基于提取的特征来构建CNN-LSTM分类模型来构建我的视频数据集



对于我处理情绪识别的项目,我有一个由多个视频组成的数据集,这些视频的范围从0.5s-10s不等。我有一款应用程序,它会遍历每个视频,并创建一个.csv文件,其中包含它从视频中的每一帧中提取的特征,即。,每一行代表视频中的每一帧(行数是可变的(,列代表应用程序从帧中提取的不同特征(列数是固定的(。每个.csv文件名还包含一个代码,表示视频中表达的情感。

最初,我的计划是从视频中提取每一帧,并将每一帧作为输入传递给我计划使用的以下CNN-LSTM(空间特征为CNN,时间特征为LSTM(模型。

model = Sequential()
model.add(Input(input_shape))
model.add(Conv3D(6, (1, 5, 5), (1, 1, 1), activation='relu', name='conv-1'))
model.add(AveragePooling3D((1, 2, 2), strides=(1, 2, 2), name='avgpool-1'))
model.add(Conv3D(16, (1, 5, 5), (1, 1, 1), activation='relu', name='conv-2'))
model.add(AveragePooling3D((1, 2, 2), strides=(1, 2, 2), name='avgpool-2'))
model.add(Conv3D(32, (1, 5, 5), (1, 1, 1), activation='relu', name='conv-3'))
model.add(AveragePooling3D((1, 2, 2), strides=(1, 2, 2), name='avgpool-3'))
model.add(Conv3D(64, (1, 4, 4), (1, 1, 1), activation='relu', name='conv-4'))
model.add(Reshape((30, 64), name='reshape'))
model.add(CuDNNLSTM(64, return_sequences=True, name='lstm-1'))
model.add(CuDNNLSTM(64, name='lstm-2'))
model.add(Dense(6, activation=tf.nn.softmax, name='result')) 

我仍然计划使用CNN-LSTM模型,但我现在不知道如何构建我的数据集。我想用相应的情感标签标记每个.csv文件中的每一帧,然后将所有.csv文件合并为一个.csv文件。在更改输入形状和其他必要的参数后,这个组合的.csv文件将被传递给上面的模型,但我不知道如果这样做,模型是否能够区分视频。

因此,最后,我需要帮助构建我的数据集,以及如何将该数据集传递给CNN-LSTM模型。

通过查看您的问题陈述,我认为没有必要区分视频。

您可以继续标记视频中的每一帧,并将其组合为一个CSV文件。

For可以使用下面的代码从CSV文件转换为NumPy数组,以便按照下面的方法准备要训练的模型。

data = pd.read_csv('input.csv')
width, height = 48, 48
datapoints = data['pixels'].tolist()
#getting features for training
X = []
for xseq in datapoints:
xx = [int(xp) for xp in xseq.split(' ')]
xx = np.asarray(xx).reshape(width, height)
X.append(xx.astype('float32'))
X = np.asarray(X)
X = np.expand_dims(X, -1)
#getting labels for training
y = pd.get_dummies(data['emotion']).as_matrix()
#storing them using numpy
np.save('fdataX', X)
np.save('flabels', y)

最新更新