Загрузка кадров в 3D CNN - PullRequest
0 голосов
/ 03 мая 2018

У меня есть трехмерная сверточная нейронная сеть на Python с TFLearn.

Пример кода ниже:

def model_3d(self):
    """
    This function will build our 3D Convolutional Neural Network
    """

    #Layers
    net = tflearn.input_data(shape=[None, 40, 80, 80, 3], name='InputLayer')
    net = tflearn.layers.conv.conv_3d(net, 32,  filter_size=(3, 3, 3), activation='relu', name='Conv3D1')
    net = tflearn.max_pool_3d(net, kernel_size=(1, 2, 2), strides=(1, 2, 2), name='MaxPool3D1')
    net = tflearn.layers.conv.conv_3d(net, 32,   filter_size=(3, 3, 3), activation='relu', name='Conv3D2')
    net = tflearn.max_pool_3d(net, kernel_size=(2, 2, 2), strides=(2, 2, 2), name='MaxPool3D2')
    net = tflearn.layers.conv.conv_3d(net, 64,   filter_size=(3, 3, 3), activation='relu', name='Conv3D3')
    net = tflearn.max_pool_3d(net, kernel_size=(2, 2, 2), strides=(2, 2, 2), name='MaxPool3D3')
    net = tflearn.layers.conv.conv_3d(net, 128,   filter_size=(2, 2, 2), activation='relu', name='Conv3D5')
    net = tflearn.max_pool_3d(net, kernel_size=(2, 2, 2), strides=(2, 2, 2), name='MaxPool3D4')
    #FC Layers
    net = tflearn.fully_connected(net, 1024, activation='relu', name='FC1')
    net = tflearn.dropout(net, 0.5)
    net = tflearn.fully_connected(net, self.n_classes, activation='softmax', name='FC3')
    net = tflearn.regression(net, optimizer='adam', loss='categorical_crossentropy', learning_rate=1e-5)

    return [net]

Я буду использовать эту модель для изучения и классификации видео. Для этого я написал алгоритм, который извлекает 40 кадров на видео и создает папку с подпапками, представляющими каждый класс, в основном новый набор данных.

Моя точка зрения такова. Каков наилучший способ загрузить эти кадры в эту модель? Должен ли я использовать мини-пакетный метод с 40 примерами (кадрами) или в случае 3D CNN, входной слой берет 40 изображений за раз из набора данных и извлекает из него уроки?

Мне нужно знать, как эта модель может учиться на основе набора из 40 кадров, как только в каждой подпапке класса будет 40 изображений на видео, поэтому, чтобы уточнить, если у меня есть 50 видео в классе, у меня есть 50 * 40 кадров в эта папка.

Я много искал, чтобы решить эту конкретную проблему, но пока ничего.

Спасибо за поддержку и внимание!

1 Ответ

0 голосов
/ 03 июля 2018

Способ, которым я бы сделал это, состоит в том, чтобы создать пустой массив размером m x n, где m - это количество изображений, которое вы имеете для всех классов, а n - это количество точек данных пикселов, которые вы имеете для каждого изображения. Вы должны будете перемешать классы заранее, чтобы не было группы одного и того же класса подряд. Вы не хотите, чтобы какой-либо один класс был перепредставлен в данной партии ваших тренировочных данных, поскольку это может снизить вес вашего CNN во время обучения. Оттуда вы можете подавать мини-партии созданного вами массива на вашу CNN, перед тем как приступить к тренировкам, перед тем как приступить к тренировкам.

...