【个人笔记 | 卷积大礼包 | 整理中Ing】

【阅读清单】

一文看尽深度学习中的20种卷积(CVHub):原理、优缺点介绍(概念性)

卷积总结篇(普通卷积、转置卷积、膨胀卷积、分组卷积和深度可分离卷积)

【经典卷积】

一文看尽深度学习中的20种卷积(附源码整理和论文解读) - 知乎 (zhihu.com)   大拇指.jpg

1、原始卷积(Vanilla Convolution)

由一组具有固定窗口大小且带可学习参数(learnable paramerters)的卷积核所组成,可用于提取特征。

稀疏连接(sparse connectivity):与一对一密集连接相对

权值共享(shared weights):卷积核参数共享

平移不变性(translation invariant):当图像中的目标发生偏移时网络仍然能够输出同源图像一致的结果。对于图像分类任务来说,我们希望CNNs具备平移不变性(脆弱,要多数据学习)

平移等变性(translation equivalence):当输入发生偏移时网络的输出结果也应该发生相应的偏移。这种特性比较适用于目标检测和语义分割等任务。

补充:

前馈神经网络(Feedforward Neural Networks)

前馈神经网络是一种人工神经网络,它以单向方式处理信息,从输入层到输出层,网络中没有任何循环或循环。之所以称为“前馈”,是因为信息通过网络向前流动,每一层都处理前一层的输出。

在前馈神经网络中,输入数据首先通过输入层,该层通常包含大量神经元,每个神经元对应于输入数据的一个特征。输入层的输出然后通过一个或多个隐藏层,其中隐藏层中的每个神经元执行输入的加权和并将激活函数应用于总和。然后将每个隐藏层的输出传递到下一层,直到到达输出层。输出层包含一组产生网络最终输出的神经元。

前馈神经网络中神经元的权重和偏差是在训练阶段学习的,通常使用反向传播,它根据网络预测输出和实际输出之间的差异调整权重和偏差。一旦网络经过训练,它就可以通过将数据传递到网络并使用输出层产生的输出来对新数据进行预测。

【卷积系列】Plain Convolution (qq.com)

函数映射的角度来理解,卷积的过程好比是对图像上的每个位置都进行线性变换并将其映射成一个新的数值的过程。那么多层卷积也不过是在进行逐层地映射,其整体构造成一个复杂的函数。网络在训练的过程其实是在学习每个局部映射所需要的权重,训练结果可以看成是网络拟合输入分布的过程。

模板匹配的角度来理解,卷积核本质上可以定义为某种模式,卷积操作则是通过计算图像中当前位置与该模板(卷积核)的匹配程度,若匹配度越高,则响应(激活值)越强。因此,提取到更具有判别力的特则是卷积运算的关键,然而,传统的卷积操作并不能够有效地抑制背景噪声的干扰,因此,我们需要引入类似于注意力的方法来增强网络的性能。

2、组卷积(Group convolution)

切分网络使其能够在多个GPU上进行并行计算

降低参数量、提高训练效率(分布式资源-并行计算)、提高泛化性能(解耦-正则化作用)

不足原始的组卷积实现中,不同通道的特征会被划分到不同的组里面,直到网络的末端才将其融合起来,中间过程显然缺乏信息的交互(考虑到不同滤波器可提取到不同的特征)为了解决此问题,ShuffleNet[3]结合了逐点组卷积(Pointwise Group Convolution, PGC)和通道混洗(channel shuffle),来实现一个高效轻量化的移动端网络设计。

 3、转置卷积(Transposed Convolution)

特征上采样、特征可视化、

 4、1x1 conv

