冻结VGG19网络中的权重以用于Caffe中的转移学习

时间:2019-02-23 18:09:44

标签: caffe vgg-net transfer-learning faster-rcnn

之所以问这个问题,是因为在VGG19中有批量标准化层(例如,不同于VGG16)。

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

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

对于卷积层的lr_mult值,我没有做任何更改。在prototxt文件中,卷积层(例如conv1_1等具有非零的lr_mult值,而批处理规范化层的lr_mult的值设置为0(名为{ {1}})。

批次归一化层被冻结的事实是否也意味着卷积层也被冻结了?还是应该在名为conv1_1/bn的图层中也将lr_mult设置为0?


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

1 个答案:

答案 0 :(得分:1)

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

  • 对于卷积层:将lr_mult参数设置为0
  • 对于batchnorm层:将lr_mult参数设置为0,将use_global_stats设置为true
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_down参数可以达到以下效果:How do I to prevent backward computation in specific layers in caffe