Можете ли вы определить слой 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
наряду со всеми другими параметрами сети, и вы должны быть в порядке.