0

我问这个问题的原因是因为在 VGG19 中有批量标准化层(例如,与 VGG16 不同)。

我正在尝试在 Caffe 中训练 Faster-RCNN 网络。我这样做是:

  • 下载 VGG19 ImageNet 预训练模型(权重 + prototxt 文件)
  • 从 prototxt 文件中删除全连接层
  • 在 VGG19 主干卷积层之上添加 RPN 和 Fast-RCNN 层

我没有改变任何关于lr_mult卷积层的值。在 prototxt 文件中,卷积层(如conv1_1等)具有非零lr_mult值,而批量归一化层的lr_mult值设置为 0(层名为 like conv1_1/bn)。

批量归一化层被冻结的事实是否意味着卷积层也被冻结?或者我应该lr_mult在名为 的图层中也设置为 0convX_X吗?


更新:在将所有卷积层归零的同时运行另一个训练过程后lr_mult,训练时间显着减少,这意味着答案是层中的lr_mult值也需要设置为 0 convX_X

4

1 回答 1

2

要在 Caffe 中使用 batchnorm 正确冻结卷积层,您应该:

  • 对于卷积层:将lr_mult参数设置为 0
  • 对于 batchnorm 层:将lr_multparams 设置为 0,设置use_global_statstrue
layer {
  name: "bn1"
  type: "BatchNorm"
  bottom: "pool1"
  top: "bn1"
  batch_norm_param {
    use_global_stats: true
  }
  param {
    lr_mult: 0
  }
  param {
    lr_mult: 0
  }
  param {
    lr_mult: 0
  }
}

批量归一化层被冻结的事实是否意味着卷积层也被冻结?

当然不是。但是,通过使用propagate_downparam 你可以达到这个效果:How do I to prevent back Computing in specific layers in caffe

于 2019-02-24T21:25:24.800 回答