【将门创投】这12张图生动地告诉你,深度学习中的卷积网络是怎么一回事?

现现在,卷积神经网络在人工智能领域应用的普遍性及重要性可谓是不言而喻。为了让你们对卷积的类型有一个清晰明了的认识,我快速概述了几种不一样类型的二维卷积及其好处。网络

 

 

卷积(Convolutions)架构

 

首先,咱们须要就定义卷积层的几个参数。学习

 

图1 二维卷积、内核大小为三、步幅为1动画

 

  • 内核大小:内核大小定义了卷积的视野。二维的常见选择是3——即3x3像素。ui

     

  • 步幅:步幅定义了遍历图像时内核的步长。虽然它的默认值一般为1,但咱们可使用2的步长,相似于最大池化对图像进行下采样。人工智能

     

  • padding:padding定义样本的边框如何处理。一(半)个padding卷积将保持空间输出尺寸等于输入尺寸,而若是内核大于1,则不加卷积将消除一些边界。spa

     

  • 输入和输出通道:卷积层须要必定数量的输入通道(I),并计算出特定数量的输出通道(O)。能够经过I * O * K来计算这样一层所需的参数,其中K等于内核中的值的数量。3d

 

 

扩张卷积(Dilated Convolutions)code

(又名阿鲁斯卷积)blog

 

扩张卷积引入另外一个卷积层的参数被称为扩张率。这定义了内核中值之间的间距。扩张速率为2的3x3内核将具备与5x5内核相同的视野,而只使用9个参数。 想象一下,使用5x5内核并删除每一个间隔的行和列。

 

 图2 二维卷积、扩展速率为2的3核,无padding

 

它使得系统可以以相同的计算成本提供更普遍的观察范围。扩张卷积在实时分割领域特别受欢迎。 若是你须要更大的观察范围,且没法承受多个卷积或更大的内核,请考虑使用它。

 

 

转置卷积(Transposed Convolutions)

(又名反卷积或分段缠绕卷积)

 

一些人使用反卷积这个名称,这不是特别恰当的,由于它不是一个反卷积。使事情变得更糟糕的反卷积确实存在,但在深度学习领域并不常见。实际的反卷积是反转卷积的过程。想象一下,将图像输入到单个卷积层。如今开始输出,把放置到一个黑盒子里,而后将你的原始图像再次输出。这个黑盒子进行了一个反卷积操做。这就是卷积层的数学反演。

 

转置的卷积在某种程度上来讲是类似的,由于它和一个假设的反卷积层所产生的空间分辨率是相同的。可是,正在执行的实际数学运算在值上是不一样的。转置卷积层执行的是常规卷积,但它会恢复其空间变换。

 

图3 二维卷积无padding,步幅2和内核3

 

关于这一点你可能会感到困惑,因此让咱们来看一个具体的示例。将一个5x5的图像馈送到卷积层。其步幅设置为2,padding禁用,内核为3x3。结果是产生一个2x2的图像。

 

若是咱们想反转这个过程,咱们须要反数学运算,以便从咱们输入的每一个像素中生成9个值。以后,咱们以2步幅的设置来遍历输出图像。这将是一个反卷积。

 

图4 转置的二维卷积无padding,步幅2和内核3

 

而转置卷积将不会进行此类操做。惟一的共同之处在于它保证输出也将是一个5x5的图像,同时仍然执行正常的卷积运算。为了实现这一点,咱们须要在输入上执行一些漂亮的padding。

 

正如你如今能够想象的,这一步并不会从上面扭转这个过程。 至少不包括数值。

 

它只是在以往的基础上重建空间分辨率并执行卷积操做。这可能不是数学的反演,可是对于Encoder-Decoder架构来讲,它仍然很是有用。这样,咱们能够将图像的缩放与卷积相结合,而不是将两个过程单独分开进行。

 

 

可分离卷积(Separable Convolutions)

 

在一个可分离卷积中,咱们能够将内核操做拆分红多个步骤。咱们用y = conv(x,k)表示卷积,其中y是输出图像,x是输入图像,k是内核。这一步很简单。接下来,咱们假设k能够由下面这个等式计算得出:k = k1.dot(k2)。这将使它成为一个可分离的卷积,由于咱们能够经过对k1和k2作2个一维卷积来取得相同的结果,而不是用k作二维卷积。

 

图5 Sobel X和Y滤镜

 

咱们以一般用于图像处理的Sobel内核为例。你能够经过乘以向量[1,0,-1]和[1,2,1] .T得到相同的内核。在执行相同的操做时,你只须要6个而不是9个参数。

 

上面的示例显示了所谓的空间可分离卷积,据我所知,这并非在深度学习中使用的。我只是想确保在他人费劲地操做时,你不会受到如此困惑。在神经网络中,咱们一般使用的是一种叫作深度可分离卷积的神经网络。

 

这将执行一个空间卷积,同时保持通道独立,而后进行深度卷积操做。在我看来,为了加深了解,能够用一个示例做为典范。

 

假设咱们在一个16输入通道和32输出通道上有一个3x3的卷积层。那么将要发生的就是16个通道中的每个都由32个3x3的内核进行遍历,从而产生512(16x32)的特征映射。接下来,咱们经过将每一个输入通道中的特征映射相加从而合成一个大的特征映射。因为咱们能够进行此操做32次,所以咱们获得了指望的32个输出通道。

 

那么,针对同一个示例,深度可分离卷积的表现又是怎样的呢?咱们遍历16个通道,每个都有一个3x3的内核,能够给出16个特征映射。如今,在作任何合并操做以前,咱们将遍历这16个特征映射,每一个都含有32个1x1的卷积,而后才逐此开始添加。这致使与上述4608(16x32x3x3)个参数相反的656(16x3x3 + 16x32x1x1)个参数。

 

该示例是深度可分离卷积的具体实现,其中所谓的深度乘数为1。而这是目前为止这些层最多见的设置。

 

咱们这样作是由于假设空间和深度信息是能够去耦的。而反观Xception模型的表现,能够发现这个理论彷佛是有效的。其实,可移动设备中也可使用深度可分离卷积。由于它们的参数是能够有效利用的。

 

 

总 结

 

到此为止,能够说对于卷积网络类型的介绍就要告一段落了。我但愿能帮助你们简要了解一下这个问题。而接下来,咱们将为你们展现一些卷积动画,帮助你们对此作深一步了解。

 

动图

01无padding无步幅

 

 

动图

02随机padding无步幅

 

动图

03半padding无步幅

 

动图

04全padding无步幅

 

动图

05无padding无步幅转置

 

动图

06随机padding无步幅转置

 

动图

07半padding无步幅转置

 

动图

08全padding无步幅转置

 

动图

09无padding有步幅

 

动图

10有padding有步幅

 

动图

11有padding有步幅(奇数)

 

动图

12扩张

 

-END-

相关文章
相关标签/搜索