Заполнение напрямую изменяет размер ввода, поэтому ядро должно сворачиваться с большим количеством входных значений, что приводит к увеличению числа FLOP.
Расширение более интересно: количество операций не изменяется при увеличенииЭто.Однако сверточное ядро становится больше и меньше операций подходит для ввода.Таким образом, количество FLOP уменьшается.В этом смысле расширение является аналогом заполнения.
Вы можете увидеть, как параметры заполнения и расширения изменяют количество MACC (множественное накопление = 2FLOP), используя Анализатор Netscope CNN .
Например, конфигурация по умолчанию:
layer {
name: "data"
type: "Input"
top: "data"
input_param {
shape: { dim: 1 dim: 3 dim: 227 dim: 227 }
}
}
layer {
name: "conv1"
type: "Convolution"
bottom: "data"
top: "conv1"
convolution_param {
num_output: 96
kernel_size: 3
}
}
оценивается в 131,22 млн. MACC.С pad: 1
(«тот же» отступ) это 133,56M.С dilation: 2
только становится 128,9M.Но если вы компенсируете расширение расширением:
layer {
name: "data"
type: "Input"
top: "data"
input_param {
shape: { dim: 1 dim: 3 dim: 227 dim: 227 }
}
}
layer {
name: "conv1"
type: "Convolution"
bottom: "data"
top: "conv1"
convolution_param {
num_output: 96
kernel_size: 3
dilation: 2
pad: 1
}
}
, то снова 131,22M.