Caffe将AlexNet的PreTrained Weights复制到具有两个AlexNets的自定义网络

时间:2017-02-10 14:37:59

标签: image-processing neural-network deep-learning caffe convolution

我正在尝试构建一个包含两个图像输入的网络。每个图像将与后期融合同时通过网络,将融合并提供一个输出。我使用下面的图表来显示我需要的东西(ps:对不起,我的英语不太好)

enter image description here

我的网络在caffe prototxt模型定义文件中定义,其中包含两次精确定义的AlexNet,直到Pool 5.对于第一个网络,图层的名称与AlexNet中的名称相同,而对于第二个网络,我添加了“每个图层名称的后缀为_1“。 我的问题是我如何复制预定的重量?

对于Eg:每个网络的卷积层1如下。请注意,对于conv1,可以轻松复制预训练的权重,因为图层名称与预训练模型中的图层名称相同。然而,conv1_1同样不同,所以我恐怕不能复制预训练的重量?或者,即使图层名称不同,有没有办法做到这一点?

layer {
  name: "conv1"
  type: "Convolution"
  bottom: "data1"
  top: "conv1"
  param {
    lr_mult: 0
    decay_mult: 1
  }
  param {
    lr_mult: 0
    decay_mult: 0
  }
  convolution_param {
    num_output: 96
    kernel_size: 11
    stride: 4
    weight_filler {
      type: "gaussian"
      std: 0.01
    }
    bias_filler {
      type: "constant"
      value: 0
    }
  }
}


layer {
  name: "conv1_1"
  type: "Convolution"
  bottom: "data2"
  top: "conv1_1"
  param {
    lr_mult: 0
    decay_mult: 1
  }
  param {
    lr_mult: 0
    decay_mult: 0
  }
  convolution_param {
    num_output: 96
    kernel_size: 11
    stride: 4
    weight_filler {
      type: "gaussian"
      std: 0.01
    }
    bias_filler {
      type: "constant"
      value: 0
    }
  }
}

2 个答案:

答案 0 :(得分:1)

我假设您在初始化后尝试微调整个网络,否则您可以简单地使用从AlexNet提取的功能并在FC层开始训练。对于微调,您需要在第一个网络上复制权重(一个具有相同名称),并使第二个网络与第一个网络共享权重。看看this主题。或者更确切地说是this来自Evan Shelmar的回复。

答案 1 :(得分:1)

我做了类似的事情,在这里你可以看到具有相同AlexNet的Siamese Network。 Identical AlexNet for Siamese Network。这是prototxt file