深度学习中不同类型卷积的综合介绍:通过可视化直观地理解卷积

点击上方关注,All in AI中国

作者——Kunlun Bai

如果你听说过深度学习中不同类型的卷积(例如2D / 3D / 1x1 /转置/扩张(Atrous)/空间可分离/深度可分离/扁平/分组卷积),并且混淆了它们的含义,那么这篇文章会让你了解不同类型卷积的分工。

深度学习中不同类型卷积的综合介绍:通过可视化直观地理解卷积

在本文中,我总结了深度学习中常用的几种类型的卷积,并尝试以每个人都可以理解的方式解释它们。

希望这篇文章可以帮助你建立直觉,并为你的学习/研究提供有用的参考。

本文内容包括:

  1. 卷积 v.s.互相关
  2. 深度学习中的卷积(单通道版本,多通道版本)
  3. 3D卷积
  4. 1 x 1卷积
  5. 卷积运算
  6. 转置卷积
  7. 膨胀卷积(Atrous 卷积)
  8. 可分离卷积(空间可分离卷积,深度卷积)
  9. Flattened卷积
  10. 分组卷积
  11. Shuffled分组卷积
  12. Pointwise分组卷积

1. 卷积vs.s.互相关

卷积是一种广泛应用于信号处理、图像处理和其他工程/科学领域中的技术。在深度学习中,一种模型架构,即卷积神经网络(CNN)就是以此技术命名。然而,深度学习中的卷积本质上是信号/图像处理中的互相关。这两个操作之间存在细微差别。

在信号/图像处理中,卷积定义为:

深度学习中不同类型卷积的综合介绍:通过可视化直观地理解卷积

它被定义为两个函数在反转和移位后的乘积的积分。下面的可视化展示了这一想法。

深度学习中不同类型卷积的综合介绍:通过可视化直观地理解卷积

信号处理中的卷积。将过滤器g反转,然后沿水平轴滑动。对于每个位置,我们计算f和反向g之间的交点面积。交点面积是该特定位置的卷积值。

另一方面,互相关又被称为两个函数滑动点积或滑动内积。互相关过滤器不会反转。它直接滑过函数f。f和g之间的交点面积是互相关。下图显示了相关性和互相关之间的差异。

深度学习中不同类型卷积的综合介绍:通过可视化直观地理解卷积

信号处理中卷积和互相关之间的差异

在深度学习中,卷积中的过滤器是不可逆的。严格来说,它是互相关的。我们本质上执行的是元素的乘法和加法。但是,在深度学习中习惯上将其称为卷积。这很好,因为过滤器的权重是在训练期间学习的。如果上面示例中的反转函数g是正确的函数,则在训练之后的过滤器就会看起来像反转函数g。因此,在训练之前不需要像在真正的卷积中那样反转过滤器。

2.深度学习中的卷积

进行卷积的目的是从输入中提取有用的特征。在图像处理中,可以选择用于卷积的各种不同过滤器。每种类型的过滤器有助于从输入图像中提取不同的方面或特征,例如,水平/垂直/对角线边缘。同样,在卷积神经网络中,使用在训练期间自动学习权重的过滤器通过卷积提取不同的特征。然后将所有这些提取的特征"组合"起来以做出决定。

卷积有一些优点,例如权重共享和平移不变量。卷积还将像素的空间关系考虑在内。这些对于许多计算机视觉任务来说尤其有用,因为这些任务通常涉及识别某些组件与其他组件具有某些空间关系的对象。

2.1 卷积:单通道版本

深度学习中不同类型卷积的综合介绍:通过可视化直观地理解卷积

在深度学习中,卷积是元素的乘法和加法。这里的过滤器是一个3 x 3矩阵,元素为[[0,1,2],[2,2,0],[0,1,2]]。过滤器在输入端滑动。在每个位置,它都在进行元素乘法和加法。每个滑动位置都以数字结束。最终输出是一个3 x 3矩阵。注意,在这个例子中,stride = 1和padding = 0。这些概念将在下面的算术部分中描述。

2.2 卷积:多渠道版本

