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

时间:2019-07-19 13:00:57

标签: keras concatenation classification fusion lidar

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

-来自相机的图像:它们是RGB图像。这是一个示例:enter image description here

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

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

但是我想做的是使用像VGG这样功能更强大的CNN。我使用了预训练模型并冻结了除最后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,然后仅获取每种模态的特征向量,然后对其进行串联并在顶部添加完全连接的层以预测图像的类。它适用于未经培训的模型。可以根据需要提供代码

3 个答案:

答案 0 :(得分:2)

尝试一下

xampp

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

答案 1 :(得分:0)

当执行fused_model.fit([X_camera,X_depth],Y_Train,epochs = 10,batch-size = 32,verbose = 1,metrics = [‘acc'],validation_split = 0.1)时;我收到内存错误...认为有两个要训练的参数。还有其他方法可以合并从相同vgg模型提取但在不同输入数据上的两个特征图吗?

答案 2 :(得分:0)

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