内容简介:如果你听过深度学习中不同的卷积类型,包括:2D/3D/1*1/Ttransposed/Dilated/SpatiallySeparable/Depthwise Separable/Flattened/Grouped/Shuffled Grouped Convolution
如果你听过深度学习中不同的卷积类型,包括:
2D/3D/1*1/Ttransposed/Dilated/Spatially
Separable/Depthwise Separable/Flattened/Grouped/Shuffled Grouped Convolution
这些,但是并不清楚它们实际意味着什么,本文就是带大家学习这些卷积到底是如何工作的。
在本文中,我尽量使用简单明了的方式向大家解释深度学习中常用的几种卷积,希望能够帮助你建立学习体系,并为你的研究提供参考。
Transposed Convolution
在许多应用和网络架构中,我们经常想要做逆向的卷积,即要进行上采样。一些示例包括了图像高分辨率,需要将低维特征映射到高维空间,比如自动编码器或者语义分割。(对于语义分割,首先用编码器提取特征图,然后在解码器中恢复原始图像大小,这样来实现分类原始图像的每个像素。)
更直接的,可以通过应用插值方案或手动创建规则来实现上采样。现在的一些结构,像神经网络,倾向于让网络自己学习正确的转换。要实现这一点,我们可以使用Transposed Convolution。
转置卷积(Transposed Convolution)在文献中也称为deconvolution或者fractionally strided convolution。
但是“deconvolution”这个名字不太合适,因为Transposed Convolution毕竟不是信号/图像处理中定义的那种反卷积。从技术上讲,在信号/图像处理中deconvolution是反向的卷积操作。我们这里讲的不是这种情况。因为这,很多学者很反对将Transposed Convolution叫做deconvolution。下面我们会讲解,为什么将这种卷积操作叫做“Transposed Convolution”会更合适。
我们可以使用直接卷积实现转置卷积。看下面图片中的例子,输入是2 x 2,填充2 x 2的0边缘,3 x 3的卷积核,stride=1。上采样输出大小是4 x 4。
很有趣,通过填充和步长的调整,我们可以把同一张2 x 2的图像映射成不同大小的输出。下面,转置卷积应用在相同的2 x 2输入(在输入之间插入一个0)填充2 x 2边缘,stride=1。现在,输出大小为5 x 5。
通过上面的例子了解转置卷积,可以帮我们建立直观的印象。但是要具体了解如何应用,就要看看在计算机中矩阵乘法是如何计算的。这样我们也可以看出,为什么Transposed Convolution是更好的名字。
在卷积中,让我们定义C作为我们的卷积核,Large是输入图像,Small是卷积输出图像。完成卷积(矩阵乘法)后,我们下采样large图像,得到小的输出图像。卷积中的矩阵乘法满足C x Large=Small。
下面的例子展示了该操作是怎么工作的。首先将输入变成一个16 x 1的矩阵,然后将Kernel转换成4 x 16的稀疏矩阵。在稀疏矩阵和变换后的输入间执行矩阵乘法。完成后,将得到的结果矩阵(4 x 1)转换回2 x 2输出。
现在,如果我们在等式两边多次执行矩阵C转置,得到转置矩阵CT,使用矩阵与其转置矩阵的乘法给出单位矩阵的属性,得到如下的公式 C T x Large=Small 如下图:
如你所见,我们执行了小图像到大图像的下采样。这也是我们想要得到的。现在你也明白“Transposed Convolution”的由来。
Dilated Convolution
这是标准的离散卷积:
机器人厨师本尊
dilated convolution如下:
当 l=1 ,dilated convolution称为标准离散卷积。
直观地说,dilated convolutions通过在卷积核元素之间插入空格来“扩张”卷积核。扩充的参数取决于我们想如何扩大卷积核。具体实现可能会不同,但内核元素之间通常会插入l-1个空格。下面的图展示了,当kernel大小为l=1,2,4的时候。
dilated convolutions的感受野,在没有增加消耗的情况下,能够观察到更大的感受野。
在图中,3 x 3的红点表明,卷积后,输出图像是3x3像素。虽然三个卷积提供的输出具有相同的大小,但是模型的感受野却是不同的。当l=1时,感受野是3 x 3;l=2时,感受野是7 x7;当l=3时,感受野扩张到15 x 15。有趣的是,这些操作的相关参数数量基本相同。因此,dilated convolution被用来扩大输出的感受野,而不增加kernel的尺寸,当多个dilated convolution一个接一个堆叠时,这特别有效。
Separable Convolution
Separable Convolution会在一些神经网络结构中用到,比如MobileNet。有Spatially Separable Convolution 和depthwise Separable Convolution之分。
Spatially Separable Convolution
Spatially Separable Convolution在图像的2D空间维度上操作,比如高度和宽度。从概念上说,可以将该卷积操作分为两步。我们可以看下面的例子,一个Sobel kernel,3 x 3尺寸,分为3 x 1和 1 x 3的两个kernel。
一般卷积中,是3 x 3 kernel直接和图像卷积。而Spatially Separable Convolution中,首先是3 x 1的卷积核和图像卷积, 然后再是1 x 3卷积核操作。这样一来,只需要6个参数就可以搞定了,而相同的一般卷积操作需要9个参数。
更多的,在Spatially Separable Convolution中,矩阵乘法也更少。
我们一起来看一个具体的例子,一个5 x 5的图像,3 x 3的卷积核(stride=1,padding=0),需要水平扫描三次,垂直扫描三次。有9个位置,可以看下图。在每个位置,9个元素要进行乘法。所以总共是要执行9 x 9=81次乘法。
我们可以来看看Spatially Separable Convolution中是怎么样的。我们首先应用3 x 1的filter在5 x 5图像上。那么应该是水平扫描5个位置,垂直扫描3个位置。那么总共应该是5 x 3=15个位置,如下方有黄点的图所示。在每个位置,完成3次乘法,总共是15 x 3=45次乘法。现在我们得到的是一个3 x 5的矩阵。然后再在3 x 5矩阵上应用1 x 3kernel,那么需要水平扫描3个位置和垂直扫描3个位置。总共9个位置,每个位置执行3次乘法,那么是9 x 3=27次,所以完成一次Spatially Separable Convolution总共是执行了45+27=72次乘法,这比一般卷积要少。
让我们归纳一下上面的例子。现在,我们应用卷积在一个N x N的图像上,kernel尺寸为m x m,stride=1,padding=0。传统卷积需要(N-2) x (N-2) x m+(N-2)x(N-2)xm=(2N-2)x(N-2)xm次乘法。
标准卷积和Spatially Separable Convolution的计算成本比为:
当有的层,图像的尺寸N远远大于过滤器的尺寸m(N>>m)时,上面的等式就可以简化为2/m。这意味着,在该种情况下,如果kernel大小为3 x 3,那么Spatially Separable Convolution的计算成本是传统卷积的2/3。
虽然Spatially Separable Convolution可以节省成本,但是它却很少在深度学习中使用。最主要的原因是,不是所有的kernel都可以被分为两个更小的kernel的。如果我们将所有传统卷积用Spatially Separable Convolution替代,那么这将限制在训练过程中找到所有可能的kernels。找到的结果也许就不是最优的。
Depthwise Separable Convolution
现在让我们再来看看Depthwise Separable Convolution,这在深度学习中就应用得更多一些了。该卷积也是分两步,DW卷积和1 x 1卷积。
在讲解这步骤之前,我们有必要回顾一下上面提到的2D卷积和1 x 1卷积。让我们快速过一下标准2D卷积。直接看具体的案例,输入的大小是7 x 7 x 3(高、宽、通道数)。卷积核大小3 x 3 x 3。完成2D卷积操作之后,输出是5 x 5 x 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的输出。在空间上,高度和宽度都压缩了,但是深度拓展了。
128个filter,将输出扩展到128层
现在我们看看使用depthwise separable convolution ,让我们看看如何获得相同的转换效果。
首先,我们将deothwise convolution应用到输入层。和使用单一3 x 3 x 3filter在2D卷积上不同,我们使用3个分开的kernel。每个kernel的尺寸是3 x 3 x 1。每个kernel只完成输入的单通道卷积。每个这样的卷积操作会得到一个5 x 5 x 1的特征图。然后,我们将三个特征图堆叠到一起,得到一个5 x 5 x 3的图像。操作结束,输出的大小为5 x 5 x 3。我们压缩了空间维度,但是输出的深度和输入是一样的。
depthwise separable convolution的第二步是,扩充深度,我们使用大小为1 x 1 x 3的kernel,完成1 x 1卷积。最后得到5 x 5 x 1的特征图。
在完成128个1 x 1卷积操作之后,我们得到了5 x 5 x 128的层。
通过上面的两步,deothwise separable convolution将输入(7 x 7 x 3)的转换成了5 x 5 x 128的输出。
整个过程如下图:
因此,deothwise separable convolution的优势是什么呢?效率!比起2D卷积,deothwise separable convolution要少很多操作。
让我们来看看2D卷积的计算消耗。有128个3 x 3 x 3卷积核,移动5 x 5次。一共要执行128 x 3 x 3 x 3 x 5 x 5=86400乘法。
separable convolution呢?在第一步deothwise convolution中,这里有3个3 x 3 x 1kernel,移动5 x 5次,一共是675次乘法。在第二步中,128个1 x 1 x 3卷积核移动5 x 5次,一共9600次乘法。总的计算消耗是675+9600=10275次乘法。消耗仅仅只有2D卷积的12%。
因此,随意一张图的处理,应用deothwise separable convolution可以节省多少时间呢?让我们根据上面的案例做一般推导。现在,假设输入是 H x W x D ,2D卷积(stride=1,padding=0) Nc 个kernel大小为 h x h x D ,其中h是偶数。将输入 H x W x D 转换为输出层 (H-h+1 x W-h+1 x Nc ) 。总的乘法操作是: Nc x h x h x D x (H-h+1) x (W-h+1)。
另一方面,使用depthwise separable convolution的计算消耗是:
后者和前者的计算消耗比例为:
在现在的很多结构中,输出层都有相当多的通道。也就是说 Nc 往往远大于h。所以,如果是3 x 3的filter,那么2D卷积花的时间是depthwise separable convolution的9倍,如果是5 x 5的卷积核,将是25倍。
depthwise separable convolution的劣势是什么呢?它减少了卷积的参数。如果是一个较小的模型,那么模型的空间将显著减小。这造成的结果就是,模型得到的结果并不是最优。
原文链接:
https://towardsdatascience.com/a-comprehensive-introduction-to-different-types-of-convolutions-in-deep-learning-669281e58215
以上所述就是小编给大家介绍的《一文带你了解深度学习中的各种卷积(下)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 卷积有多少种?一文读懂深度学习中的各种卷积
- 形象理解深度学习中八大类型卷积
- 深度卷积网络迁移学习的脸部表情识别
- 深度卷积神经网络中的降采样
- [译] 浅析深度学习神经网络的卷积层
- 资料 | 解析卷积神经网络 ——深度学习实践手册
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
The Filter Bubble
Eli Pariser / Penguin Press / 2011-5-12 / GBP 16.45
In December 2009, Google began customizing its search results for each user. Instead of giving you the most broadly popular result, Google now tries to predict what you are most likely to click on. Ac......一起来看看 《The Filter Bubble》 这本书的介绍吧!