目录
互相关运算定义
互相关运算定义在二维互相关运算中 卷积窗口从输入数组的最左上方开始 按从左往右、从上往下的顺序 依次在输入数组上滑动。当卷积窗口滑动到某一位置时 窗口中的输入子数组与核数组按对应元素相乘并求和 得到输出数组中相应位置的元素。
互相关运算图示假设我们有一张image和一个filter

我们对图像中的蓝色区域进行Cross-correlation 互相关运算
那么在点E处的计算方式就是
G[3,3] a∗A b∗B c∗C d∗D e∗E f∗F g∗G h∗H i∗I
互相关运算完整计算示例输入数组为3*3 核数组为2*2 输入数组计算如下


卷积运算图示
我们还是用上面互相关运算那幅图 我们记得cross-correlation的循环顺序是从左到右 从上到下。
而convolution是从右到左 从下到上 即在点E处的计算为 G[3,3] a∗I b∗H c∗G d∗F e∗E f∗D g∗C h∗B i∗A 那么这就相当于将‘filter翻转’了 即先上下翻转、再左右翻转 然后进行cross-correlation运算 如下所示

可是我们为什么要这么做呢 有什么意义呢 下面让我们来看下
卷积与互相关运算区别考虑 一张图如下 我们进行cross-correlation 得到的结果如下

如果将上面换成真实点的图

我们看到得到的结果就像是filter 只不过翻转了下。因此如果我们将filter翻转了一次再进行cross-correlation 那再加上上面的这次翻转就是两次翻转了 得到的图像就也就不变了。
于是卷积就有了下面的性质
Identity:E [...0,0,1,0,0...] F*E F 你可以想下cross-correlation行不行
那么什么时候convolution和cross-correlation是一样的呢
当filter关于x轴y轴对称时 通常的Average filter和Gaussian filter都是 两者得到的结果相同。
深度学习中的卷积为何能用互相关运算代替现在大部分的深度学习教程中都把卷积定义为图像矩阵和卷积核的按位点乘。实际上 这种操作亦应该是互相关 cross-correlation 而卷积需要把卷积核顺时针旋转180度 即将卷积核上下翻转再左右翻转 然后再做点乘。卷积运算和互相关运算虽然类似 但如果它们使用相同的核数组 对于同一个输入 输出往往并不相同。
那么 你也许会好奇在深度学习中卷积层为何能使用互相关运算替代卷积运算。这主要原因在于 在深度学习中核数组都是学出来的 卷积层无论使用互相关运算或卷积运算都不会影响模型预测时的输出。假设卷积层使用互相关运算学出某一核数组。设其他条件不变 使用卷积运算学出的核数组即为互相关核数组按上下、左右翻转。也就是说原始输入与学出的已翻转的核数组再做卷积运算时 依然得到的是同样输出。因此大多数深度学习中提到的卷积运算均指互相关运算。
对文章存在的问题 或者其他关于Python相关的问题 都可以在评论区留言或者私信我哦
如果文章内容对你有帮助 感谢点赞 关注
关注下方GZH 阿旭算法与机器学习 可获取更多干货内容~欢迎共同学习交流
一文看懂卷积运算(convolution)与互相关运算(cross-correlation)的区别
抵扣说明:
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。
更多文章请关注《万象专栏》
转载请注明出处:https://www.wanxiangsucai.com/read/cv182517