Замораживание весов в сети VGG19 для трансферного обучения в кафе

Причина, по которой я задаю этот вопрос, связана с тем, что в VGG19 есть уровни нормализации партии (в отличие, например, от VGG16).

Я пытаюсь обучить сеть Faster-RCNN в Кафе. Я делаю это путем:

  • Загрузка предварительно обученной модели VGG19 ImageNet (файл весов + прототекст)
  • Удаление полностью связанных слоев из файла prototxt
  • Добавление слоев RPN и Fast-RCNN поверх сверточных слоев магистрали VGG19

Я ничего не изменил относительно lr_mult значения сверточных слоев. В файле prototxt сверточные слои (например, conv1_1и т. д. имеют ненулевое значение lr_mult значения, в то время как слои пакетной нормализации lr_mult значения установлены в 0 (слои, названные как conv1_1/bn).

Означает ли факт, что пакетные нормализационные слои заморожены, означает, что сверточные слои также заморожены? Или я должен установить lr_mult до 0 также в слоях с именем convX_X?


Обновление: после запуска другого тренировочного процесса при обнулении lr_mult из всех сверточных слоев, время обучения значительно сократилось, что означает, что ответ lr_mult значение должно быть установлено в 0 также в convX_X слои.

1 ответ

Чтобы правильно заморозить сверточные слои с батчормом в Кафе, вам необходимо:

  • Для сверточных слоев: Set lr_mult параметр до 0
  • Для слоев батчнорм: набор 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 Как вы можете добиться этого эффекта: Как предотвратить обратные вычисления в определенных слоях в caffe.

Другие вопросы по тегам