Как структурировать мой набор видеоданных на основе извлеченных функций для построения модели классификации CNN-LSTM? - PullRequest
0 голосов
/ 09 апреля 2020

Для моего проекта, который касается распознавания эмоций, у меня есть набор данных, состоящий из нескольких видео, которые варьируются от 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.

1 Ответ

0 голосов
/ 19 апреля 2020

Глядя на вашу постановку проблемы, я не думаю, что есть необходимость проводить различие между видео.

Вы можете go продвинуться вперед с вашим подходом маркировки каждого кадра в видео и объединения его в один файл CSV.

For может использовать приведенный ниже код для преобразования в NumPy массивы из файла CSV, чтобы подготовить вашу модель к тренировке, следуя приведенному ниже методу.

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...