Keras:迁移学习——图像缩放显着降低了模型的性能

Posted

技术标签:

【中文标题】Keras:迁移学习——图像缩放显着降低了模型的性能【英文标题】:Keras: Transfer Learning - Image scaling worsens performance of the model significantly 【发布时间】:2019-01-03 12:32:35 【问题描述】:

我正在研究 keras 和 tensorflow 的图像分类问题。我正在使用带有 Imagenet 权重的 VGG16 模型,并且正在使用 Keras 的 ImageDataGenerator 导入我的数据。

现在我一直在读到应该始终使用 1./255 重新缩放图像以进行有效的训练。但是,一旦我实施了缩放,我的模型的性能就会比以前差很多。更改学习率和批量大小也无济于事。

现在我质疑这是否可能,或者我的模型是否有错误。我正在使用标准的 .jpg 图像文件。

from keras.preprocessing.image import ImageDataGenerator
IMAGE_SIZE = 224
BATCH_SIZE = 32

num_classes = 27

main_path = "C:/Users/abc/data"

final_path = os.path.join(main_path, "ML_DATA")
labels = listdir(gesamt_path)


data_generator = ImageDataGenerator(rescale=1./255, ### rescaling done here
                                    validation_split=0.20)

train_generator = data_generator.flow_from_directory(final_path, target_size=(IMAGE_SIZE, IMAGE_SIZE), shuffle=True, seed=13,
                                                     class_mode='categorical', batch_size=BATCH_SIZE, subset="training")

validation_generator = data_generator.flow_from_directory(final_path, target_size=(IMAGE_SIZE, IMAGE_SIZE), shuffle=False, seed=13,
                                                     class_mode='categorical', batch_size=BATCH_SIZE, subset="validation")

模型定义和训练

vgg16_model = keras.applications.vgg16.VGG16(weights='imagenet', include_top=True)
model = Sequential()
for layer in vgg16_model.layers[:-1]:
    model.add(layer)


for layer in model.layers:
    layer.trainable = False

model.add(Dense(num_classes, activation='softmax'))

model.compile(Adam(lr=.001), loss='categorical_crossentropy', metrics=['accuracy'])

history = model.fit_generator(train_generator,
                    validation_data=validation_generator, 
                    epochs=85, verbose=1,callbacks=[tbCallBack,earlystopCallback])

【问题讨论】:

【参考方案1】:

可能是 Imagenet 权重与您的新图像尺寸不兼容。

我看到您唯一可训练的层是最后一层,即密集层,它对图像尺寸一无所知。我的建议是让前几个卷积层也是可训练的,这样这些层就可以适应重新缩放。

【讨论】:

我也有同样的问题。我正在使用ResNet50。我也会尝试训练 CNN 层。【参考方案2】:

使用 ResNet 和 imagenet 权重我改进了我的结果:

ImageDataGenerator(preprocessing_function=preprocess_input)

通过重新缩放,我也得到了更糟糕的结果。

这些信息对我很有用:

https://github.com/matterport/Mask_RCNN/issues/231

【讨论】:

以上是关于Keras:迁移学习——图像缩放显着降低了模型的性能的主要内容,如果未能解决你的问题,请参考以下文章

Keras深度学习实战——使用数据增强提高神经网络性能

关于 Keras 迁移学习的讨论

:迁移学习与微调

Keras深度学习实战——基于VGG19模型实现性别分类

迁移学习是不是需要在 0-255 之间重新缩放图像

Keras深度学习实战(10)——迁移学习