深度学习中不同的卷积操作
本篇参考An Introduction to different Types of Convolutions in Deep Learning 介绍一下深度学习中不同的卷积操作。
卷积(Convolutions)
常规卷积操作如下动图所示,下方(浅蓝色矩形)为输入图像或特征图(feature map),阴影矩形(
这里需要先介绍几个概念。
卷积核(kernel)
卷积核(卷积核包含至少一个 filter,有时也称 filter 为卷积核)中每个 filter 的大小决定了卷积操作的感受野。如上图所示,卷积核(也是filter,这里输出是单通道)是移动的阴影部分,大小为3,即
卷积核的大小一般设置成奇数,如
- 更容易 padding. 常常想要保持卷积后图像尺寸不变,假设图像大小为
,卷积核大小为 ,当 padding 的幅度设为 时,步幅为1,卷积输出为 . 但是,如果 是偶数时,padding 的幅度就不能设置为 ,因为它不再是整数,无法实现; - 更容易找到锚点。卷积时一般选择卷积核的某个位置为基准进行移动,通常选择卷积核的中心,如果卷积核大小为偶数,则无法找到锚点。
卷积输出图像尺寸的计算公式:
假设输入图像为
步幅(stride)
步幅决定了卷积核在图像上一次跨越的像素个数。如上图所示,卷积核在图像上一次平移一个像素。步幅常设为1,当设置更大步长时,类似于对图像进行下采样(如MaxPooling),即进行信息压缩,使得输出图像尺寸小于输入图像。步幅值就是缩放的倍数,如果步长设为2,输出就是输入的1/2.
填充(Padding)
填充定义了如何处理图像的边界。常用方法有两种,分别是 ‘same’ 和 ‘valid’:
- same padding: 进行填充(通常填充0),允许卷积核超出原始图像边界,并使得卷积后的特征图与原来一致;
- valid padding: 不进行任何处理,只使用原始图像,不允许卷积核超出原始图像边界。
输入输出通道
输入通道数决定了卷积核中每个 filter 的通道数,如输入通道数为 3,类似于 RGB 彩色图像。输出通道数决定了卷积核中有多少个 filter,如输出通道为 5,假设每个 filter 的尺寸为
膨胀卷积(Dilated Convolutions)
膨胀卷积(a.k.a, also known as, atrous convolutions, 圆卷积),膨胀卷积为卷积层引入了另一个参数,称为膨胀率。这定义了卷积核中的值之间的间隔。膨胀率为 2 的
这以相同的计算成本提供了更广阔的视野。膨胀卷积在实时分割领域中特别流行。如果您需要广阔的视野并且无法承受多次卷积或更大的卷积核,请使用它们。
转置卷积(Transposed Convolutions)
转置卷积(a.k.a. deconvolutions or fractionally strided convolutions,又称为反卷积或分数步卷积)。有些文献使用反卷积名称,这是不合适的,因为它不是反卷积。更糟糕的是,确实存在反卷积,但在深度学习领域并不常见。实际的反卷积可还原卷积的过程。想象一下将图像输入到单个卷积层中。现在获取输出,将其放入黑盒,然后再次输出原始图像。这个黑匣子进行去卷积。它是卷积层功能的数学逆运算。
转置卷积有些类似,因为它产生的空间分辨率与假设的反卷积层相同。但是,对值执行的实际数学运算是不同的。转置的卷积层执行常规卷积,但还原其空间变换。
我们看一个具体的例子。
如果我们想逆转此过程,则需要进行逆数学运算,以便从我们输入的每个像素中生成 9 个值。然后,我们以 2 的步幅遍历输出图像。这将是反卷积。
转置卷积不会这样做。唯一的共同点是它可以确保输出也将是
就像您现在可以想象的那样,此步骤不会从上面逆转该过程。至少不涉及数学逆操作。它仅从以前重建空间分辨率并执行卷积。这可能不是数学上的逆运算,但是对于 Encoder-Decoder 架构,它仍然非常有帮助。这样,我们可以将图像的放大与卷积结合在一起,而不必执行两个单独的过程。
可分离卷积(Separable Convolutions)
在可分离卷积中,我们能够把卷积操作分成多步进行。假设卷积表示为
以图像处理中常常使用的 Sobel 卷积核为例,可以通过将向量
这种卷积操作称为空间可分离卷积。
但在深度学习中,深度可分离卷积常会遇到。假设输入图像是 16 通道,卷积核尺寸是
之所以这样做是因为这样的假设,即空间和深度信息可以解耦。观察 Xception 模型的性能,该理论似乎行得通。深度可分离卷积由于其对参数的有效利用而也用于移动设备。