Максимальная работа пула в Matlab?

Есть ли функция, которая позволяет вычислить 2-мерный максимальный пул с предопределенными размерами ядра и шагом окна в Matlab?

Я искал, но пока ничего не нашел...

Скажем, у меня есть 3D-куб данных [ВxШxС], я хотел бы запустить двухмерный максимальный пул для каждого канала отдельно (аналогично операции максимального пула, известной из нейронных сетей).
Аналогичная функция opencv также будет Помоги мне...


person mcExchange    schedule 28.03.2017    source источник


Ответы (2)


Вот еще одно решение, которое не требует функции нейронной сети.

Вы можете выполнить свертку с вашим ядром на каждом канале, а затем выбрать фрагменты результирующей матрицы, которые вы хотите сохранить (что соответствует шагу). Вот пример кода для общего случая объединения линейных средних.

% pool
kernel = ones(k)/k^2;
temp = conv2(padarray(data, [p p]), kernel, 'valid');
% downsample 
pooled_data = temp(1:stride:end, 1:stride:end);

Конечно, вы можете использовать фильтр статистики порядка вместо линейного усреднения в этом примере или любую другую функцию объединения. Вы также можете поиграть с параметром значения padarray, чтобы получить желаемое поведение заполнения.

person Matthew Pope    schedule 30.03.2017

В итоге я использовал matconvnet.

k = 3; % kernel_size
p = 1; % padding size
data_pooled = vl_nnpool(single(data),[k,k],'Pad',[p,p,p,p]);
person mcExchange    schedule 29.03.2017