【问题标题】:Merging same vgg16 model but with different inputs合并相同的 vgg16 模型但具有不同的输入
【发布时间】:2019-11-28 11:38:00
【问题描述】:

我正在处理一个项目中的分类问题。我的问题的特殊性是我必须使用两种不同类型的数据来管理它。我的课程是汽车、行人、卡车和骑自行车的人。我的数据集由:

-来自相机的图像:它们是 RGB 图像。这是一个例子:

  • 通过将激光雷达点云(仅 3D 点)投影到 2D 相机平面并使用深度和反射率对像素进行编码而获得的图像。以下是示例:

我已经设法使用这两种模式来通过使用 keras API 的 Concatenate 函数来执行分类任务。

但我想做的是使用更强大的 CNN,比如 VGG。我使用了预训练模型并冻结了除最后 4 层之外的所有层。我将灰度图像读取为 RGB,因为 VGG16 预训练模型需要 3 个通道输入。这是我的代码:

from keras.applications import VGG16
#Load the VGG model
#Camera Model
vgg_conv_C = VGG16(weights='imagenet', include_top=False, input_shape=(227, 227, 3))
#Depth Model
vgg_conv_D = VGG16(weights='imagenet', include_top=False, input_shape= (227, 227, 3))
for layer in vgg_conv_D.layers[:-4]:
    layer.trainable = False 
for layer in vgg_conv_C.layers[:-4]:
    layer.trainable = False 
mergedModel = Concatenate()([vgg_conv_C.output,vgg_conv_D.output])
mergedModel = Dense(units = 1024)(mergedModel)
mergedModel = BatchNormalization()(mergedModel)
mergedModel = Activation('relu')(mergedModel)
mergedModel = Dropout(0.5)(mergedModel)
mergedModel = Dense(units = 4,activation = 'softmax')(mergedModel)
fused_model = Model([vgg_conv_C.input, vgg_conv_D.input], mergedModel)                        ) 

最后一行给出以下错误:

ValueError: The name "block1_conv1" is used 2 times in the model. All 
layer names should be unique.

有人知道如何处理吗?简单来说,我只想在两种类型的图像上使用 VGG16,然后只获取每种模态的特征向量,然后将它们连接起来并在顶部添加完全连接的层来预测图像的类别。它适用于未经预训练的模型。需要的可以提供代码

【问题讨论】:

  • 编辑:更改图层名称解决了最后一行的问题。

标签: keras concatenation classification fusion lidar


【解决方案1】:

试试这个

#Camera Model
vgg_conv_C = VGG16(weights='imagenet', include_top=False, input_shape=(227, 227, 3))
for layer in vgg_conv_C.layers:
    layer.name = layer.name + str('_C')
#Depth Model
vgg_conv_D = VGG16(weights='imagenet', include_top=False, input_shape= (227, 227, 3))
for layer in vgg_conv_D.layers:
    layer.name = layer.name + str('_D')

通过这种方式,您仍然可以使用两个相同的预训练网络。

【讨论】:

    【解决方案2】:

    如错误中所述, ValueError:名称“block1_conv1”在模型中使用了 2 次。全部 图层名称应该是唯一的。 因此使用 Saimse 网络或如果使用双 CNN,它们记住在网络层 ame 是唯一的。它更好,复制网络进行第二次配置并更改图层名称。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-15
      • 2018-02-06
      • 2021-12-13
      • 2013-07-31
      • 1970-01-01
      • 2020-12-18
      • 2020-01-02
      • 1970-01-01
      相关资源
      最近更新 更多