【问题标题】:How to structure my video dataset based on extracted features for building a CNN-LSTM classification model?如何根据提取的特征构建我的视频数据集以构建 CNN-LSTM 分类模型?
【发布时间】:2020-07-22 06:49:37
【问题描述】:

对于处理情绪识别的项目,我有一个由多个视频组成的数据集,范围从 0.5 秒到 10 秒。我有一个应用程序,它遍历每个视频并创建一个 .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 模型。

【问题讨论】:

    标签: tensorflow deep-learning dataset lstm conv-neural-network


    【解决方案1】:

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

    您可以继续使用标记视频中的每一帧并将其合并为单个 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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-27
      • 1970-01-01
      • 2016-04-12
      • 2018-09-24
      • 2021-11-08
      • 2020-02-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多