Keras:迁移学习-图像缩放显著恶化模型性能

qacovj5a  于 2023-04-06  发布在  其他
关注(0)|答案(3)|浏览(171)

我正在使用keras和tensorflow处理图像分类问题。我使用VGG 16模型和Imagenet权重,并使用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])
1bqhqjot

1bqhqjot1#

可能是Imagenet权重与新的图像维度不兼容。
我看到你唯一可训练的层是最后一层,一个密集层,它对图像维度一无所知。我的建议是让前几个卷积层也是可训练的,这样这些层就可以适应缩放。

q1qsirdb

q1qsirdb2#

ResNet可能会从其图像数据中减去每像素均值,而不是除以255。来源:3.4 Implementation下的https://arxiv.org/pdf/1512.03385.pdf

rxztt3cl

rxztt3cl3#

使用ResNet和imagenet权重,我使用以下方法改进了结果:
ImageDataGenerator(preprocessing_function=preprocess_input)
通过重新缩放,我也获得了更差的结果。
这些信息对我很有用:
https://github.com/matterport/Mask_RCNN/issues/231

相关问题