代码之家  ›  专栏  ›  技术社区  ›  krishnab

将keras预训练模型扩展到具有附加通道或频带的图像

  •  1
  • krishnab  · 技术社区  · 6 年前

    我只是希望澄清一些关于之前的帖子的信息,该帖子讨论了如何将像vgg或inceptionv3这样的keras预训练模型扩展到不同大小的图像。我的问题是我有一些8波段的卫星图像所以图像可能是 650x650x8 而不是通常的rbg 3波段图像。我想知道我是否可以用一个Keras预先训练的模型来处理8个波段而不是3个波段的图像。

    现在有一个原始的帖子和处理类似的事情。参考贴子是关于应用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 回复  |  直到 6 年前
        1
  •  1
  •   sdcbr    6 年前

    从路边石上 docs :

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

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

    用于多光谱图像的神经网络是一个非常活跃的研究课题,但恐怕很少有现成的解决方案,例如在图像网络上预先训练的网络。你可以尝试一种降维技术,比如pca,将你的图像压缩成三个通道。或者训练一个以8通道图像为输入的定制架构。