乐趣区

关于神经网络:带你认识9种常用卷积神经网络

摘要:在卷积神经网络中,通过应用 filters 提取不同的特色,这些 filters 的权重是在训练期间主动学习的,而后将所有这些提取的特色“组合”以做出决策。

本文分享自华为云社区《神经网络罕用卷积总结》,原文作者:fdafad。

进行卷积的目标是从输出中提取有用的特色。在图像处理中,能够抉择各种各样的 filters。每种类型的 filter 都有助于从输出图像中提取不同的特色,例如程度 / 垂直 / 对角线边缘等特色。在卷积神经网络中,通过应用 filters 提取不同的特色,这些 filters 的权重是在训练期间主动学习的,而后将所有这些提取的特色“组合”以做出决策。

目录:

  1. 2D 卷积
  2. 3D 卷积
  3. 1* 1 卷积
  4. 空间可拆散卷积
  5. 深度可拆散卷积
  6. 分组卷据
  7. 扩大卷积
  8. 反卷积
  9. Involution

2D 卷积

单通道:在深度学习中,卷积实质上是对信号按元素相乘累加失去卷积值。对于具备 1 个通道的图像,下图演示了卷积的运算模式:

这里的 filter 是一个 3 x 3 的矩阵,元素为[[0,1,2],[2,2,0],[0,1,2]]。filter 在输出数据中滑动。在每个地位,它都在进行逐元素的乘法和加法。每个滑动地位以一个数字结尾,最终输入为 3 x 3 矩阵。

多通道:因为图像个别具备 RGB3 个通道,所以卷积个别多用于多通道输出的场景。下图演示了多通道输出场景的运算模式:

这里输出层是一个 5 x 5 x 3 矩阵,有 3 个通道,filters 是 3 x 3 x 3 矩阵。首先,filters 中的每个 kernels 别离利用于输出层中的三个通道,执行三次卷积,产生 3 个尺寸为 3×3 的通道:

而后将这三个通道相加(一一元素相加)以造成一个单个通道(3 x 3 x 1),该通道是应用 filters(3 x 3 x 3 矩阵)对输出层(5 x 5 x 3 矩阵)进行卷积的后果:

3D 卷积

在上一个插图中,能够看出,这实际上是在实现 3D- 卷积。但通常意义上,依然称之为深度学习的 2D- 卷积。因为 filters 的深度和输出层的深度雷同,3D-filters 仅在 2 个维度上挪动(图像的高度和宽度),失去的后果为单通道。通过将 2D- 卷积的推广,在 3D- 卷积定义为 filters 的深度小于输出层的深度(即卷积核的个数小于输出层通道数),故 3D-filters 须要在三个维度上滑动(输出层的长、宽、高)。在 filters 上滑动的每个地位执行一次卷积操作,失去一个数值。当 filters 滑过整个 3D 空间,输入的构造也是 3D 的。2D- 卷积和 3D- 卷积的次要区别为 filters 滑动的空间维度,3D- 卷积的劣势在于形容 3D 空间中的对象关系。3D 关系在某一些利用中非常重要,如 3D- 对象的宰割以及医学图像的重构等。

1* 1 卷积

对于 1 * 1 卷积而言,外表上如同只是 feature maps 中的每个值乘了一个数,但实际上不仅仅如此,首先因为会通过激活层,所以实际上是进行了非线性映射,其次就是能够扭转 feature maps 的 channel 数目。

上图中形容了:在一个维度为 H x W x D 的输出层上的操作形式。通过大小为 1 x 1 x D 的 filters 的 1 x 1 卷积,输入通道的维度为 H x W x 1。如果咱们执行 N 次这样的 1 x 1 卷积,而后将这些后果联合起来,咱们能失去一个维度为 H x W x N 的输入层。

空间可拆散卷积

在一个可拆散卷积中,咱们能够将内核操作拆分成多个步骤。咱们用 y = conv(x,k)示意卷积,其中 y 是输入图像,x 是输出图像,k 是内核。这一步很简略。接下来,咱们假如 k 能够由上面这个等式计算得出:k = k1.dot(k2)。这将使它成为一个可拆散的卷积,因为咱们能够通过对 k1 和 k2 做 2 个一维卷积来获得雷同的后果,而不是用 k 做二维卷积。

以通常用于图像处理的 Sobel 内核为例。你能够通过乘以向量 [1,0,-1] 和[1,2,1] .T 取得雷同的内核。在执行雷同的操作时,你只须要 6 个而不是 9 个参数。

深度可拆散卷积