在许多应用程序中,我们处理的是具有多个通道的图像。典型的例子是RGB图像。每个RGB通道都强调原始图像的不同方面,如下图所示。

深度学习中不同类型卷积的综合介绍:通过可视化直观地理解卷积

不同的频道强调原始图像的不同方面

多通道数据的另一个例子是卷积神经网络中的层。卷积网络层通常由多个通道(通常为数百个通道)组成。每个通道描述前一层的不同方面。我们如何在不同深度的层之间进行过渡?我们如何将一个深度为n的图层转换为深度为m的后续图层?

在描述该过程之前,我们想澄清一些术语:层,通道,特征映射,过滤器和内核。从层次结构的角度来看,层和过滤器的概念处于同一级别,而通道和内核位于同一级。通道和功能图是一回事。图层可以有多个通道(或要素图):如果输入是RGB图像,则输入图层有3个通道。"通道"通常用于描述"层"的结构。同样,"内核"用于描述"过滤器"的结构。

深度学习中不同类型卷积的综合介绍:通过可视化直观地理解卷积

"层"("过滤器")和"通道"("内核")之间的区别

有了这些概念,多通道卷积如下。将每个内核应用到前一层的输入通道上以生成一个输出通道。这是一个内核方面的过程。我们对所有内核重复这样的过程以生成多个通道。然后将这些通道中的每一个加在一起以形成单个输出通道。

这里的输入层是一个5 x 5 x 3矩阵,有3个通道。过滤器是3 x 3 x 3矩阵。首先,过滤器中的每个内核分别应用于输入层中的三个通道。执行三次卷积,产生3个尺寸为3×3的通道。

深度学习中不同类型卷积的综合介绍:通过可视化直观地理解卷积

多通道2D卷积的第一步:过滤器中的每个内核分别应用于输入层中的三个通道。

然后将这三个通道相加(元素加法)以形成一个单通道(3 x 3 x 1)。该通道是使用过滤器(3×3×3矩阵)对输入层(5×5×3矩阵)进行卷积的结果。

深度学习中不同类型卷积的综合介绍:通过可视化直观地理解卷积

用于多通道的2D卷积的第二步:将这三个通道相加在一起(逐元素加法)以形成一个单通道。

同样,我们可以将此过程视为一个3D过滤器在矩阵输入层上滑动。请注意,输入层和过滤器具有相同的深度(通道编号=内核编号)。 3D过滤器仅在图像的2个方向,高度和宽度上移动(这就是为什么这种操作被称为2D卷积,尽管3D过滤器用于处理3D体积数据)。在每个滑动位置,我们执行逐元素乘法和加法,得到以个数字。在下面所示的示例中,滑动在水平5个位置和垂直5个位置执行。总的来说,我们得到一个单一输出通道。

深度学习中不同类型卷积的综合介绍:通过可视化直观地理解卷积

现在我们可以看到如何在具有不同深度的层之间进行过渡。假设输入层有Din通道,而输出层有Dout通道。我们需要做的是只将Dout过滤器应用于输入层。每个过滤器都有Din内核。每个过滤器提供一个输出通道。在应用Doutfilters后,我们有Dout通道,然后可以将它们堆叠在一起形成输出层。

深度学习中不同类型卷积的综合介绍:通过可视化直观地理解卷积

标准2D卷积。使用Dout过滤器将具有深度Din的一个层映射到具有深度Dout的另一个层。

3. 3D卷积

在上一节的最后一个例子中,我们看到我们实际上是对三维体积执行卷积。但通常情况下,我们仍将该操作称为深度学习中的2D卷积。这是3D体积数据的2D卷积。过滤器深度与输入层深度相同。3D过滤器仅在双向(图像的高度和宽度)上移动。此类操作的输出是2D图像(仅限1个通道)。

当然,有三维卷积。它们是2D卷积的推广。在3D卷积中,过滤器深度小于输入层深度(内核大小<通道大小)。因此,3D过滤器可以在所有3个方向(图像的高度,宽度,通道)上移动。在每个位置,逐元素乘法和加法都提供一个数字。由于过滤器在3D空间中滑动,因此输出的数字也排列在3D空间中。然后输出是3D数据。

