摘要:在卷积神经网络中,通过应用filters提取不同的特色,这些filters的权重是在训练期间主动学习的,而后将所有这些提取的特色“组合”以做出决策。
本文分享自华为云社区《神经网络罕用卷积总结》,原文作者:fdafad 。
进行卷积的目标是从输出中提取有用的特色。在图像处理中,能够抉择各种各样的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 的层。
分组卷积
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的3x3内核将具备与5x5内核雷同的视线,而只应用9个参数。 设想一下,应用5x5内核并删除每个距离的行和列。(如下图所示)零碎能以雷同的计算成本,提供更大的感触野。扩张卷积在实时宰割畛域特地受欢迎。 在须要更大的察看范畴,且无奈接受多个卷积或更大的内核,能够才用它。
直观上,空洞卷积通过在卷积核局部之间插入空间让卷积核「收缩」。这个减少的参数 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是类别品种,1x1失去的是。FCN作者,或者起初对end to end钻研的人员,就是对最终1x1的后果应用反卷积(事实上FCN作者最初的输入不是1X1,是图片大小的32分之一,但不影响反卷积的应用)。这里图像的反卷积与图6的full卷积原理是一样的,应用了这一种反卷积伎俩使得图像能够变大,FCN作者应用的办法是这里所说反卷积的一种变体,这样就能够取得相应的像素值,图像能够实现end to end。
目前应用得最多的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的性质在提高效率和解释平移不变性等价方面有意义,但它剥夺了卷积核适应不同空间地位的不同视觉模式的能力。此外,局部性限度了卷积的感触野,对小指标或者含糊图像形成了挑战。另一方面,家喻户晓,卷积核外部的通道间冗余在许多经典深度神经网络中都很突出,这使得卷积核对于不同通道的灵活性受到限制。
为了克服上述限度,本文作者提出了被称为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中的局部模型。
点击关注,第一工夫理解华为云陈腐技术~