Pithy: Справка с скриптом Matlab, который принимает массив ImageData и весов свертки из Caffe и возвращает свертку. Пожалуйста.Реализация свертки как матричное умножение
Я пытаюсь воссоздать свертку, порожденную Caffe в Matlab.
Давайте сделаем следующие определения
W**2 = Size of input
F**2 = Size of filter
P = Size of padding
S = Stride
K = Number of filters
Следующий текст описывает, как обобщить свертку как матричного умножения:
Местные регионы входного изображения растянуты в столбцы в обычно называется im2col. Например, если вход является [227x227x3] и он должен быть свернут с фильтрами 11x11x3 на шаге 4, тогда мы возьмем [11x11x3] блоки пикселей на входе и растянем каждый блок в вектор-столбец размером 11 * 11 * 3 = 363. Итерируя этот процесс на входе с шагом 4, получаем (227-11)/4 + 1 = 55 местоположений вдоль ширины и высоты, что приводит к выходной матрице X_col из im2col размера [363 x 3025], где каждый столбец является растянутым восприимчивым полем, и в целом 55 * 55 = 3025 из них. Обратите внимание, что поскольку перекрывающиеся рецептивные поля перекрываются, каждое число во входном томе может дублироваться в нескольких разных столбцах.
Исходя из этого, можно сделать вывод о том, что вызов функции im2col будет выглядеть примерно так:
input = im2col(input, [3*F*F, ((W-F)/S+1)**2)])
Однако, если я использую следующие параметры-значения
W = 5
F = 3
P = 1
S = 2
K = 2
I получить следующие размеры:
>> size(input)
ans =
1 3 5 5
>> size(output)
ans =
1 2 3 3
>> size(filter)
ans =
2 3 3 3
И если я использую вызов функции im2col сверху, я получаю пустую матрицу.
Если я изменил шаг на 1 в приведенном выше примере, размер входа, выхода и фильтра останется прежним. Если я использую команду «convn» от Matlab, размер не совпадает с фактическим выводом Caffe.
>> size(convn(input,filter))
ans =
2 5 7 7
Что бы общий способ изменить размер массива для матричного умножения?
Спасибо за ваш ответ! Я до сих пор не знаю, как вы могли бы умножить cols на фильтр. Размер cols становится 9 чем-то, а размер фильтра равен 3. –
@ V.Vocor: Размер фильтра равен 3x3. Вы должны переинтерпретировать его как вектор-столбец размером 9, а затем вы можете просто взять точечный продукт этого вектора фильтра и столбцов изображения. – cfh
Мой плохой. Еще раз спасибо! –