增强特征表达能力:1×1卷积本质上也是一个带参数的滤波器,在不改变特征图本身尺寸的情况下,能够增加网络深度。通过在卷积后通过非线性激活函数可以有效的增强网络的表达能力。(通过改变通道数来修改特征图的深度,因为输出的特征图的深度由卷积核的通道数决定。但是1x1 conv不是全连接,1x1卷积是一种卷积操作,通常用于修改特征通道的数量和深度,并帮助网络学习更好的表示。而全连接层是神经网络中的一种常见层类型,将每个输入连接到每个输出,通常用于分类和回归问题。

升维和降维:1×1卷积可以通过增加或减少滤波器的数量来实现升维或降维的目的。与全连接层不同,卷积是基于权值共享,因此能够有效的降低网络的参数量和计算量。另一方面,降低维度可以认为是通过减少冗余的特征图来降低模型中间层权重的稀疏性,从而得到一个更紧凑的网络结构。

跨通道的信息交互:类似于多层感知机,1×1卷积本质上就是多个特征图之间的线性组合。因此,通过1×1卷积操作可以轻松实现跨通道的信息交互和整合。

 5、空洞卷积Dilated Conv

在原始卷积的基础上引入空洞率,用于调节卷积核的间隔数量。

空洞卷积的作用是在不进行下采样操作,即不损失任何空间信息的情况下,加大网络的感受野,让网络能够捕捉到不同范围内的上下文信息。这对于语义分割这种密集型预测任务来说是有益的,同时,应用空洞卷积我们也可以很方便的来提取多尺度的上下文信息。

动机:最早是应用于语义分割任务的(一种密集型的预测任务,它需要对图像进行像素级别pixel-wise分类)。语义分割任务的一大难点在于如何高效地提取出多尺度的上下文信息,以适应不同物体尺度的变化。通常,基于CNN的方法大都是基于一种分层的特征表示,通过不断地堆叠卷积层和池化层来提取不同层级的特征。然而仍然存在以下问题:①随着网络深度的增加,计算量和参数量会急剧的增加②过多的下采样次数会导致分辨率较小的物体无法重建③上采样或者下采样层没有参数可以进行学习④内部数据结构以及空间层次化信息丢失严重。        因此提出空洞卷积,能够在不降低空间分辨率的情况下,有效的提取不同尺度的上下文信息(同等卷积核的情况下扩大网络的感受野)

增大感受野:空洞卷积可以在同等卷积核参数下获得更大的感受野。所以,对于需要较为全局的语义信息或类似于语音文本需要较长的序列信息依赖的任务中,都可以尝试应用空洞卷积。感受野:神经元表示对输入图像的感知范围大小,通常,利用卷积和池化操作所提取到的特征是一种局部连接,其缺乏全局的关联性。因此,为了捕捉到全局的上下文信息,可以通过堆叠更深层次的卷积和池化结构,以此来扩大网络的感受野。感受野越大,所提取到的特征会越全面,反之,感受野越小,网络对局部特征的细节信息会越敏感。)

表征多尺度信息:利用带有不同空洞率的卷积,还可以捕捉到多尺度的上下文语义信息。不同的空洞率代表着不同的感受野,意味着网络能够感知到不同尺寸的目标。

不足

不好优化(在参数不变的情况增大感受野,但是由于空间分辨率的增大,所以在实际中常常会不好优化,速度方面是一个诟病,因此在工业上对实时性有要求的应用更多的还是类FCN结构)、

