如何在Keras中更改频道数来微调VGG16网络

时间:2017-10-07 02:10:29

标签: tensorflow keras keras-layer

我想使用自己的灰度图像微调VGG16模型。我知道我可以通过以下方式微调/添加我自己的顶层:

base_model = keras.applications.vgg16.VGG16(include_top=False, weights='imagenet', input_tensor=None, input_shape=(im_height,im_width,channels))

但仅当频道= 3时才根据documentation。 我想过简单地为我的图像添加两个冗余通道,但这似乎浪费了计算/可能使分类更糟。我也可以在三个通道上复制相同的图像,但我同样不确定它将如何预成型。

2 个答案:

答案 0 :(得分:4)

Keras预训练模型已经训练过彩色图像,如果您想要使用它们的全部功率,您应该使用彩色图像进行微调。但是,如果您有灰度图像,则仍可以通过在三个通道上重复灰度图像来使用这些预先训练的模型。但显然,它不如使用彩色图像作为输入。

答案 1 :(得分:1)

VGG keras模型使用函数:keras.applications.imagenet_utils._obtain_input_shape。 此功能是为ImageNet数据量身定制的,因此它将输入通道强制为3.一种可能的解决方法是复制VGG16模块并替换该行:

input_shape = _obtain_input_shape(input_shape, default_size=224, min_size=48, data_format=K.image_data_format(), include_top=include_top)

使用:

input_shape = (im_height, im_width, 1)

作为旁注,您将无法加载ImageNet权重,因为您的输入空间已更改且第一层卷积将不匹配。