本篇博客主要记录一下在深度学习中几种常用的卷积形式的基本原理、输入输出维度,以及如何在Pytorch中调用这些卷积形式
卷积
卷积实际上是对图像的不同区域进行特征提取,一般认为输入图像的维度为H×W×C,如下图所示:
图像具有颜色通道,一般是RGB,需要理解的是不同通道数的图像和不同的通道数的滤波器如何计算得到结果,通过下面的图比较直观的理解:
可见图像中的通道数C与滤波器中的通道数要保持一致
同时需要进行滑动来计算下一个值:
可见卷积层中设计的参数如下:
- 滑动窗口步长
- 卷积核尺寸
- 边缘填充
- 卷积核个数
步长与卷积核大小对结果的影响
在卷积神经网络中往往需要进行多次卷积,如下图所示:
堆叠的卷积层可以用下图中的例子来理解其维度的变化:
步长也会影响输出的结果,如下图所示:
边缘填充方法
边缘填充一定程度上弥补了边界信息缺失的问题
特征图尺寸计算与参数共享
卷积结果计算公式:
长度:$ H_2=\frac{H_1-F_H+2P}{S}+1 $
宽度:$ W_2=\frac{W_1-F_W+2P}{S}+1 $
其中W1、H1表示输入的宽度、长度,W2、H2表示输出特征图的宽度、长度,F表示卷积核长和宽的大小,S表示滑动窗口的步长,P表示边界填充
图像的底层特征是跟具体位置无关的,故对于主要用于提取底层特征的前几层网络,每一个位置选用相同的卷积核,在这种思想下,可以通过下面的例子体会一下卷积神经网络中有多少参数:
- 数据是32323的图像,用10个553的filter进行卷积操作,所需的权重参数为:553*10=750,同时还有b参数,每个卷积核都有一个对应的偏置参数,故最终需要750+10=760个参数