卷积和反卷积计算公式及仿真:https://blog.csdn.net/weixin_44855366/article/details/119871645
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,以此类推直到遍历整个图像。
输出尺寸为:output_size=f(input_size,kernel_size,padding,stride)
更多情况如下所示,主要考虑图6。一般来说都会采取padding(=1)来保持输入输出的尺寸一致,步长不定。
对于卷积,在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,公式如下: