使用具有不同输入形状和类模型的预训练模型

问题描述 投票:3回答:1

我正在使用CNN处理分类问题,我的输入图像大小是64X64,我想使用预训练模型,如VGG16,COCO或任何其他。但问题是预训练模型的输入图像大小是224X224。我该如何排序这个问题。输入图像大小是否有任何数据增强方式。

如果我将输入图像的大小调整为224X224,那么图像很可能会变得模糊,这可能会影响训练。如果我错了,请纠正我。

另一个问题与预训练模型有关。如果我正在使用transfer learning,那么通常我必须从预训练模型中冻结层。考虑到我的分类与预训练的模型类非常不同。但我想我们可以先将几层冻结,以获得所有图像中非常常见的图像的边缘,曲线等。

machine-learning deep-learning artificial-intelligence conv-neural-network supervised-learning
1个回答
4
投票

但问题是预训练模型的输入图像大小是224X224。

我假设您使用Keras / Tensorflow(对于其他DL框架也是如此)。根据Keras Application的文件:

input_shape:可选的形状元组,仅在include_top为False时指定(否则输入形状必须为(224,224,3)(带有'channels_last'数据格式)或(3,224,224)(带'channels_first')数据格式)。它应该有3个输入通道,宽度和高度不应小于48.例如(200,200,3)将是一个

因此,有两种方法可以解决您的问题:

1)通过244*244将输入图像调整为existing library并使用VGG分类器[include=true]。

2)在VGG模型之上训练您自己的分类器。正如上面Keras文档中提到的,如果你的图像不同于244 * 244,你应该训练你自己的分类器[include=false]。您可以通过以下方式轻松完成

    inp = keras.layers.Input(shape=(64, 64, 3), name='image_input')

    vgg_model = VGG19(weights='imagenet', include_top=False)
    vgg_model.trainable = False

    x = keras.layers.Flatten(name='flatten')(vgg_model)
    x = keras.layers.Dense(512, activation='relu', name='fc1')(x)
    x = keras.layers.Dense(512, activation='relu', name='fc2')(x)
    x = keras.layers.Dense(10, activation='softmax', name='predictions')(x)
    new_model = keras.models.Model(inputs=inp, outputs=x)
    new_model.compile(optimizer='adam', loss='categorical_crossentropy', 
                      metrics=['accuracy'])

如果我正在使用转移学习,那么通常我必须从预训练模型中冻结层

这实际上取决于您的新任务,您拥有多少训练样本,您的预训练模型以及许多其他内容。如果我是你,我首先扔掉预训练的模型分类器。然后,如果没有工作,删除一些其他卷积层,并逐步执行,直到我获得良好的性能。

© www.soinside.com 2019 - 2024. All rights reserved.