购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

6-2 卷积

卷积定义一个滤波器(Filter)或称卷积核(Kernel),对图像进行乘积和运算,如图6.3所示,计算步骤如下:

(1)将输入图像依照滤波器裁切相同尺寸的部分图像。

(2)裁切的图像与滤波器相同的位置进行相乘。

(3)加总所有格的数值,即为输出的第一格数值。

(4)逐步向右滑动窗口(如图6.4),回到步骤(1),计算下一格的值。

(5)滑到最右边后,再往下滑动窗口,继续进行。

图6.3 卷积计算(1)

图6.4 卷积计算(2)

网络上有许多动画或影片可以参考,例如 Convolutional Neural Networks—Simplified [1] 一文中卷积计算的GIF动画 [2]

范例1.使用程序计算卷积。

下列程序代码请参考【06_01_convolutions.ipynb】。

(1)准备数据及滤波器(Filter)。

执行结果。

(2)计算卷积。

执行结果。

(3)使用SciPy套件提供的卷积函数验算,执行结果一致。

卷积计算时,其实还有两个参数:

(1)补零(Padding):上面的卷积计算会使得图像尺寸变小,因为,滑动窗口时,裁切的窗口会不足2个(滤波器宽度3-1=2),PyTorch预设为不补零,即图像尺寸会变小,若要补零直接指定个数即可。反观TensorFlow的Padding只有两个选项:

Padding='same':在图像周围补上不足的列与行,使计算结果的矩阵尺寸不变(same),与原始图像尺寸相同,如图6.5所示。

Padding='valid':不补零,即Padding=0。

图6.5 Padding='same',在图像周围补上不足的列与行

(2)滑动窗口的步数(Stride):图6.4是Stride=1,图6.6是Stride=2,可减少要估算的参数个数。

图6.6 Stride=2,一次滑动2格窗口

以上是二维的卷积(Conv2d)的运作,通常应用在图像上。PyTorch/TensorFlow还提供Conv1d、Conv3d,其中Conv1d因只考虑上下文(Context Sensitive),所以可应用于语音或文字方面,Conv3d则可应用于立体的对象。还有nn.ConvTransposeNd提供反卷积(Deconvolution)或称上采样(Up Sampling)的功能,由特征图重建图像。卷积和反卷积两者相结合,可以组合成AutoEncoder模型,它是许多生成模型的基础算法,可以去除噪声,生成干净的图像。 +xdp26yia9EaQRlRu6v7cyMHo2LwfWTYSc4VHOQgJmFvnMfuE8vXoXqlTQ+PrVr0

点击中间区域
呼出菜单
上一章
目录
下一章
×