【问题标题】:Freezing weights in VGG19 network for transfer-learning in Caffe冻结 VGG19 网络中的权重以在 Caffe 中进行迁移学习
【发布时间】:2019-07-17 13:53:38
【问题描述】:

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

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

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

我没有对卷积层的lr_mult 值进行任何更改。在prototxt文件中,卷积层(如conv1_1等有非零的lr_mult值,而批量归一化层的lr_mult值设置为0(层命名为conv1_1/bn)。

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


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

【问题讨论】:

  • 你有你的权重+prototxt文件可以下载吗?

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


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-02
    • 1970-01-01
    • 2017-11-23
    • 1970-01-01
    • 2021-04-17
    • 2020-08-29
    • 2019-12-25
    • 1970-01-01
    相关资源
    最近更新 更多