繁体   English   中英

将帧加载到3D CNN

[英]Loading frames to 3D CNN

我有一个带TFLearn的Python 3D卷积神经网络。

下面的代码示例:

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帧。

为了解决这个特定问题,我进行了很多搜索,但直到现在都没有。

感谢您的支持和关注!

我这样做的方法是创建一个大小为mxn的numpy数组,其中m是所有类的图像数量,n是每个图像的像素数据点数量。 您将需要事先对这些类进行洗牌,以便连续没有一堆相同的类。 您不希望在给定的一批训练数据中出现过多的班级,因为这可能会使您在训练期间失去CNN的权重。 从那里,您可以将创建的阵列的迷你批次馈送到CNN,并确保在训练之前将每一行调整为所需的二维尺寸。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM