如何在MATLAB中加速3通道图像卷积?

时间:2015-08-24 21:00:58

标签: matlab image-processing optimization convolution

我正在使用卷积进行神经网络,目前它正在像这样实现

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吗?图像处理工具箱中的this功能可以加快速度吗?考虑到我没有GPU。

1 个答案:

答案 0 :(得分:1)

您可以执行以下操作:

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

然而,我不希望它快得多。如果内核可以分离,那会让事情变得更快的是什么。