如何在 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

但是,我并不期望它会快得多。如果内核是可分离的,那么会让事情变得更快。