神经网络常用卷积总结

网友投稿 799 2022-05-30

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

目录:

2D卷积

3D卷积

1*1卷积

空间可分离卷积

深度可分离卷积

分组卷据

扩展卷积

反卷积

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输出通道上有一个3x3的卷积层。那么将要发生的就是16个通道中的每一个都由32个3x3的内核进行遍历,从而产生512(16x32)的特征映射。接下来,我们通过将每个输入通道中的特征映射相加从而合成一个大的特征映射。由于我们可以进行此操作32次,因此我们得到了期望的32个输出通道。那么,针对同一个示例,深度可分离卷积的表现又是怎样的呢?我们遍历16个通道,每一个都有一个3x3的内核,可以给出16个特征映射。现在,在做任何合并操作之前,我们将遍历这16个特征映射,每个都含有32个1x1的卷积,然后才逐此开始添加。这导致与上述4608(16x32x3x3)个参数相反的656(16x3x3 + 16x32x1x1)个参数。下面再进行详细说明。前面部分所提到的 2D 卷积核 1x1 卷积。让我们先快速过一下标准的 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 的卷积核做 1x1 卷积。每个 1x1x3 卷积核对 5 x 5 x 3 输入图像做卷积后都得出一个大小为 5 x 5 x1 的映射。

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

分组卷积

下面描述分组卷积是如何实现的。首先,传统的 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的3x3内核将具有与5x5内核相同的视野,而只使用9个参数。 想象一下,使用5x5内核并删除每个间隔的行和列。(如下图所示)系统能以相同的计算成本,提供更大的感受野。扩张卷积在实时分割领域特别受欢迎。 在需要更大的观察范围,且无法承受多个卷积或更大的内核,可以才用它。

直观上,空洞卷积通过在卷积核部分之间插入空间让卷积核「膨胀」。这个增加的参数 l(空洞率)表明了我们想要将卷积核放宽到多大。下图显示了当 l=1,2,4 时的卷积核大小。(当l=1时,空洞卷积就变成了一个标准的卷积)。

反卷积

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

神经网络常用卷积总结

方法1:full卷积, 完整的卷积可以使得原来的定义域变大

方法2:记录pooling index,然后扩大空间,再用卷积填充。图像的deconvolution过程如下:

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

即输入为2x2的图片经过4x4的卷积核进行步长为3的反卷积的过程

1.输入图片每个像素进行一次full卷积,根据full卷积大小计算可以知道每个像素的卷积后大小为 1+4-1=4, 即4x4大小的特征图,输入有4个像素所以4个4x4的特征图

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的性质在提高效率和解释平移不变性等价方面有意义,但它剥夺了卷积核适应不同空间位置的不同视觉模式的能力。此外,局部性限制了卷积的感受野,对小目标或者模糊图像构成了挑战。另一方面,众所周知,卷积核内部的通道间冗余在许多经典深度神经网络中都很突出,这使得卷积核对于不同通道的灵活性受到限制。

综合上述2个因素,involution运算的计算复杂度随特征通道数量线性增加,动态参数化involution核在空间维度上具有广泛的覆盖。通过逆向设计方案,本文提出的involution具有卷积的双重优势:

1:involution可以在更广阔的空间中聚合上下文,从而克服了对远程交互进行建模的困难

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

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

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

参考链接

1.https://www.zhihu.com/question/54677157

2.https://blog.csdn.net/gwplovekimi/article/details/89890510

3.https://blog.csdn.net/qq_38906523/article/details/80520950

AI 深度学习

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:云享专家姚冬:9种DevOps团队结构适用类型与7种反型
下一篇:JavaScript最后的秘密——使用原型创建对象
相关文章