空间可拆散卷积(上一大节),而在深度学习中,深度可拆散卷积将执行一个空间卷积,同时放弃通道独立,而后进行深度卷积操作。假如咱们在一个 16 输出通道和 32 输入通道上有一个 3 ×3 的卷积层。那么将要产生的就是 16 个通道中的每一个都由 32 个 3 ×3 的内核进行遍历,从而产生 512(16×32)的特色映射。接下来,咱们通过将每个输出通道中的特色映射相加从而合成一个大的特色映射。因为咱们能够进行此操作 32 次,因而咱们失去了冀望的 32 个输入通道。那么,针对同一个示例,深度可拆散卷积的体现又是怎么的呢?咱们遍历 16 个通道,每一个都有一个 3 ×3 的内核,能够给出 16 个特色映射。当初,在做任何合并操作之前,咱们将遍历这 16 个特色映射,每个都含有 32 个 1 ×1 的卷积,而后才逐此开始增加。这导致与上述 4608(16x32x3x3)个参数相同的 656(16x3x3 + 16x32x1x1)个参数。上面再进行具体阐明。后面局部所提到的 2D 卷积核 1×1 卷积。让咱们先疾速过一下规范的 2D 卷积。举一个具体的案例,假如输出层的大小为 7 x 7 x 3(高 x 宽 x 通道),过滤器大小为 3 x 3 x 3,通过一个过滤器的 2D 卷积后,输入层的大小为 5 x 5 x 1(仅有 1 个通道)。如下图所示:

一般来说,两个神经网络层间利用了多个过滤器,当初假如过滤器个数为 128。128 次 2D 卷积失去了 128 个 5 x 5 x 1 的输入映射。而后将这些映射重叠为一个大小为 5 x 5 x 128 的单个层。空间维度如高和宽放大了,而深度则扩充了。如下图所示:

接下来看看应用深度可拆散卷积如何实现同样的转换。首先,咱们在输出层上利用深度卷积。咱们在 2D 卷积中别离应用 3 个卷积核(每个过滤器的大小为 3 x 3 x 1),而不应用大小为 3 x 3 x 3 的单个过滤器。每个卷积核仅对输出层的 1 个通道做卷积,这样的卷积每次都得出大小为 5 x 5 x 1 的映射,之后再将这些映射重叠在一起创立一个 5 x 5 x 3 的图像,最终得出一个大小为 5 x 5 x 3 的输入图像。这样的话,图像的深度放弃与原来的一样。

深度可拆散卷积—第一步:在 2D 卷积中别离应用 3 个卷积核(每个过滤器的大小为 3 x 3 x 1),而不应用大小为 3 x 3 x 3 的单个过滤器。每个卷积核仅对输出层的 1 个通道做卷积,这样的卷积每次都得出大小为 5 x 5 x 1 的映射,之后再将这些映射重叠在一起创立一个 5 x 5 x 3 的图像,最终得出一个大小为 5 x 5 x 3 的输入图像。深度可拆散卷积的第二步是扩充深度,咱们用大小为 1x1x3 的卷积核做 1×1 卷积。每个 1x1x3 卷积核查 5 x 5 x 3 输出图像做卷积后都得出一个大小为 5 x 5 x1 的映射。

这样的话,做 128 次 1×1 卷积后,就能够得出一个大小为 5 x 5 x 128 的层。

分组卷积

Group convolution 分组卷积,最早在 AlexNet 中呈现,因为过后的硬件资源无限,训练 AlexNet 时卷积操作不能全副放在同一个 GPU 解决,因而作者把 feature maps 分给多个 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 卷积的工作。下图的案例示意得更清晰一些。

扩张卷积

扩张卷积引入另一个卷积层的参数被称为扩张率。这定义了内核中值之间的间距。扩张速率为 2 的 3 ×3 内核将具备与 5 ×5 内核雷同的视线,而只应用 9 个参数。设想一下,应用 5 ×5 内核并删除每个距离的行和列。(如下图所示)零碎能以雷同的计算成本,提供更大的感触野。扩张卷积在实时宰割畛域特地受欢迎。在须要更大的察看范畴,且无奈接受多个卷积或更大的内核,能够才用它。

直观上,空洞卷积通过在卷积核局部之间插入空间让卷积核「收缩」。这个减少的参数 l(空洞率)表明了咱们想要将卷积核放宽到多大。下图显示了当 l=1,2,4 时的卷积核大小。(当 l = 1 时,空洞卷积就变成了一个规范的卷积)。

反卷积

这里提到的反卷积跟 1 维信号处理的反卷积计算是很不一样的,FCN 作者称为 backwards convolution,有人称 Deconvolution layer is a very unfortunate name and should rather be called a transposed convolutional layer. 咱们能够晓得,在 CNN 中有 con layer 与 pool layer,con layer 进行对图像卷积提取特色,pool layer 对图像放大一半筛选重要特色,对于经典的图像识别 CNN 网络,如 IMAGENET,最初输入后果是 1X1X1000,1000 是类别品种,1×1 失去的是。FCN 作者,或者起初对 end to end 钻研的人员,就是对最终 1 ×1 的后果应用反卷积(事实上 FCN 作者最初的输入不是 1X1,是图片大小的 32 分之一,但不影响反卷积的应用)。这里图像的反卷积与图 6 的 full 卷积原理是一样的,应用了这一种反卷积伎俩使得图像能够变大,FCN 作者应用的办法是这里所说反卷积的一种变体,这样就能够取得相应的像素值,图像能够实现 end to end。