深度学习中不同类型卷积的综合介绍:通过可视化直观地理解卷积

3D卷积可以描述3D空间中的对象的空间关系。这种3D关系对于一些应用是重要的,例如在生物医学想象的3D分割/重建中,在CT和MRI中诸如血管之类的物体在3D空间中的蜿蜒。

4. 1 x 1卷积

由于我们在前面的3D卷积部分讨论了深度操作,让我们看看另一个有趣的操作,即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的非线性激活。非线性允许网络学习更复杂的功能。

这些优势在Google的Inception论文中描述为:

上述模块的一个大问题,至少在这种简单的形式中,即使是一个适度数量的5x5卷积,在具有大量过滤器的卷积层之上也会非常昂贵。

这就引出了所提出的架构的第二个想法:明智地应用降维和预测,否则计算要求将增加太多。这是基于嵌入的成功:即使是低维嵌入也可能包含大量关于相对较大图像补丁的信息……也就是说,在昂贵的3 x 3和5 x 5卷积之前,使用1 x 1卷数来减少计算量。除了用作还原之外,它们还包括使用经过矫正的线性激活,这使它们具有双重用途。"

关于1 x 1卷积的一个有趣的观点来自Yann LeCun"在卷积网中,没有'完全连接的层'这样的东西。只有1x1卷积内核和一个完整连接表的卷积层。"

5. 卷积运算1

我们现在知道如何处理卷积的深度。让我们继续讨论如何处理其他两个方向(高度和宽度)的卷积,以及重要的卷积算法。

以下是一些术语:

  • 内核大小:内核将在上一节中讨论。内核大小定义了卷积的视图。
  • ·Stride:它定义了在图像中滑动时内核的步长。步幅为1意味着内核逐像素地滑过图像。步幅为2表示内核通过每步移动2个像素(即跳过1个像素)滑过图像。我们可以使用步幅(> = 2)对图像进行下采样。
  • Padding:填充定义了如何处理图像的边框。填充卷积(Tensorflow中的"相同"填充)将保持空间输出维度等于输入图像,如果需要,通过在输入边界周围填充0。另一方面,未填充卷积(Tensorflow中的"有效"填充)仅对输入图像的像素执行卷积,而不在输入边界周围填充0。输出大小小于输入大小。

下图描述了使用内核大小为3,步幅为1和填充为1的2D卷积。

深度学习中不同类型卷积的综合介绍:通过可视化直观地理解卷积

