如何在 MATLAB 中加速 3 通道图像卷积?
How to speed up 3 channel image convolution in MATLAB?
我正在为神经网络使用卷积,目前它是这样实现的
for f = 1:NumberOfKernels
tempC = conv2(input(:,:,1),kernels(:,:,1,f),'same');
tempM = conv2(input(:,:,2),kernels(:,:,2,f),'same');
tempY = conv2(input(:,:,3),kernels(:,:,3,f),'same');
preactivation(:,:,f) = tempC + tempM + tempY;
end
这可以在一行中完成,而无需为每个颜色通道分别写出 conv2 吗? Image Processing Toolbox 中的 this 函数可以加快速度吗?考虑到我没有GPU。
您可以执行以下操作:
szk = size(kernels);
temp = zeros(size(input)+szk(1:3)-1);
szk = ceil(szk(1:2) / 2);
temp(szk(1):szk(1)-1+size(input,1),szk(2):szk(2)-1+size(input,2),:) = input;
for f = 1:NumberOfKernels
preactivation(:,:,f) = convn(temp,kernels(:,:,:,f),'valid');
end
但是,我并不期望它会快得多。如果内核是可分离的,那么会让事情变得更快。
我正在为神经网络使用卷积,目前它是这样实现的
for f = 1:NumberOfKernels
tempC = conv2(input(:,:,1),kernels(:,:,1,f),'same');
tempM = conv2(input(:,:,2),kernels(:,:,2,f),'same');
tempY = conv2(input(:,:,3),kernels(:,:,3,f),'same');
preactivation(:,:,f) = tempC + tempM + tempY;
end
这可以在一行中完成,而无需为每个颜色通道分别写出 conv2 吗? Image Processing Toolbox 中的 this 函数可以加快速度吗?考虑到我没有GPU。
您可以执行以下操作:
szk = size(kernels);
temp = zeros(size(input)+szk(1:3)-1);
szk = ceil(szk(1:2) / 2);
temp(szk(1):szk(1)-1+size(input,1),szk(2):szk(2)-1+size(input,2),:) = input;
for f = 1:NumberOfKernels
preactivation(:,:,f) = convn(temp,kernels(:,:,:,f),'valid');
end
但是,我并不期望它会快得多。如果内核是可分离的,那么会让事情变得更快。