Keras 合并相同的vgg16模型,但输入不同

Keras 合并相同的vgg16模型,但输入不同,keras,concatenation,classification,fusion,lidar,Keras,Concatenation,Classification,Fusion,Lidar,我正在一个项目中处理一个分类问题。我的问题的特殊性在于我必须使用两种不同类型的数据来管理它。我的课程是汽车、行人、卡车和自行车。我的数据集由以下部分组成: -来自相机的图像:它们是RGB图像。以下是一个例子: 通过将激光雷达点云仅三维点投影到二维相机平面并使用深度和反射率对像素进行编码获得图像。以下是一些例子: 我已经设法使用这两种模式,以便通过使用KerasAPI的连接功能来执行分类任务 但我想做的是使用更强大的CNN,比如VGG。我使用预先训练的模型,冻结除最后4层以外的所有层。我将灰度图像

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

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

通过将激光雷达点云仅三维点投影到二维相机平面并使用深度和反射率对像素进行编码获得图像。以下是一些例子: 我已经设法使用这两种模式,以便通过使用KerasAPI的连接功能来执行分类任务

但我想做的是使用更强大的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,然后获取每个模态的特征向量,然后将它们连接起来,并在顶部添加完全连接的层来预测图像的类别。它不需要预先训练的模型。如果需要,可以提供错误中提到的代码, ValueError:名称block1\u conv1在模型中使用了2次。全部的 图层名称应该是唯一的。
因此,使用Saimse网络或如果使用双CNN,请记住网络层ame是唯一的。最好是复制网络进行第二次配置,并更改图层名称。

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

试试这个

这样,您仍然可以使用两个相同的预训练网络

试试这个


这样,您仍然可以使用两个相同的预训练网络

编辑:更改图层名称可解决最后一行问题。编辑:更改图层名称可解决最后一行问题。
#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')