有一篇关于详细算法的优秀文章("深度学习的卷积算法指南"https://arxiv.org/abs/1603.07285)。可以参考它来获得内核大小,步幅和填充的不同组合的详细描述和示例。在这里,我只是总结一般案例的结果。

对于大小为i,内核大小为k,内边距为p和步幅为s的输入图像,来自卷积的输出图像的大小为o:

深度学习中不同类型卷积的综合介绍:通过可视化直观地理解卷积

6. 转置卷积

对于许多应用程序和许多网络体系结构,我们经常想要做与正常卷积相反方向的转换,即我们希望执行上采样。例如在自动编码器或语义分段中生成高分辨率图像并将低维特征映射映射到高维空间。(在后面的示例中,语义分段首先要在编码器中提取特征图,然后在解码器中恢复原始图像大小,以便它可以对原始图像中的每个像素进行分类。)

对于下图中的示例,我们使用3 x 3内核在2 x 2输入上应用转置卷积,使用单位步幅填充2 x 2边框。上采样输出的大小为4 x 4。

深度学习中不同类型卷积的综合介绍:通过可视化直观地理解卷积

有趣的是,通过应用花式填充和步幅,可以将相同的2 x 2输入图像映射到不同的图像大小。下面,转置卷积应用于相同的2 x 2输入(在输入之间插入1 0),使用单位步幅填充2 x 2的0边界。现在输出的大小为5 x 5。

深度学习中不同类型卷积的综合介绍:通过可视化直观地理解卷积

在上面的例子中观察转置卷积可以帮助我们建立一些直观的认识。但是为了概括其应用,有必要通过计算机中的矩阵乘法来研究它是如何实现的。

在卷积中,让我们将C定义为我们的内核,将Large定义为输入图像,将Small定义为来自卷积的输出图像。在卷积(矩阵乘法)之后,我们将大图像下采样为小的输出图像。矩阵乘法中的卷积的实现遵循C x Large = Small。

以下示例显示了此类操作的工作原理。它将输入16 x 1矩阵,并将内核转换为稀疏矩阵(4 x 16),然后应用矩阵乘法。之后,将得到的矩阵(4×1)转换回2×2输出。

深度学习中不同类型卷积的综合介绍:通过可视化直观地理解卷积

卷积的矩阵乘法:从大输入图像(4 x 4)到小输出图像(2 x 2)。

现在,如果我们在方程的两边乘以矩阵CT的转置,并使用矩阵与其转置矩阵的乘法给出单位矩阵的属性,那么我们得到下面的公式CT x Small = Large,如下所示。

深度学习中不同类型卷积的综合介绍:通过可视化直观地理解卷积

卷积的矩阵乘法:从小输入图像(2 x 2)到大输出图像(4 x 4)。

正如你在此处所看到的,我们执行从小图像到大图像的上采样。 这就是我们想要实现的目标。

6.1棋盘伪影

人们在使用转置卷积时观察到的一种令人不快的现象是所谓的棋盘伪影。

深度学习中不同类型卷积的综合介绍:通过可视化直观地理解卷积

棋盘伪影是由转置卷积的"不均匀重叠"引起的。这种重叠使得更多的隐喻性绘画在某些地方比其他地方更多。

在下图中,顶部的图层是输入图层,底部的图层是转置卷积后的输出图层。在转置卷积期间,具有较小尺寸的层被映射到具有较大尺寸的层。

在示例(a)中,步幅为1且过滤器大小为2。如红色所示,输入上的第一个像素映射到输出上的第一个和第二个像素。如绿色所示,输入上的第二个像素映射到输出上的第二个和第三个像素。输出上的第二个像素从输入上的第一个和第二个像素接收信息。总的来说,输出中间部分的像素从输入端接收相同数量的信息。这里存在核心重叠的区域。当在示例(b)中过滤器大小增加到3时,接收最多信息的中心部分收缩。但这可能不是什么大问题,因为重叠仍然是均匀的。输出中心部分的像素从输入接收相同数量的信息。

深度学习中不同类型卷积的综合介绍:通过可视化直观地理解卷积

现在,对于下面的示例,我们将更改stride = 2。在示例(a)中,过滤器大小= 2,输出上的所有像素都从输入接收相同数量的信息。它们都从输入上的单个像素接收信息。这里没有转置卷积的重叠。

深度学习中不同类型卷积的综合介绍:通过可视化直观地理解卷积

如果我们在示例(b)中将过滤器大小更改为4,则均匀重叠的区域会缩小。但是,仍然可以使用输出的中心部分作为有效输出,其中每个像素从输入接收相同数量的信息。

但是,如果我们在示例(c)和(d)中将过滤器大小更改为3和5,事情就会变得很有趣。对于这两种情况,输出上的每个像素与其相邻像素相比接收不同数量的信息。人们无法在输出上找到连续且均匀重叠的区域。

当过滤器尺寸不能被步幅整除时,转置的卷积具有不均匀的重叠。这种"不均匀的重叠"使得"涂料"在某些地方比其他地方更多,从而产生棋盘效果。事实上,不均匀重叠的区域在两个维度上往往更加极端。

在应用转置卷积时,可以做两件事来减少这种伪影。首先,请确保使用由步幅划分的文件管理器大小,以避免重叠问题。其次,可以使用stride = 1的转置卷积,这有助于减少棋盘效应。

本文进一步提出了一种更好的上采样方法:首先调整图像大小(使用最近邻插值或双线性插值),然后进行卷积。通过这样做,作者避免了棋盘效应。你可以在你想要的应用程序尝试它。

更多内容尽请期待下篇

深度学习中不同类型卷积的综合介绍:通过可视化直观地理解卷积

编译出品

相关推荐