"); //-->
CondConv
论文:《CondConv: Conditionally Parameterized Convolutions for Efficient Inference》[28] (Accepted by NIPS 2019)
代码:https://github.com/CVHuber/Convolution/blob/main/Conditionally%20Parameterized%20Convolutions.py
讲解:https://mp.weixin.qq.com/s/bWUrhXfcqiqG4zC_xv_XqA
背景
普通卷积对所有样本都采用相同的卷积核参数,这就导致为了提升模型容量,就需要增加模型的参数。因此提高网络深度,增加通道数是一种常用的做法,但这会进一步导致模型的计算量加大,为部署带来更大的挑战。由此提出了CondConv,它针对每个batch中的每一个输入样本得到定制化的卷积核,在提高模型容量同时还能够保持高效的推理速度。
Conditionally Parameterized Convolutions
原理
在常规卷积中,卷积核参数一旦经过训练确定以后,无论输入什么样本进行测试,都会利用固定的参数取提取特征。而CondConv中,卷积核参数可以针对输入样本进行动态变换。其次,常规卷积的容量提升依赖于卷积核尺寸和通道数的增加。而CondConv中只需要在执行卷积计算之前通过多个expert对输入样本计算加权卷积核即可。CondConv本质上等价于多个静态卷积的线性组合。
特性
CondConv通过增加内核生成函数的大小和复杂性,利用样本之间的关系改善了模型性能,它为提高模型容量同时保持有效推理提供了一种新的思路。由于仅增加了一个权重向量用于表示卷积核线性组合,因此增加的复杂度比添加其他卷积或扩展现有卷积要少得多。CondConv层可以代替网络中的任何卷积层使用来提高网络的性能,实现即插即用。同时,也可以轻松的扩展到网络层中其它的线性函数上,例如全连接层中的线性函数,提供了一个改进的思路。
DynamicConv
论文:《Dynamic Convolution: Attention over Convolution Kernels》[29] (Accepted by CVPR 2020)
代码:https://github.com/CVHuber/Convolution/blob/main/Dynamic%20Convolution.py
讲解:https://mp.weixin.qq.com/s/zyhZvQXBoadA1m762s2B9g
背景
轻量级卷积神经网络能够在较低的计算预算下运行,却也牺牲了模型性能和表达能力。为此提出了动态卷积,与传统的静态卷积(每层单个卷积核)相比,根据注意力动态叠加多个卷积核不仅显著提升了表达能力,额外的计算成本也很小,因而对高效的 CNN 更加友好,同时可以容易地整合入现有 CNN 架构中。
Dynamic Convolution
原理
动态卷积的原理根据输入图像,自适应的调整卷积的参数。如上图所示,静态的卷积核对于不同的输入均作同样的处理,而动态的卷积核则会根据输入的不同针对性地利用不同的卷积核选择合适的卷积的参数去进行特征的提取。
特性
权重自适应
动态卷积通过融合注意力机制动态地聚合多个并行的卷积核。首先对输入进行一次注意力操作然后得到每个卷积核的权重,将学习到的权重叠加到不同的卷积核上以实现卷积核的动态选取。
训练方式
动态卷积的一个训练难点在于随着网络深度的加深,如何协调多个卷积核和注意力模型之间的共同学习。作者指出需要限制注意力的取值(令权重和为1)以此来简化注意力模型的学习。其次,在训练初期限制注意力接近均匀分布有利于多个卷积核的共同学习,提出了利用Temperature annealing来提升模型的准确性。
内存计算开销
动态卷积主要包含两部分开销:注意力计算以及卷积核的叠加。其中注意力机制是由GAP和两个FC层组成的,计算复杂度低。而叠加的多个卷积核由于内核尺寸较小,计算复杂度也不高。因此,整体来说动态卷积仅引入了少量额外的计算开销却显著增加了特征表达能力。然而,由于采用多个卷积核并行的方式,必然会极大的增大内存开销。
Ghost Block
论文:《GhostNet: More Features from Cheap Operations》[30] (Accepted by CVPR 2020)
代码:https://github.com/CVHuber/Convolution/blob/main/Ghost%20Convolution.py
讲解:https://mp.weixin.qq.com/s/TBJ7XeBNZYpUpE7kPFEvsA
背景
众所周知,通过堆叠卷积层可以捕获丰富的特征信息,其中也包含了冗余信息,这有利于网络对数据有更全面的理解。因此,可以通过常规卷积操作提取丰富的特征信息,对于冗余的特征信息,则利用更价廉的线性变换操作来生成,这样不仅能够有效地降低模型所需计算资源,同时设计简单、易于实现,可以即插即用。
Ghost Convolution
原理
幻影卷积的核心思想是利用简单廉价的线性变化来等效的生成我们所需要的特征图,而无需利用多余的滤波器生成,以此来提高网络的计算效率。
特性
卷积神经网络中主要的参数量和计算量来自于卷积结构,利用卷积可以生成新的特征图,然而并不是所有的特征图都是不一样的。经过可视化分析可以发现存在着很多高度相似的特征图,而这些特征图并没有必要去用卷积获取,而是可以通过简单的线性操作来替代,从而以更小的参数量和计算量换取差不多的精度。Ghost模块使用了分组卷积作为更价廉的线性变换。分组卷积方式消除了通道间的相关性,使得当前通道特征仅与自己相关,一方面模拟冗余特征的生成方式,另一方面显著减低的参数量和计算量。
SCConv
论文:《Improving Convolutional Networks with Self-Calibrated Convolutions》[31] (Accepted by CVPR 2020)
代码:https://github.com/CVHuber/Convolution/blob/main/Self-Calibrated%20Convolution.py
背景
CNNs的最新进展主要致力于设计更复杂的体系结构,以增强其表示学习能力。自校正卷积可以在不调整模型架构的情况下改进CNNs的基本卷积特征转换过程,通过内部通信显着扩展了每个卷积层的感受野,从而丰富了输出功能。特别是,与使用小卷积核融合空间和通道方向信息的标准卷积不同,自校准卷积能够围绕每个空间位置自适应地建立长距离空间和通道间依赖性的校准操作。因此,它可以通过显式合并更丰富的信息来帮助CNNs生成更多辨识性表示。
Self-Calibrated Convolution
原理
自校正卷积其核心思想是考虑在不调整模型架构的情况下改进CNNs的基本卷积特征转换过程。本质上是一种用于多尺度特征提取的分组卷积,并按通道维度均分为两组。其中一条通路用于常规的卷积提取特征,另一条通路则是利用下采样操作来增大网络的感受野。最终使得每个空间位置都可以通过融合来自两个不同空间尺度的信息来实现自校准的操作。
特性
增强特征表达能力
不同于普通卷积同时融合空间和通道信息,自校正卷积可以通过自校正操作自适应地在每个空间位置周围建立远距离空间和通道的依赖关系,从而生成更具判别力的特征,提取更加丰富的上下文信息。
即插即用
自校正卷积设计简单且通用,可以轻松嵌入到任意的CNN架构中增强卷积层提取特征的能力,而不会引入额外的参数,但不可避免的会增大网络的计算量。
DO-Conv
论文:DO-Conv[32]
代码:https://github.com/yangyanli/DO-Conv
讲解:https://mp.weixin.qq.com/s/fuXYD6EhpoAKxyUJ8xigqg
背景
CNNs应用于计算机视觉领域的很多任务中,增加非线性层的数量,能够有效地增加网络的表达能力,从而提高网络的性能。然而,很少有人考虑只增加线性层,只增加线性层会造成过拟合现象,因为多个连续的线性层可以被一个线性层替代,而使用一个线性层参数更少。因此,作者通过在普通卷积层中加入额外的逐深度卷积,构成一个过参数化的卷积层,并将其命名为DO-Conv。
DO-Conv
原理
DO-Conv是深度卷积核普通卷积的组合,其计算过程可分为两部分。先对输入特征使用逐深度卷积运算。最后再对输出的中间结果使用常规卷积运算。具体计算过程可参考论文讲解部分。
特性
DO-Conv是一种over-parameterized的卷积层,通过简单的对深度卷积和传统卷积以一定方式组合,代替CNN的普通卷积层,便可以大幅提高CNN的性能。DO-Conv非常方便易用,除了改善了现有CNN的训练速度和最终准确度之外,更无需在模型推理阶段引入额外的计算。
ResNeSt Block
论文:《ResNeSt: Split-Attention Networks》[33]
代码:https://github.com/CVHuber/Convolution/blob/main/ResNeSt%20Block.py
背景
ResNet等一些基础卷积神经网络是针对于图像分类而设计的。由于有限的感受野大小以及缺乏跨通道之间的相互作用,这些网络可能不适合于其它的一些领域像目标检测、图像分割等。这意味着要提高给定计算机视觉任务的性能,需要修改以使其对特定任务更加有效。例如,某些方法添加了金字塔模块或引入了远程连接或使用跨通道特征图注意力。虽然这些方法确实可以提高某些任务的学习性能,但由此而提出了一个问题,即是否可以创建具有通用改进功能表示的通用骨干网,从而同时提高跨多个任务的性能?跨通道信息在下游应用中已被成功使用 ,而最近的图像分类网络更多地关注组或深度卷积。尽管它们在分类任务中具有出色的计算能力和准确性,但是这些模型无法很好地转移到其他任务,因为它们的孤立表示无法捕获跨通道之间的关系。因此,作者提出了ResNeSt block来进行跨通道的学习。
ResNeSt Block
原理
ResNeSt首先是基于ResNeXt,将输入特征图划分为k个组(Cardinal Groups),然后对每个Cardinal Group结SK的思想又划分为r个基(Radix),每个基中又结合了SE的思想。每个Cardinal Groups的操作保持一致,先对组内的各个基特征进行一个1×1+3×3的组合,以压缩通道并进行卷积提取;其次,对所有卷积过后的基特征进行融合,随后利用SE的操作来获取注意力权重;紧接着将学习到的权重叠加回各组基特征,以实现强化和抑制的作用,然后对所有基特征进行融合(Add);最后,结合残差的思想将各个组的输出共同连接起来作为RexNeSt模块的输出。
特性
与现有的ResNet变体相比,ResNeSt不需要增加额外的计算量,同时也可以作为其它任务的骨架。利用ResNeSt主干的模型能够在图像分类、目标检测、实例分割和语义分割这几个任务上达到最先进的性能。与通过神经架构搜索生成的最新CNNs模型相比,所提出的ResNeSt性能优于所有现有ResNet变体,并且具有相同的计算效率,甚至可以实现更好的速度精度折衷。
内卷(Involution)
论文:《Involution: Inverting the Inherence of Convolution for Visual Recognition》[34] (Accepted by CVPR 2021)
代码:https://github.com/CVHuber/Convolution/blob/main/Involution.py
讲解:https://mp.weixin.qq.com/s/Y-hXabMclEcDfvLcxvpKdA
背景
与经典的图像滤波方法类似,卷积核具有两个显著的特性:空间不变性(Spatial-agnostic)和通道特异性(Channel-specific)。前者保证了不同空间区域之间权值共享,实现了平移不变性;后者负责将特征信息编码到不同的通道中,增强了特征表达。虽然这两种特性能够提升对于图像数据的学习效率,但是还存在以下两个主要问题:空间维度上剥夺了卷积核捕获不同空间位置的多种特征表示能力;通道维度上卷积内部的通道间会有冗余。
Involution
原理
生成内卷核
选取某个空间位置的所有通道像素(红色长方形),通过变换函数并展开获得内卷核(K×K×1)。
计算内卷积
进行乘和操作,即先把内卷核拉成K×K×C,与对应位置相乘,再将K×K个1×1×C相加,代替原来位置的像素,完成内卷积计算。
特性
权重自适应
通过将权重自适应地分配到不同的位置,对不同信息量的特征进行优先级排序。(常规卷积对于不同的位置,都是应用一样权重)
建模上下文
在更广阔的空间中聚合上下文,从而克服对远距离依赖建模的困难。(常规卷积通常使用小卷积核,感受野有限)
共享内卷核
通过共享内卷核,可以减少卷积核的冗余信息。
总结
大多数的卷积结构都是在精度-参数量-计算量这三个维度上进行不同的侧重取舍。两个矛盾:
追求计算效率的卷积结构由于计算预算较低,无论是限制卷积层的深度,还是限制了卷积的宽度,不可避免地会导致性能的下降。
追求精度提升的卷积结构由于其引入过多的卷积运算或其他额外的操作(如注意力),势必会增大内存或计算开销,从而影响模型的容量和整体的训练或推理速度。
一个设计的原则就是我们如何在不增加额外参数量的情况下,尽可能利用有效的信息或者从降低冗余空间信息的角度出发,来提高模型的计算效率和卷积提取特征的能力。不知道大家看出来了没有,其实大多数的结构都是基于 Split-Transform-Merge 的架构进行改造的。Split指的是分组,可以按需要划分为N组,N=1,2,3...。然后对每一组做一个Transform,即转换,这里可以是利用门控/注意力机制去增强,也可以是利用池化等操作去扩大感受野,亦或是其他操作等等。最后再利用某种机制(如残差)将多组结果合并起来作为输出。可以看出,大多数卷积都是基于STM架构针对每个环节进行设(魔)计(改)。
关于更多的卷积源码现已整理归档,有兴趣的读者可以自行进行到github库下载,后面有更优秀的卷积变体也会持续更新。【代码链接:https://github.com/CVHuber/Convolution,欢迎Star!】
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。