目前应用得最多的 deconvolution 有 2 种:

办法 1:full 卷积,残缺的卷积能够使得原来的定义域变大
办法 2:记录 pooling index,而后扩充空间,再用卷积填充。图像的 deconvolution 过程如下:

输出:2×2,卷积核:4×4,滑动步长:3,输入:7×7

即输出为 2 ×2 的图片通过 4 ×4 的卷积核进行步长为 3 的反卷积的过程

1. 输出图片每个像素进行一次 full 卷积,依据 full 卷积大小计算能够晓得每个像素的卷积后大小为 1+4-1=4,即 4 ×4 大小的特色图,输出有 4 个像素所以 4 个 4 ×4 的特色图

2. 将 4 个特色图进行步长为 3 的 fusion(即相加);例如红色的特色图依然是在原来输出地位(左上角),绿色还是在原来的地位(右上角),步长为 3 是指每隔 3 个像素进行 fusion,重叠局部进行相加,即输入的第 1 行第 4 列是由红色特阵图的第一行第四列与绿色特色图的第一行第一列相加失去,其余如此类推。

能够看出反卷积的大小是由卷积核大小与滑动步长决定,in 是输出大小,k 是卷积核大小,s 是滑动步长,out 是输入大小

失去 out = (in – 1) * s + k
上图过程就是,(2 – 1) * 3 + 4 = 7

Involution

论文:Involution: Inverting the Inherence of Convolution for Visual Recognition (CVPR’21)

代码开源地址:https://github.com/d-li14/involution

只管神经网络体系结构倒退迅速,但卷积依然是深度神经网络架构构建的次要组件。从经典的图像滤波办法中失去的灵感,卷积核具备 2 个显著的个性 Spatial-agnostic 和 Channel-specific。在 Spatial 上,前者的性质保障了卷积核在不同地位之间的共享,实现了平移不变性。在 Channel 域中,卷积核的频谱负责收集编码在不同 Channel 中的不同信息,满足后一种个性。此外,自从 VGGNet 呈现以来,古代神经网络通过限度卷积核的空间跨度不超过 3 * 3 来满足卷积核的紧凑性。

一方面,只管 Spatial-Agnostic 和 Spatial-Compact 的性质在提高效率和解释平移不变性等价方面有意义,但它剥夺了卷积核适应不同空间地位的不同视觉模式的能力。此外,局部性限度了卷积的感触野,对小指标或者含糊图像形成了挑战。另一方面,家喻户晓,卷积核外部的通道间冗余在许多经典深度神经网络中都很突出,这使得卷积核对于不同通道的灵活性受到限制。

为了克服上述限度,本文作者提出了被称为 involution 的操作,与规范卷积相比,involution 具备对称反向个性,即 Spatial-Specific 和 Channel-Agnostic。具体地说,involution 核在空间范畴上是不同的,但在通道上是共享的。因为 involution 核的空间个性,如果将其参数化为卷积核等固定大小的矩阵,并应用反向流传算法进行更新,则会妨碍学习到的对合核在不同分辨率的输出图像之间的传输。在解决可变特色分辨率的最初,属于特定空间地位的 involution 核可能仅在对应地位自身的传入特征向量的条件下作为实例生成。此外,作者还通过在通道维数上共享 involution 核来缩小核的冗余。

综合上述 2 个因素,involution 运算的计算复杂度随特色通道数量线性减少,动静参数化 involution 核在空间维度上具备宽泛的笼罩。通过逆向设计方案,本文提出的 involution 具备卷积的双重劣势:

1:involution 能够在更广大的空间中聚合上下文,从而克服了对近程交互进行建模的艰难

2:involution 能够在不同地位上自适应地调配权重,从而对空间域中信息最丰盛的视觉元素进行优先排序。

大家也都晓得最近基于 Self-Attention 进一步的钻研表明,很多工作为了捕捉特色的长期依赖关系提出应用 Transformer 来进行建模。在这些钻研中,纯正的 Self-Attention 能够被用来构建具备良好性能的独立模型。而本文将揭示 Self-Attention 是通过一个简单的对于核构造的公式来对邻近像素之间的关系进行建模,其实也就是 involution 化的非凡状况。相比之下,本文所采纳的核是依据单个像素生成的,而不是它与相邻像素的关系。更进一步,作者在试验中证实,即便应用简略版本,也能够实现 Self-Attention 的准确。

involution 的计算过程如下图所示:

针对输出 feature map 的一个坐标点上的特征向量,先通过 ∅ (FC-BN-ReLU-FC)和 reshape (channel-to-space)变换开展成 kernel 的形态,从而失去这个坐标点上对应的 involution kernel,再和输出 feature map 上这个坐标点邻域的特征向量进行 Multiply-Add 失去最终输入的 feature map。具体操作流程和 tensor 形态变动如下:

另外作者基于 MM 系列代码,实现了 mmclassficton、mmsegmentation、mmdetection 中的局部模型。




点击关注,第一工夫理解华为云陈腐技术~

退出移动版