将Keras预训练模型扩展到具有其他通道或波段的图像

时间:2018-07-19 22:41:28

标签: python tensorflow keras keras-layer

我只是希望澄清有关先前文章的一些信息,该文章讨论了如何将Keras预先训练的模型(例如VGG或InceptionV3)扩展到不同大小的图像。我的问题是我有一些8波段的卫星图像。因此,图像可能是650x650x8,而不是通常的RBG 3波段图像。我想知道我是否可以在8个频段而不是3个频段的图像上使用Keras预训练模型。

现在有一个原始帖子,处理与此类似的内容。该参考文章是关于将Keras VGG预训练模型应用于不同大小的图像。因此VGG在224x224x3上接受了培训,用户希望针对160x320x3的图像使用此模型。

这是原始帖子: Change input tensor shape for VGG16 application

这是原始帖子中的代码:

from keras.models import Model
from keras.layers import Dense,Flatten
from keras.applications import vgg16
from keras import backend as K

model = vgg16.VGG16(weights='imagenet', include_top=False, input_shape=(160,320,3))
model.summary(line_length=150)

flatten = Flatten()
new_layer2 = Dense(10, activation='softmax', name='my_dense_2')

inp2 = model.input
out2 = new_layer2(flatten(model.output))

model2 = Model(inp2, out2)
model2.summary(line_length=150)

因此,如果我要用以下内容代替第六行:

model = vgg16.VGG16(weights='imagenet', include_top=False, input_shape=(650,650,8))

这行得通吗,还是经过预先训练的模型不接受通道的增加,因为它可以接受图像高度或宽度的改变?

此外,我将不得不通过额外的渠道对模型进行额外的培训。但是我还不清楚预训练模型实际上是如何实现此扩展的。是将添加的节点的权重设置为0还是某种初始化程序确定的权重?我正在努力评估我需要做多少额外的训练。

感谢任何提示或建议。

1 个答案:

答案 0 :(得分:1)

来自Keras docs

  

input_shape:可选的形状元组,仅当include_top为False时才指定(否则,输入形状必须为(224,224,3)(具有“ channels_last”数据格式)或(3,224,224)(具有“ channels_first”数据格式)。它应具有3个输入通道,宽度和高度不得小于48。例如,(200,200,3)是一个有效值。

您将无法将此VGG实现用于多光谱图像。如您已经提到的那样,这将为模型引入尚未经过预训练的其他权重。

用于多光谱图像的神经网络是一个非常活跃的研究主题,但是恐怕几乎没有现成的解决方案,例如在imagenet上进行预训练的网络。您可以尝试使用降维技术(例如PCA)将图像压缩到三个通道。或完全训练一个以8通道图像作为输入的自定义体系结构。