本文总结了深度学习中常用的八种卷积,以非常直观的方式帮助你建立直观的理解,为你的深度学习提供有益的参考。它们是单通道卷积、多通道卷积、3D卷积、1×1卷积、转置卷积、扩张卷积、可分离卷积、分组卷积。Single-channelconvolutionSingle-channelconvolution在深度学习中,卷积是元素乘法加法。对于1通道的图像,卷积如下图所示。这里的过滤器是一个3x3矩阵,其元素为[[0,1,2]、[2,2,0]、[0,1,2]]。过滤器在输入上滑动。在每个位置,它都在进行逐元素乘法和加法。每个滑动位置都以一个数字结尾。最终输出是一个3x3矩阵。多通道卷积在许多应用程序中,我们处理具有多个通道的图像。一个典型的例子是RGB图像。每个RGB通道强调原始图像的不同方面,如下图所示:该图像拍摄于云南省元阳市。卷积神经网络中每层的多个滤波器内核是多通道的。卷积网络层通常由多个通道(数百个卷积核)组成。每个通道提取前一层不同方面的抽象特征。我们如何在不同深度的层之间过渡?我们如何将深度为n的层转换为深度为m的后续层?多通道卷积的“层”(过滤器)和“通道”(内核)产品如下。将每个内核应用于前一层的输入通道以产生输出通道。这是一个内核端进程。我们对所有内核重复此过程以生成多个通道。然后将这些通道中的每一个添加在一起以形成单个输出通道。下图让多通道卷积的过程更加清晰。输入层是一个5x5x3的矩阵,有3个通道。过滤器是一个3x3x3矩阵。首先,过滤器中的每个内核分别应用于输入层的三个通道并求和;然后,执行三次卷积,得到3个大小为3×3的通道。多通道二维卷积的第一步:过滤器中的每个内核分别应用于输入层中的三个通道。多通道二维卷积的第二步:然后将三个通道相加(逐元素相加)形成一个通道。3D卷积3D过滤器可以在所有3个方向(图像的高度、宽度、通道)上移动。在每个位置,逐元素乘法和加法提供一个数字。由于filter是在3维空间滑动的,所以输出的数字也是在3维空间排列的,那么输出的就是3维数据。类似于2D卷积中物体的空间关系,3D卷积可以描述物体在3D空间中的空间关系。这种3D关系具有重要的应用,例如在生物医学成像、CT和MRI的3D分割/重建中,其中血管等对象在3D空间中蜿蜒。1x1卷积在1x1卷积中,一个数字乘以输入层中的每个数字。如果输入层有多个通道,这个卷积会产生有趣的效果。下图说明了1x1卷积如何用于大小为HxWxD的输入层。在过滤器尺寸为1x1xD的1x1卷积之后,输出通道的大小为HxWx1。如果我们应用N个这样的1x1卷积,然后将结果连接在一起,我们可以得到一个大小为HxWxN的输出层。1x1卷积,过滤器大小为1x1xD本来,1x1卷积在网络文档中提出。它们随后在GoogleInception中被大量使用1x1卷积的一些优点是:降维以实现高效计算高效的低维嵌入或特征池化卷积后再次应用非线性前两个可以在上图中观察到优势。在1x1卷积之后,我们显着减小了尺寸。假设原始输入有200个通道,1x1卷积会将这些通道(特征)嵌入到单个通道中。第三个优点是在1x1卷积之后,可以加入非线性激活如ReLU,非线性可以让网络学习更复杂的特征。TransposedConvolution(Deconvolution,Deconvolution)对于许多应用程序和许多网络架构,我们常常希望在正常卷积的相反方向上进行变换,即我们希望进行上采样。一些示例包括生成高分辨率图像并将低维特征图映射到高维空间,例如自动编码器或语义分割。传统上,上采样可以通过应用插值方案或手动创建规则来实现。然而,神经网络等现代架构允许网络本身自动学习正确的转换,无需人工干预。对于下图中的示例,我们在具有3x3内核的2x2输入上应用转置卷积,用单位步幅填充2x2边界框,并将输出上采样到4x4的大小。Input2x2UpsamplingOutput4x4有趣的是,相同的2x2输入图像可以通过应用fancypadding和stride映射到不同的图像尺寸。下面,将转置卷积应用于相同的2x2输入,使用单位步幅用零填充2x2边界,输出现在大小为5x5。输入2x2上采样输出5x5在卷积中,让我们将C定义为内核,将Large定义为输入图像,将Small定义为卷积的输出图像。卷积(矩阵乘法)后,我们将大图像下采样为小图像输出。矩阵乘法中卷积的实现遵循CxLarge=Small。以下示例显示了此类操作的工作原理。它将输入展平为16x1矩阵,并将内核转换为稀疏矩阵(4x16)。然后在稀疏矩阵和展平输入之间应用矩阵乘法。之后,将生成的矩阵(4×1)转换回2×2输出。卷积的矩阵乘法:从大输入图像(4x4)到小输出图像(2x2)现在,如果我们在等式两边乘以矩阵CT的转置,并使用矩阵的乘法及其转置给出单位矩阵的属性,然后我们有以下公式CTxSmall=Large,如下图所示。卷积的矩阵乘法:dilatedconvolutionfromsmallinputimage(2x2)tolargeoutputimage(4x4)Standarddiscreteconvolution:StandardconvolutionDilatedconvolution如下:当l=1时,dilatedconvolution变成一个standardconvolution。扩张卷积直观上,扩张卷积通过在内核元素之间插入空格来“扩张”内核。这个附加参数l(扩张率)表示我们想要扩展内核的程度。实现可能会有所不同,但通常会在内核元素之间插入l-1个空格。下图显示了l=1、2和4的内核大小。扩张卷积的感受野在不增加额外成本的情况下观察到一个大的感受野。图中3×3的红点表示卷积后输出图像有3×3像素。尽管所有三个扩张卷积都给出相同大小的输出,但模型观察到的感受野却大不相同。对于l=1,感受野是3x3,对于l=2,感受野是7x7,对于l=3,感受野增加到15x15。有趣的是,与这些操作相关的参数数量基本相同。SeparableConvolutionSpatialSeparableConvolution空间可分离卷积作用于图像的二维空间维度,即高度和宽度。从概念上讲,空间可分离卷积将卷积分解为两个独立的操作。对于下图所示的示例,内核(3x3内核)分为3x1和1x3内核。在卷积中,一个3x3的内核直接与图像进行卷积。在空间可分离卷积中,首先将3x1核与图像进行卷积。然后应用1x3内核。这将需要6个参数而不是9个参数。此外,空间可分离卷积比卷积需要更少的矩阵乘法。举个具体的例子,在5×5的图像上用3×3的kernel(stride=1,padding=0)进行卷积,需要扫描kernel水平3个位置,垂直3个位置,共9个位置,如下如图所示。在每个位置,应用9元素乘法。总共9x9=81次乘法。标准卷积另一方面,对于空间可分离卷积,我们首先在5x5图像上应用3x1滤波器。我们在水平5个位置和垂直3个位置扫描这样的内核。总共5x3=15个位置,在下图中表示为点。在每个位置,应用3元素乘法。那是15x3=45次乘法。我们现在有一个3x5矩阵。这个矩阵现在与一个1x3内核卷积,该内核在水平3个位置和垂直3个位置扫描矩阵。对于这9个位置中的每一个,应用3个元素乘法。此步骤需要9x3=27次乘法。因此总体而言,空间可分离卷积需要45+27=72次乘法运算,少于标准卷积。DepthwiseSeparableConvolutionDepthwiseseparablerotation包含两个步骤:depthwiseconvolution和1x1convolution。在描述这些步骤之前,有必要回顾一下我在上一节中讨论的2D卷积和1x1卷积。让我们快速回顾一下标准的二维卷积。举个具体的例子,假设输入层的大小是7x7x3(高x宽x通道),filter的大小是3x3x3。经过一个filter的2D卷积后,输出层是尺寸5x5x1(仅1个通道)。标准2D卷积,使用1个过滤器创建1层输出通常,在两个神经网络层之间应用多个过滤器。假设我们这里有128个过滤器。在应用了这128个2D卷积之后,我们有128个5x5x1输出图。然后,我们将这些地图堆叠成一个大小为5x5x128的单层。通过这样做,我们将输入层(7x7x3)转换为输出层(5x5x128)。空间维度,即高度和宽度,缩小,而深度加长。标准2D卷积,使用128个过滤器创建128层输出现在有了深度可分离卷积,让我们看看如何实现相同的转换。首先,我们将深度卷积应用于输入层。我们没有在2D卷积中使用大小为3x3x3的单个过滤器,而是每个使用3个内核。每个过滤器的大小为3x3x1。每个内核与输入层的1个通道进行卷积(只有1个通道,而不是所有通道!)。每个这样的卷积提供一个大小为5×5×1的映射。然后我们将这些地图堆叠在一起以创建一个5×5×3的图像。在此之后,我们的输出大小为5x5x3。我们现在减少空间大小,但深度与以前相同。Depthwiseseparableconvolution-第一步:我们不是在2D卷积中使用大小为3x3x3的单个过滤器,而是分别使用3个内核。每个过滤器的大小为3x3x1。每个内核与输入层的1个通道进行卷积(只有1个通道,而不是所有通道)。每个这样的卷积提供一个大小为5×5×1的映射。然后我们将这些地图堆叠在一起以创建一个5×5×3的图像。在此之后,我们的输出尺寸为5x5x3。作为深度可分离卷积的第二步,为了扩展深度,我们应用内核大小为1x1x3的1x1卷积。将5x5x3输入图像与每个1x1x3内核进行对比,可提供大小为5x5x1的映射。因此,在应用128个1x1卷积后,我们可以获得大小为5x5x128的层。深度方向可分离卷积-第二步:应用多个1x1卷积来修改深度。通过这两个步骤,深度可分离卷积还将输入层(7x7x3)转换为输出层(5x5x128)。depthwiseseparableconvolution的整个过程如下图所示。depthwiseseparableconvolution的全过程那么,depthwiseseparableconvolution有什么优势呢?效率!与二维卷积相比,深度可分离卷积所需的操作更少。让我们回顾一下2D卷积示例的计算成本。有128个3x3x3的内核移动5x5次。那是128x3x3x3x5x5=86,400次乘法。可分离卷积呢?在第一个深度卷积步骤中,有3个3x3x1内核移动了5x5次。那是3x3x3x1x5x5=675次乘法。在1x1卷积的第二步中,有128个1x1x3的核移动了5x5次。那是128x1x1x3x5x5=9,600次乘法。所以总的来说,深度可分离卷积需要675+9600=10,275次乘法。这只是2D卷积成本的12%左右!Groupedconvolution2012年,AlexNet论文中引入了groupedconvolution。实现它的主要原因是允许通过两个具有有限内存(每个GPU1.5GB内存)的GPU进行网络训练。下面的AlexNet在大多数层上显示了两个独立的卷积路径。它是跨两个GPU进行模型并行化(当然,如果你有更多的GPU,多GPU并行化也是可能的)。在这里,我们描述了分组卷积的工作原理。首先,传统的二维卷积遵循以下步骤。在此示例中,通过对输出层应用128个过滤器(每个过滤器大小为3x3x3),将大小为(7x7x3)的输入层转换为大小为(5x5x128)的层。或者在一般情况下,通过应用Dout内核(每个大小为hxwxDin),将大小为(HinxWinxDin)的输入层转换为大小为(HoutxWoutxDout)的输出层。Standard2DConvolution在分组卷积中,过滤器被分成不同的组。每个组负责一个具有一定深度的传统2D卷积。如下所示。具有2个滤波器组的分组卷积上面是具有2个滤波器组的分组卷积的图示。在每个滤波器组中,每个滤波器的深度仅为标称二维卷积的一半。它们的深度为Din/2。每个滤波器组都包含Dout/2滤波器。第一个滤波器组(红色)与输入层的前半部分([:,:0:Din/2])卷积,而第二个滤波器组(蓝色)与输入层的后半部分积([:,:0:Din/2])卷积[:,:,Din/2:Din])。因此每个过滤器组都会创建Dout/2个通道。总的来说,这两个组创建了2xDout/2=Dout通道。然后,我们使用Dout通道将这些通道堆叠在输出层中。