网格/棋盘效应:多次使用空洞率相同的卷积去提取特征时会损失掉信息的连续性。这是因为卷积核并不连续,导致许多的像素从头到尾都没有参与到运算当中,相当于失效了(下图中叠加空白),这对于语义分割这类的密集型预测任务来说是十分不友好的,特别是针对小目标来说(空洞卷积从工作原理来看是用于增强网络捕获长距离特征的能力,因此它仅对于一些尺寸较大的物体分割比较有益,而对于一些小物体来说效果往往会适得其反。比如对于裂纹分割来说,裂纹通常呈现的是一种纤细的长条形形状,如果此时我们增大空洞率,无疑会严重破坏特征本身固有的空间一致性

一个解决方案是令所叠加的卷积其空洞率不能出现大于1的公约数,如[1, 2, 5]使其呈现锯齿结构。

 6、深度可分离卷积(Depthwise Separable Convolution,DSC

用来减少网络参数量与计算量,来提高网络运行效率的

DSC首先将单个深度卷积滤波器应用到每一个输入通道,然后逐点卷积用卷积来组合不同深度卷积的输出因此,DSC将普通卷积操作分解成了两个过程:深度卷积(Depthwise Convolution)和逐点卷积(Pointwise Convolution)过程。深度卷积用于滤波逐点卷积用于组合,通过该种分解的方式来大幅降低网络参数量与计算量。

深度卷积是一个卷积核负责一个通道,独立地在每个通道上进行空间卷积。因此,深度卷积的输出特征图数量等于输入特征图数量,无法进行有效的维度扩展。

由于一个特征图仅被一个滤波器卷积,无法有效的利用不同通道在相同空间位置上的特征信息,由此加入了逐点卷积。点卷积主要由1×1卷积构成,负责将深度卷积的输出按通道投影到一个新的特征图上。

先各个通道过滤,再组合

降低参数量和计算量:深度可分离卷积将原始的卷积运算分为两层,一层用于滤波(深度卷积),一层用于组合(逐点卷积)。这种分解过程能极大减少模型的参数量和计算量

降低模型容量:深度可分离卷积在应用时并没有使用激活函数。此外,虽然深度可分离卷积可以显著的降低模型的计算量,但同时也会导致模型的容量显著降低,从而导致模型精度的下降

DSC不管在参数量还是计算效率上,都远远优于普通卷积。DSC作为普通卷积的一种替代品,它最大的优点就是计算效率非常高,因此使用DSC构建轻量化模型是当下非常常见的做法,不过DSC的这种高效率是以牺牲精度为代价的。在今后用DSC构建轻量化模型过程中,需要全方位平衡精度与计算效率,在少量牺牲精度的情况下,极大提高计算效率才是正确的选择

 7、空间可分离卷积(Spatially Separable Convolution)

从图像空间维度(宽度和高度)进行卷积

空间可分离卷积在实际当中很少被广泛应用,最主要的一个原因是并不是所有的卷积核都能够有效的拆分成小的卷积核(减少计算量)。        但在实际当中很少被广泛应用,最主要的一个原因是并不是所有的卷积核都能够有效的拆分成小的卷积核

8、可变形卷积(Deformable convolution)

可以看做是对局部区域进行自注意力操作(并不是对卷积核进行扩展,而是对卷积前的特征图进行像素重新整合,变相卷积核扩展)

同一物体在不同场景,角度中未知的几何变换是任务的一大挑战(常规卷积是通过固定的几何结构对特征信息进行编码,进而捕获感受野。然而,由于物体的形状是多变的、不规则的,这种编码方式很难捕捉到合适的感受野,从而导致网络表达能力有限),通常来说要么通过充足的数据增强,扩充足够多的样本去增强模型适应尺度变换的能力,要么设置一些针对几何变换不变的特征或者算法,比如SIFT或者滑动窗口等。然而传统CNNs固定的几何结构无法对未知的物体形变进行有效建模,因此可变形卷积的提出便是用于解决此问题。

没有增加采样点的数量:在不增加额外参数量的基础上,更有效、全面地捕获到物体语义

可变形卷积并不是真正意义上的学习可变形的卷积核,而是利用额外的卷积层去学习相应的偏移量,将得到的偏移量叠加到输入特征图中相应位置的像素点中。但由于偏移量的生成会产生浮点数类型,而偏移量又必须转换为整形,如果直接取整的话是无法进行反向传播的,因此原文是利用双线性插值的方式来间接的计算对应的像素值。

计算流程x4:

(1)计算相对偏移量:通过对输入特征图进行卷积操作,学习出每个像素的偏移量。图中的2N表示扩展了一倍的通道数,即每个像素都有x方向和y方向的偏移。

(2)获取绝对偏移量:将第一步计算出的相对偏移量与原图像素索引值相加,获得输入特征图像素索引的绝对偏移量。

(3)像素重新整合:先对像素索引的绝对偏移量进行上下取整,再进一步整合为四对坐标。通过双线性插值,得到经过偏移后的索引像素值。

(4)对新像素编码:完成对索引偏移的像素值计算,即得到一张新的特征图,对其进行常规卷积便实现了可变形卷积。

这个方法利用巧妙的思路实现了可变形的几何结构特征提取方式:基于一个平行的网络来学习偏移,让卷积核在输入特征图能够发散采样,使网络能够聚焦目标中心,从而提高对物体形变的建模能力。即可变形卷积并不是把卷积核进行扩展,而是对卷积前的特征图像素重新整合,变相地达到了卷积核扩展的效果。()

可以在一定程度上提升模型特征提取的泛化能力,但同时也会引入一些不相关的背景噪声干扰。三种相应的解决方案:使用更多数量的可变形卷积、为每个偏置都添加相应的权重、模仿R-CNN中的特征。然而,可变形卷积的计算效率也是一个值得商榷的问题(虽然可以带来高精度,但当卷积核过大时,会占用非常大的内存空间,因此在落地部署方面的应用很受限制。不过对于参加竞赛而言倒不失为一种提分的trick。

 9、图卷积(Graph Convolution)

论文:https://arxiv.org/abs/1609.02907

代码:https://github.com/tkipf/gcn

others阅读笔记CVHub代码

图卷积网络是图网络中最简单的一个分支,是为了有效的解决传统CNNs、RNNs等网络无法处理的非欧式空间的数据问题在图卷积网络中,节点之间的相似度或距离不仅仅取决于它们在物理空间上的距离,而是通过节点的特征向量和它们在图上的连接关系来确定。因此,图卷积可以捕捉节点之间的抽象关联度,而不仅仅是物理距离。

原理:利用边的信息对节点信息进行聚合,从而生成新的节点表示。简而言之,CNNs中的卷积运算是卷积核对应位置的加权求和,扩展到GCNs就是利用边的信息不断的汇聚邻间节点的信息,以更新原节点的参数。

特性:节点特征(每个节点均可用于特征表示)、结构特征(节点与节点之间通过携带信息的边进行关联)

图神经网络GNN综述

GCN图卷积网络入门

图ML:用Transformer缓解GNN限制

 10、植入块(Inception Block)

主要通过多个带有不同卷积核大小的卷积运算来捕获多尺度的上下文信息,最后再通过拼接操作聚合输出,以获得多尺度特征表示。最初提出的目的是希望能够在同一层特征图上获得不同尺度下的特征表征,增加网络宽度有利于获得更丰富的特征表示。(对输入图像并行地执行多个卷积运算或池化操作,并将所有输出结果拼接为一个非常深的特征图。因为 1*1、3*3、5*5 等不同的卷积运算与池化操作可以获得输入图像的不同信息,并行处理这些运算并结合所有结果将获得更好的图像表征

从Inception v1到Inception v4全解析

Inception v1:①1x1卷积核压缩通道数,减少了参数和计算量,提升了效果;②。使用不同尺寸的卷积核并行处理,让网络自己选择最好的特征图。这样做的好处是既能提高速度,又能提高准确率。③此外,Inception v1还引入了最大池化层和平均池化层来丰富特征提取的方式。

Inception v1的主要思想是采用不同尺寸的卷积核进行卷积(把不同的卷积核组合在一起,不仅可以增大感受野,而且还可以提高神经网络的鲁棒性。),然后将这些卷积的结果在通道维度上拼接起来作为输出,以增加网络的表达能力。在这个过程中,1x1卷积被用来控制通道数,降低网络的计算量,同时也有利于增强特征的非线性表达能力。

具体来说,Inception v1使用了多个不同的卷积核大小(如1x1、3x3、5x5)进行卷积,以提取不同尺度的特征。此外,Inception v1还引入了一个池化层(如Max Pooling或Average Pooling),用于进一步降低特征图的尺寸。最终,Inception v1通过将这些不同尺度的特征拼接在一起,得到了一个更加强大的特征表示。

补充1x1conv、channel

1×1 卷积分支是指使用 1×1 大小的卷积核进行卷积操作,其中的 1 表示卷积核在空间维度上只覆盖一个像素。1×1 卷积分支主要用于对通道数进行升维或降维的操作,以减少计算量和模型复杂度。在 Inception Block 中,1×1 卷积分支通常被用来降低输入特征图的通道数,以便后续的卷积分支和池化分支的计算量更小。而在 Inception-ResNet 等更深的网络中,1×1 卷积分支也被用来进行升维操作,以增加网络的非线性表示能力。在实践中,1×1 卷积分支通常被放置在 Inception Block 的开头或结尾,以充分发挥其优势。

关于通道压缩:1x1卷积通常用于压缩通道数。具体而言,它是在卷积神经网络的某个层中使用一个只有1个卷积核大小的卷积层,其中卷积核的深度为需要压缩的通道数,即将输入的特征图在通道维度上进行降维操作。

通道的内容是由网络学习而来的,通常包含对输入数据的不同特征的提取。在卷积神经网络中,每个卷积层输出的通道对应于不同的特征,比如边缘、纹理、颜色等。在进行通道压缩时,通常是通过计算每个通道的重要性来决定哪些通道需要被保留,哪些可以被丢弃。这个计算方法可以根据不同的应用场景而定,常用的方法包括使用PCA等降维方法,或者使用基于梯度的方法,比如说在网络训练过程中计算每个通道的梯度大小来决定其重要性。

总的来说,压缩通道的目的是减少计算量和模型参数数量,同时尽可能地保留输入数据的特征。压缩的具体内容和机制会根据具体的应用场景和算法进行调整,但总的原则是保留对输入数据最具有代表性的特征

对于卷积神经网络中的每一层,输入的数据一般包括三个维度:高度(height)、宽度(width)和通道数(channel),其中通道数可以理解为特征数或者特征图的数量。每个通道中包含的是输入数据在某种特征下的响应值,例如对于一张彩色图片,它的通道可以包括颜色通道(红、绿、蓝)和纹理通道等,每个通道中的数值代表了图片在这个特征下的响应程度。在卷积神经网络中,卷积操作的目的就是在不改变尺寸的情况下,提取输入数据的不同特征,这些特征通常是非线性的,并且它们的数量在不同的层中可以有所不同。因此,通过调整卷积层中通道的数量,可以控制卷积神经网络对输入数据不同特征的提取程度,进而影响网络的性能。

补充batch和mini-batch

当我们训练深度神经网络时,通常需要对大量的训练数据进行迭代训练。这些训练数据可能无法一次性全部载入到内存中,因此需要将其分成多个batch进行处理。而batch的大小决定了每次迭代训练所使用的样本数量,通常选择一个合适的batch大小可以提高训练的速度和稳定性。另外,batch也可以用于GPU并行计算,将多个样本同时送入GPU进行计算,提高训练的效率。
其实在训练深度神经网络时,我们通常会将数据集划分成多个batch来进行训练,而mini-batch是一个batch中包含的小样本数据量。我们将一个batch划分成多个mini-batch是为了将数据集分批送入网络进行训练,每次只需要处理mini-batch的数据,这样可以减少内存占用和加速训练。同时,通过不断地遍历整个数据集,网络可以得到更充分的训练,从而提高模型的性能。所以,mini-batch是batch的一部分,可以说是更细粒度的划分。

Inception v2:提出了Batch Normalization,通过减少内部协变量偏移有效的加速了深度网络的训练。此外,借鉴VGG-Net[19]的思想,v2将v1中的5×5卷积用两个3×3卷积进行替换,在保证获得同等感受野的情况下,进一步的降低网络的参数量和计算量。

Inception v2相比于Inception v1,在保持一些核心思想的同时进行了一些改进和优化。首先,Inception v2引入了Batch Normalization,使得网络的训练更加稳定,同时也有助于提高准确率。其次,Inception v2采用了一个叫做“Factorizing Convolutions”的技术,即用两个较小的卷积核代替一个较大的卷积核。例如,用两个3x3的卷积核代替一个5x5的卷积核。这样做的好处是,可以减少参数量和计算量,同时还能够保证感受野不变,提高网络的准确率。此外,Inception v2还引入了一些新的技术,如“Label Smoothing”和“Weight Decay”,用于进一步提高网络的准确率和泛化能力。

补充 正则化:

正则化是指在模型训练过程中,通过增加额外的约束条件来限制模型的复杂度,从而避免模型对训练数据的过度拟合,提高模型的泛化能力。正则化技术在机器学习和深度学习领域中得到广泛应用。        在深度学习中,常用的正则化技术包括L1正则化、L2正则化、Dropout、Batch Normalization等。其中L1正则化和L2正则化是通过在损失函数中增加一个正则项,使得模型参数不断趋向于0,从而减少模型复杂度;Dropout是通过随机地将一部分神经元置为0来减少过拟合;Batch Normalization是通过对每个批次的输入进行标准化,从而减少网络的内部协变量偏移,提高训练的效率和泛化能力。正则化技术的选择应根据具体的问题和数据集进行调整,以提高模型的泛化能力和准确性。

这些概念很容易混淆。正则化和减少梯度爆炸/消失的方法都是深度学习中常用的技术,它们的目的都是为了提高模型的泛化性能。

减少梯度爆炸/消失的方法主要是针对深度神经网络中梯度随着层数增加而变得过小或过大的问题,通过一些手段,如权重初始化、使用激活函数、批标准化等,来控制梯度的大小,避免梯度过小或过大,从而使网络能够更好地训练。

正则化是一种在损失函数中增加一些惩罚项的方法,目的是让模型的参数更加平滑或者更加接近于0,从而降低模型的复杂度,避免过拟合,提高泛化性能。常用的正则化方法包括L1正则化、L2正则化和dropout等。

Inceptionv3:主要借鉴了空间可分离卷积的思想,将原本k×k的卷积核拆分成1×k和k×1的一维卷积,一方面可以有效的加速网络的运算,另一方面多余的计算资源可用于增加网络的深度,提高非线性映射的能力。

深度可分离卷积和空间可分离卷积是两个不同的概念。深度可分离卷积将一个普通卷积核分解成深度方向上的1x1卷积核和空间方向上的kxk卷积核,然后先使用1x1卷积核进行深度上的卷积,再使用kxk卷积核进行空间上的卷积,从而在一定程度上降低计算量,同时也可以增加网络的深度。而空间可分离卷积是将一个kxk的卷积核拆分成k个1xk和k个kx1的卷积核,然后先在空间上进行1xk和kx1的卷积,再在深度上进行1x1卷积,从而在一定程度上减少计算量。

当我们在深度方向使用 1x1 卷积时,我们可以通过调整卷积核的数量来控制输出特征图的深度。例如,假设我们有一个输入特征图大小为 28x28x192,我们希望将其深度降低到 64,那么我们可以使用 64 个大小为 1x1x192 的卷积核对输入特征图进行卷积。这将产生一个输出特征图大小为 28x28x64,其中每个像素的值是通过对输入特征图每个位置的 192 个值进行加权求和得到的。

Inception v4:借鉴了ResNet的思想,引入了Skip Connection,不仅可以极大地加速网络的训练,同时也能够显著的提高网络性能。

在Inception v3的基础上进一步引入了ResNet中的skip connection技术,提出了Inception-ResNet结构。这种结构不仅能够加速网络的训练,同时也能够有效地缓解梯度消失和梯度爆炸问题,提高网络的训练效果和泛化能力。Inception v4还使用了一些其他的技术,例如基于稀疏矩阵的滤波、动态卷积等,以进一步提高网络的性能和效率。

ResNet中的skip connection技术可以缓解梯度消失和梯度爆炸问题,主要是因为它可以让网络的反向传播更加顺畅和稳定。在深层神经网络中,由于梯度在反向传播过程中会被连续的矩阵乘法操作缩小或放大,因此在网络的深层部分容易出现梯度消失或梯度爆炸的问题,导致训练变得困难。而ResNet中的skip connection技术通过在网络中引入跨层连接,在不同层之间直接传递信息,使得反向传播时梯度不会被连续的矩阵乘法操作缩小或放大太多,从而可以避免梯度消失或梯度爆炸的问题,同时也可以使得网络更容易训练和收敛。

【卷积变体】

用到再来更

1、非对称卷积(Asymmetric Convolution)


2、八度卷积(Octave Convolution)


3、异构卷积(Heterogeneous Convolution)


4、条件参数化卷积(Conditionally Parameterized Convolutions)


5、动态卷积(Dynamic Convolution)

动态卷积CondConv 


6、幻影卷积(Ghost Convolution)


7、自校正卷积(Self-Calibrated Convolution)


8、逐深度过参数化卷积(Depthwise Over-parameterized Convolution)


9、分离注意力模块(ResNeSt Block)


10、内卷(Involution)

猜你喜欢

转载自blog.csdn.net/sinat_40759442/article/details/129284792