【问题标题】:How to speed up 3 channel image convolution in MATLAB?如何在 MATLAB 中加速 3 通道图像卷积?
【发布时间】:2015-11-18 10:18:04
【问题描述】:

我正在为神经网络使用卷积,目前它是这样实现的

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。

【问题讨论】:

  • 如果您没有 GPU,启用 GPU 的功能将无法运行。这就像问你是否可以骑自行车上班,前提是你没有自行车。
  • 如果所有通道的内核都相同,则可以使用convn一次。
  • 你试过imfilter(它不需要GPU)吗? @rayryeng:如果所有内核都相同,则可以利用distributivity of convolution 并可能在此处使用单个conv2,不是吗?
  • @horchler - 啊,是的。我没有那样想。这可以工作。
  • 内核对于所有通道都不相同,如果是这样,它对颜色不敏感。

标签: matlab image-processing optimization convolution


【解决方案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

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

【讨论】:

  • 内核可分离是什么意思?
  • 搜索“可分离过滤器”
  • 好吧,它并没有加快速度,但无论如何谢谢你,我确实接受了迟到的抱歉:D
猜你喜欢
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
  • 2018-04-07
  • 2015-03-19
  • 2018-05-16
  • 1970-01-01
  • 2016-09-02
相关资源
最近更新 更多