Можете ли вы определить слой Caffe для среднего вычитания в слой ввода для развернутой модели?

Вы можете предоставить mean_file параметр к Input слой как часть transform_param блок, такой как:

layer {
  name: "data"
  type: "Input"
  top: "data"
  input_param { shape: { dim: 1 dim: 3 dim: 224 dim: 224 } }
  transform_param {
    mean_file: "imagenet_mean.binaryproto"
  }
}

но для Input Слой кажется, что это преобразование просто игнорируется без предупреждения.

При проверке других типов слоев данных кажется, что ни один из них не способен использовать простой Input слой как их нижний (входной) слой, и поэтому ни один из этих слоев не может быть использован для применения среднего вычитания после факта.

Также есть Bias слой, но я не могу понять его документацию, и он не принимает двоичный файл proto.

Предположим, я ограничен, поэтому могу выражать только среднее вычитание в файле прото. Я не могу сделать это в C++ или Python раньше, чем передать ввод, и я не могу написать его как пользовательский слой или Python слой.

Учитывая это ограничение, как я могу добиться среднего вычитания с помощью файла двоичного протока на входном слое - либо путем определения другого слоя после или после него, либо какими-либо другими средствами?

1 ответ

Предполагая, что у вас может быть входной слой, "верх" которого является минусом 'imagenet_mean.binaryproto' тогда вы можете использовать "Bias" слой для вычитания среднего значения:

layer {
  name: "mean_subtract"
  type: "Bias"
  bottom: "raw_data" # shape 1-by-3-by-224-by-224
  bottom: "minus_imagenet_mean" # assuming shape 3-by-224-by-224
  top: "data"
  bias_param { axis: 1 } 
}

Работать с batch_size: 1 Вы также можете сделать то же самое вычитание, используя "Eltwise" слой.


Обновить:
Ладно, похоже, твоя проблема в том, "где, черт возьми, я собираюсь принести "minus_imagenet_mean" BLOb?!"
Рассматривали ли вы использование "Parameter" хранить "minus_imagenet_mean"?

layer {
  name: "minus_imagenet_mean"
  type: "Parameter"
  top: "minus_imagenet_mean"
  parameter_param { shape { dim: 3 dim: 224 dim: 224 } }
  param { lr_mult: 0 decay_mult: 0 }
}

Как только вы определите этот слой, вы можете использовать net surgery инициировать этот параметр. Затем сохраните его caffemodel наряду со всеми другими параметрами сети, и вы должны быть в порядке.

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