深度学习中的互相关计算Crosscorrelation Operation

一、单输入通道的一维互相关运算

1、原理

在单输入通道的一维互相关运算中,卷积窗口从输入数组的最左方开始,按从左往右的顺序,依次在输入数组上滑动。当卷积窗口滑动到某一位置时,窗口中的输入子数组与核数组按对应元素相乘并求和,得到输出数组中相应位置的元素。

由上图所示,输入数组是一个长度为7的一维数组,核数组是一个长度为2的一维数组,可以看到输出数组的长度为7−2+1=6。

单输入通道的一维互相关计算就是由输入数组的最左边长度为2的子数组与核数组按元素相乘后再相加得到输出数组的第一个元素值,即0×1+1×2=0+2=2。依次类推得到输出数组的第二个元素值,即1×1+2×2=1+4=5等等。

2、代码

 复现单输入通道的一维互相关运算,代码如下:

import torch

def Crosscorrelation1Dim(input, kernel):  # input = [0 1 2 3 4 5 6]; kernel = [1 2]
    k = kernel.shape[0]  # k = 2
    output = torch.zeros((input.shape[0] - k + 1))  # output = [0. 0. 0. 0. 0. 0.]
    for i in range(output.shape[0]):  # i = 0; i = 1
        output[i] = (input[i: i + k] * kernel).sum()  # output = [2. 0. 0. 0. 0. 0.]; output = [2. 5. 0. 0. 0. 0.]
    return output

input = torch.tensor([0, 1, 2, 3, 4, 5, 6])
kernel = torch.tensor([1, 2])
print(Crosscorrelation1Dim(input, kernel))  # tensor([ 2.,  5.,  8., 11., 14., 17.])

3、结果


二、多输入通道的一维互相关运算

1、原理

在多输入通道的一维互相关运算中,在每一个通道上,将核数组与相应的输入数组做一维互相关运算,并将通道之间的结果相加得到输出数组中相应位置的元素。

由上图所示,输入数组是三个长度为7的一维数组,核数组是三个长度为2的一维数组,可以看到输出数组的长度依旧为7−2+1=6。

三输入通道的一维互相关运算就是由第一个输入数组的最左边长度为2的子数组与第一个核数组按元素相乘后相加2×(-1)+3×(-3)=-2+-9=-11再加上,第二个输入数组的最左边长度为2的子数组与第二个核数组按元素相乘后相加1×3+2×4=3+8=11再加上,第三个输入数组的最左边长度为2的子数组与第三个核数组按元素相乘后相加0×1+1×2=0+2=2,得到输出数组的第一个元素值,即-11+11+2=2。依次类推得到输出数组的第二个元素值,即(3×(-1)+4×(-3))+(2×3+3×4)+(1×1+2×2)=-15+18+5=8等等。

2、代码

 复现三输入通道的一维互相关运算,代码如下:

def Crosscorrelation1Dim_Multi_Input(Input, Kernel):
    # 首先沿着Input和Kernel的第0维(通道)遍历计算一维互相关结果。
    # 然后将所有结果沿着第0维堆叠累加
    return torch.stack([Crosscorrelation1Dim(input, kernel) for input, kernel in zip(Input, Kernel)]).sum(dim=0)

Input = torch.tensor([[2, 3, 4, 5, 6, 7, 8],
                      [1, 2, 3, 4, 5, 6, 7],
                      [0, 1, 2, 3, 4, 5, 6]])
Kernel = torch.tensor([[-1, -3], [3, 4], [1, 2]])
print(Crosscorrelation1Dim_Multi_Input(Input, Kernel))  # tensor([ 2.,  8., 14., 20., 26., 32.])

3、结果

  • 12
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

瑞雪兆我心

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值