卷积和反卷积计算公式及仿真:

1  概述

  • 卷积(Convolutional):卷积在图像处理领域被广泛的应用,像滤波、边缘检测、图片锐化等,都是通过不同的卷积核来实现的。在卷积神经网络中通过卷积操作可以提取图片中的特征,低层的卷积层可以提取到图片的一些边缘、线条、角等特征,高层的卷积能够从低层的卷积层中学到更复杂的特征,从而实现到图片的分类和识别。
  • 反卷积:反卷积也被称为转置卷积,反卷积其实就是卷积的逆过程。大家可能对于反卷积的认识有一个误区,以为通过反卷积就可以获取到经过卷积之前的图片,实际上通过反卷积操作并不能还原出卷积之前的图片,只能还原出卷积之前图片的尺寸。通过反卷积可以用来可视化卷积的过程,反卷积在GAN等领域中有着大量的应用。

2  卷积

        我对于卷积的理解:如下图,对于一个5*5的图像,有一个3*3的卷积和,如果步长为1(stride=1)且填充(padding=1),那么第一次卷积如下图所示,卷积得到结果为0*4+0*0+0*0+0*0+0*1+1*0+1*0+0*0+1*0+2*(-4)=-8,且输出的矩阵大小为(5-3+2*1)/1+1=5,即5*5矩阵。padding的作用就是保持输入输出尺寸一致。

        继续右移stride=1个单位,继续卷积,得到输出为0*4+0*0+0*0+1*0+1*0+1*0+1*0+2*0+2*(-4)=-8,以此类推直到遍历整个图像。

反卷积神经网络deconvs 卷积反卷积神经网络_ide

        输出尺寸为:output_size=f(input_size,kernel_size,padding,stride)

反卷积神经网络deconvs 卷积反卷积神经网络_卷积_02

         更多情况如下所示,主要考虑图6。一般来说都会采取padding(=1)来保持输入输出的尺寸一致,步长不定。

反卷积神经网络deconvs 卷积反卷积神经网络_卷积_03

        对于卷积,在pytorch的函数为Conv2d()。

Conv2d(in_channels, out_channels, kernel_size, stride=1,padding=0, dilation=1, groups=1,bias=True, padding_mode=‘zeros’)

五个常用参数的含义如下:

  • in_channels:输入的通道数目;
  • out_channels:输出的通道数目;
  • kernel_size:卷积核的大小;
  • stride:卷积每次滑动的步长;
  • padding:填充,设置在所有边界增加值为 0 的边距的大小。

 3  反卷积

         对于反卷积,在pytorch的函数为ConvTranspose2d()。

nn.ConvTranspose2d(in_channels, out_channels, kernel_size, stride, padding)

参数的含义如下:

  • in_channels(int) – 输入信号的通道数
  • out_channels(int) – 卷积产生的通道数
  • kernel_size(int or tuple) - 卷积核的大小
  • stride(int or tuple,optional) - 卷积步长,即要将输入扩大的倍数。
  • padding(int or tuple, optional) - 输入的每一条边补充0的层数,高宽都增加2*padding

      而对于输入输出的计算,首先参数out_channels指定输出的通道数,即一定是output_size*output_size*out_channels,故主要计算输出的output_size,公式如下:

         

反卷积神经网络deconvs 卷积反卷积神经网络_卷积_04

反卷积神经网络deconvs 卷积反卷积神经网络_ide_05