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:迁移学习——图像缩放显着降低了模型的性能的主要内容,如果未能解决你的问题,请参考以下文章