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

AI火箭营

5061获赞 782粉丝
分享文史、科技见解,促进文化科技思想觉醒
名师,翟中华
关注
0
0
收藏
分享