当前位置: 首页 > 科技观察

带你认识9个常用的卷积神经网络

时间:2023-03-20 22:14:36 科技观察

卷积的目的是从输入中提取有用的特征。在图像处理中,可以选择各种滤波器。每种类型的过滤器都有助于从输入图像中提取不同的特征,例如水平/垂直/对角线边缘等特征。在卷积神经网络中,通过使用在训练过程中自动学习权重的过滤器来提取不同的特征,然后将所有这些提取的特征“组合”起来做出决策。内容:2DConvolution3DConvolution1*1ConvolutionSpaceSeparableConvolutionDepthSeparableConvolutionGroupConvolutionAccordingtoExpansionConvolutionDeconvolutionInvolution2DConvolutionSinglechannel:在深度学习中,卷积本质上是对信号逐元素相乘累加得到卷积值。对于1通道的图像,下图演示了卷积的运算形式:这里的滤波器是一个3×3的矩阵,元素为[[0,1,2],[2,2,0],[0,1,2]]。过滤器在输入数据中滑动。在每个位置,它都在进行逐元素乘法和加法。每个滑动位置都以数字结尾,最终输出是一个3x3矩阵。多通道:由于图像一般都有RGB3个通道,所以在多通道输入场景下一般都会用到卷积。下图演示了一个多通道输入场景的操作形式:这里的输入层是一个5×5×3的矩阵,有3个通道,过滤器是一个3×3×3的矩阵。首先,过滤器中的每个内核分别应用于输入层中的三个通道,执行三次卷积,产生3个大小为3×3的通道:然后将这三个通道相加(按元素)以形成单个通道(3x3x1)是输入层(5x5x3矩阵)与过滤器(3x3x3矩阵)卷积后的结果:上图中的3D卷积,可以看出这实际上是在完成3D卷积。但是在一般意义上,还是叫深度学习的2D-convolution。由于过滤器的深度与输入层的深度相同,因此3D过滤器仅在二维(图像的高度和宽度)上移动,从而形成单个通道。通过扩展2D-convolution,3D-convolution被定义为滤波器的深度小于输入层的深度(即卷积核的数量小于输入层通道的数量),所以3D-filters需要在三个维度上滑动(输入层的长度、宽度、高度)。在filters上滑动的每个位置进行卷积运算,得到一个值。当过滤器滑过整个3D空间时,输出结构也是3D的。2D卷积和3D卷积之间的主要区别在于过滤器滑动的空间维度。3D-convolution的优点是描述了3D空间中的物体关系。3D关系在某些应用中很重要,例如医学图像的3D对象分割和重建。1*1卷积对于1*1卷积,表面上看好像featuremaps中的每个值都乘以一个数,但实际上不仅如此,首先,因为它会经过激活层,其实就是进行了非线性映射,跟着改变特征图的通道数。上图描述了它如何在维度为HxWxD的输入层上进行操作。在与大小为1x1xD的过滤器进行1x1卷积后,输出通道的维度为HxWx1。如果我们执行N个这样的1x1卷积,然后组合结果,我们得到一个维度为HxWxN的输出层。空间可分离卷积在可分离卷积中,我们可以将内核操作拆分为多个步骤。我们用y=conv(x,k)表示卷积,其中y是输出图像,x是输入图像,k是内核。这一步很简单。接下来,我们假设k可以通过以下等式计算:k=k1.dot(k2)。这将使它成为一个可分离的卷积,因为我们可以通过对k1和k2进行2个一维卷积来实现相同的结果,而不是对k进行二维卷积。以图像处理中常用的索贝尔核为例。您可以通过将向量[1,0,-1]和[1,2,1].T.T相乘来获得相同的内核。在执行相同的操作时,您只需要6个参数而不是9个。DepthwiseSeparableConvolutionSpatialSeparableConvolution(上一节),而在深度学习中,DepthwiseSeparableConvolution将执行空间卷积,同时保持通道独立,然后进行深度卷积操作。假设我们有一个具有16个输入通道和32个输出通道的3x3卷积层。那么将会发生的是,16个通道中的每一个都被32个3x3的内核遍历,从而得到512(16x32)的特征图。接下来,我们通过对每个输入通道的特征图求和来合成一个大的特征图。因为我们可以这样做32次,所以我们得到了所需的32个输出通道。那么,同样的例子,depthwiseseparableconvolution的表现如何呢?我们遍历16个通道,每个通道都有一个3x3的内核,给出16个特征图。现在,在进行任何池化操作之前,我们将遍历这16个特征图,每个特征图都有32个1x1卷积,并开始一个一个地添加。这导致656(16x3x3+16x32x1x1)个参数,而不是上面的4608(16x32x3x3)个参数。进一步的细节将在下面给出。上一节提到的2D卷积核1x1卷积。让我们先回顾一下标准的2D卷积。举个具体的例子,假设输入层的大小是7x7x3(高x宽x通道),filter的大小是3x3x3,经过一个filter的2D卷积后,输出的大小层是5x5x1(只有1个通道)。如下图所示:一般来说,两个神经网络层之间会应用多个滤波器。现在假设过滤器数量为128。128个2D卷积得到128个5x5x1的输出图。然后将这些图堆叠成一个大小为5x5x128的单层。空间维度如高度和宽度收缩,而深度扩大。如下图所示:接下来我们看看如何使用depthwiseseparableconvolution来实现同样的变换。首先,我们在输入层上应用深度卷积。我们没有使用大小为3x3x3的单个过滤器,而是在2D卷积中使用了3个内核(每个过滤器大小为3x3x1)。每个卷积核只对输入层的1个通道进行卷积。这样的卷积每个都会产生一个大小为5x5x1的图,然后将它们堆叠在一起以创建一个5x5x3的图,从而产生一个大小为5x5x3的输出图像。这样,深度图像与原始图像保持一致。Depthwiseseparableconvolution-第一步:在2D卷积中分别使用3个卷积核(每个滤波器尺寸为3x3x1),而不是使用尺寸为3x3x3的单个滤波器。每个卷积核只对输入层的1个通道进行卷积。这样的卷积每次都会产生一个大小为5x5x1的图,然后将它们堆叠在一起以创建一个5x5x3的图,从而产生一个大小为5x5x3的输出图像。深度可分离卷积的第二步为了扩大深度,我们用大小为1x1x3的内核做一个1x1的卷积。每个1x1x3内核对5x5x3输入图像进行卷积以生成大小为5x5x1的映射。这样,在做了128次1x1的卷积之后,就可以得到一个大小为5x5x128的层。GroupconvolutionGroupconvolutionGroupconvolution最早出现在AlexNet中。由于当时硬件资源有限,在训练AlexNet时,卷积运算无法全部在同一个GPU上处理。因此,作者将featuremaps分到多个GPU中分别处理,最后融合多个GPU的结果。下面介绍groupconvolution是如何实现的。首先,传统的2D卷积步骤如下图所示。在这种情况下,通过应用128个大小为3x3x3的过滤器,将大小为7x7x3的输入层转换为大小为5x5x128的输出层。对于一般情况,可以概括为如下:通过应用Dout卷积核(每个卷积核的大小为hxwxDin),可以将大小为HinxWinxDin的输入层转换为大小为HoutxWoutxDout的输入层输出层。在分组卷积中,滤波器被分成不同的组,每个组负责一个具有一定深度的传统二维卷积的工作。下图的例子就更清楚了。扩张卷积扩张卷积引入另一个卷积层的参数称为扩张率。这定义了内核中值之间的间距。膨胀率为2的3x3内核将具有与5x5内核相同的视野,但仅使用9个参数。想象一下使用5x5内核并删除每个间隔行和列。(如下图所示)系统可以在相同的计算成本下提供更大的感受野。扩张卷积在实时分割中特别流行。当需要更大的观察区域并且不能容忍多个卷积或更大的内核时,可以使用它。直观地,扩张卷积通过在其部分之间插入空间来“膨胀”内核。这个添加的参数l(孔率)表示我们想要松弛卷积核的程度。下图是l=1,2,4时的kernelsize。(当l=1时,空洞卷积就变成了标准卷积)。反卷积这里说的反卷积与一维信号处理的反卷积计算有很大的不同。FCN的作者叫backwardsconvolution。有人说Deconvolutionlayer是一个很不幸的名字,更应该叫做transposedconvolutionallayer。我们可以知道CNN中有con层和pool层。con层从图像卷积中提取特征,pool层将图像缩小一半以过滤重要特征。对于经典的图像识别CNN网络,如IMAGENET,最终输出结果为1X1X1000,1000为类别类型,1x1得到。FCN作者,或者说是后来研究endtoend的人,对最后的1x1结果使用了反卷积(其实FCN作者最后输出的不是1X1,是图像大小的1/32,但是确实不影响解卷积使用)。这里对图像的反卷积与图6中的全卷积原理是一样的,使用这种反卷积的方式使得图像变大。FCN作者使用的方法是这里提到的反卷积的变体,从而得到对应的像素值,图像可以实现端到端。目前使用最多的有两种反卷积:方法一:全卷积,全卷积可以使原始定义域变大。方法二:记录poolingindex,然后扩展空间,再用卷积填充。图像的反卷积过程如下:输入:2x2,卷积核:4x4,滑动步长:3,输出:7x7,即步长为3的2x2输入图像通过4x4卷积核的反卷积过程1.对输入图像的每个像素进行全卷积。根据全卷积尺寸的计算可知,卷积后每个像素的尺寸为1+4-1=4,即4x4尺寸的featuremap,输入有4个像素,所以4一个4x4的featuremap2。将4个featuremap融合(即相加),步长为3;比如红色的featuremap还在原来的输入位置(左上角),绿色的featuremap还在原来的位置(右上角)),步长为3表示每3个像素进行一次融合,并加上重叠的部分,即输出的第一行第四列由红色特殊数组图的第一行第四列和绿色特征图的第一行第四列组成是通过添加一行的第一列获得,其他的依此类推。可以看出,反卷积的大小由卷积核大小和滑动步长决定,in为输入大小,k为卷积核大小,s为滑动步长,out为输出大小togetout=(in-1)*s+k上面的过程是,(2-1)*3+4=7Involution论文:Involution:InvertingtheInherenceofConvolutionforVisualRecognition(CVPR'21)代码开源地址:https://github.com/d-li14/involution尽管神经网络架构发展迅速,但卷积仍然是深度神经网络架构构建的主要组成部分。受经典图像滤波方法的启发,卷积核具有两个显着特征,Spatial-agnostic和Channel-specific。在Spatial上,前者的性质保证了卷积核在不同位置之间共享,实现了平移不变性。在Channel域,卷积核的频谱负责收集编码在不同Channel中的不同信息,满足后一种特性。另外,自从VGGNet出现以来,现代神经网络通过限制卷积核的空间跨度不超过3*3来满足卷积核的紧凑性。一方面,尽管Spatial-Agnostic和Spatial-Compact的特性在提高效率和解释平移不变性等价方面具有重要意义,但它剥夺了卷积核在不同空间位置适应不同视觉模态的能力。此外,局部性限制了卷积的感受野,这对小物体或模糊图像提出了挑战。另一方面,众所周知,卷积核内部的通道间冗余在许多经典深度神经网络中都很突出,这限制了卷积核对不同通道的灵活性。为了克服上述局限性,本文作者提出了一种称为对合的操作。与标准卷积相比,对合具有对称的逆向特性,即Spatial-Specific和Channel-Agnostic。具体来说,对合核在空间范围上不同,但在通道上共享。由于反卷核的空间特性,如果将其参数化为卷积核等固定大小的矩阵,并使用反向传播算法进行更新,会阻碍不同分辨率输入图像之间学习反卷核。传播。在处理可变特征分辨率的最后,属于特定空间位置的对合核可能仅作为以相应位置本身的传入特征向量为条件的实例生成。此外,作者还通过在通道维度上共享对合核来降低核的冗余度。综合以上两个因素,对合运算的计算复杂度随特征通道数线性增加,动态参数化对合核在空间维度上具有广泛的覆盖面。通过逆向设计方案,本文提出的involution具有卷积的双重优势:1:Involution可以在更广阔的空间聚合上下文,从而克服了对长程交互建模的困难2:Involution可以在不同的位置自适应权重以有效的方式分配,从而优先考虑空间域中信息量最大的视觉元素。大家也知道,最近基于Self-Attention的进一步研究表明,很多任务提出使用Transformer进行建模,目的是为了捕捉特征的长期依赖关系。在这些研究中,可以使用纯Self-Attention来构建具有良好性能的独立模型。本文将揭示Self-Attention通过一个关于核结构的复杂公式来建模相邻像素之间的关系,这实际上是对合的一个特例。相比之下,本文中使用的内核是从单个像素生成的,而不是它与相邻像素的关系。更进一步,作者在实验中证明,即使使用简单版本也可以实现Self-Attention的准确性。involution的计算过程如下图所示:对于输入特征图的一个坐标点上的特征向量,首先通过?(FC-BN-ReLU-FC)展开成kernel的形状,reshape(channel-to-space)transformation,从而在这个坐标点上得到对应的卷积核,然后在输入的featuremap上和这个坐标点邻域的特征向量进行Multiply-Add,得到最终的输出featuremap。具体运行过程和tensorshape变化如下:另外,作者基于MM系列代码,实现了mmclassficton、mmsegmentation、mmdetection中的部分模型。