1. 一维(1 D)卷积
最简单的卷积是一维卷积,通常用于序列数据集(但也可以用于其他用例)。它们可以用于从输入序列中提取局部1D子序列,并在卷积窗口内识别局部模式。下图展示了如何将一维卷积滤波器应用于序列以获得新的特征。1D卷积的其他常见用法出现在NLP领域,其中每个句子都表示为单词序列。
图中的输入的数据维度为10,滤波器的维度为2,步长为1,输出维度为:
==10 - 3 + 1 = 8==
注:以上只是简单举例,如果滤波器的数量增加(过滤器数量为n),那么输出的数据维度就变为8×n。一维卷积常用于序列模型,自然语言处理领域。
2. 二维(2 D)卷积
在图像数据集上,CNN架构中使用的大多是二维卷积滤波器。二维卷积的==主要思想是通过卷积滤波器向2个方向(x,y)移动==,从图像数据中计算出低维特征。输出形状也是一个二维矩阵。
2.1. 单通道卷积
在深度学习中,卷积是元素先乘法后加法。对于具有1个通道的图像,卷积如下图所示。这里的滤波器是一个3x3矩阵,元素为[[0,1,2],[2,2,0],[0,1,2]]。过滤器在输入端滑动。在每个位置,它都在进行元素乘法和加法。每个滑动位置最终都有一个数字。最终输出是3 x 3矩阵。
输入图片:5×5×1(宽×高×通道数)【N×N×C】
滤波器(卷积核):3×3×1(长×宽×滤波器通道数)【F×F×FNum】
步长:1【S】
Padding:0(不进行填充)【P】
输出大小:[ (5 - 3 + 2*0 ) / 1 ]+ 1 = 3,【即3×3×1】
其中3×3是输出的特征图大小,1是由滤波器的数量决定的。
总结计算公式:输出尺寸为 [ (N - F + 2*P ) / S ]+ 1
2.2. 多通道卷积
在许多应用程序中,我们处理的是具有多个通道的图像。典型的例子是RGB图像。每个RGB通道都强调原始图像的不同方面。
下图使多通道卷积过程更清晰。输入层是一个5 x 5 x 3矩阵,有3个通道。滤波器是3 x 3 x 3矩阵。首先,过滤器中的每个内核分别应用于输入层中的三个通道,并相加;然后,执行三次卷积,产生3个尺寸为3×3的通道。
多通道2D卷积的第一步:滤波器中的每个内核分别应用于输入层中的三个通道。
举一个更具体和直观的例子:
输入尺寸:N×N×C【宽×高×通道数】 = 5×5×3(经过Padding变为7×7×3)
卷积核(滤波器):F×F×FNum【长×宽×通道数】= 3×3×3
填充:P【Padding】 = 1(用0填充周围,填充长度为1)
步长:S【Step】= 2
输出尺寸:$M =\frac{N-F+2P}{S}+1$ $=\frac{5-3+2*1}{2}+1=3$
上面的动态图来自https://blog.csdn.net/v_july_v/article/details/51812459
这个博主的文章真的很Ncie,有时间我一定一一研读!
3. 三维(3 D)卷积
三维卷积对数据集应用三维滤波器,滤波器向3个方向(x, y, z)移动,计算低层特征表示。它们的输出形状是一个三维的体积空间,如立方体或长方体。在视频、三维医学图像等事件检测中有一定的应用价值。它们不仅限于三维空间,还可以应用于二维空间输入,如图像。
我们采用代数的方式对三维卷积进行介绍,具体思想与一维卷积、二维卷积相同。
- 假设输入数据的大小为$a1×a2×a3$,通道数channel为$c$,过滤器大小为$f$,即过滤器维度为$f×f×f×c$(一般不写channel的维度),过滤器数量为$n$。
- 三维卷积最终的输出为$(a1−f+1)×(a2−f+1)×(a3−f+1)×n$。该公式对于一维卷积、二维卷积仍然有效,只有去掉不相干的输入数据维度就行。【步长S,填充P也需要注意】
- 三维卷积常用于医学领域(CT影响),视频处理领域(检测动作及人物行为)。
4. 空洞卷积(dilated convolution)
Dilated/Atrous Convolution(中文叫做空洞卷积或者膨胀卷积或者扩张卷积或者带孔卷积) 或者是 Convolution with holes 从字面上就很好理解,是在标准的 convolution map 里注入空洞,以此来增加 reception field。相比原来的正常convolution,dilated convolution 多了一个 hyperparameter 称之为 dilation rate 指的是kernel的间隔数量(e.g. 正常的 convolution 是 dilatation rate 1)。
空洞卷积定义内核中值之间的间距。在这种类型的卷积中,由于间距的原因,内核的接受度增加,例如,一个3 × 3的内核,其膨胀率为2,其视野与一个5 × 5的内核相同。复杂性保持不变,但在本例中生成了不同的特性(观察一个大的感受野,而不增加额外的成本)
Standard Convolution with a 3 x 3 kernel (and padding):
Dilated Convolution with a 3 x 3 kernel and dilation rate 2:
空洞卷积动态示意图:
在此就介绍这么多,感兴趣的可以查找有关空洞卷积更详细的资料进行学习。
5. 转置卷积(解卷积、反卷积)
对于许多应用程序和许多网络架构,我们经常希望进行与正常卷积相反方向的转换,即我们希望执行上采样。一些示例包括生成高分辨率图像并将低维特征映射映射到高维空间,例如自动编码器或语义分段。
传统上,可以通过应用插值方案或手动创建规则来实现上采样。然而,神经网络之类的现代架构可以让网络本身自动地学习正确的转换,而无需人为干预。
对于下图中的示例,我们使用3 x 3内核在2 x 2输入上应用转置卷积,使用单位步幅填充2 x 2边框,上采样输出的大小为4 x 4。
6. 深度可分离卷积
深度可分离卷积 :
- 第一步:我们分别使用3个内核,而不是在2D卷积中使用大小为3 x 3 x 3的单个滤波器。每个滤波器的大小为3 x 3 x 1。每个内核与输入层的1个通道进行卷积(仅1个通道,而不是所有通道)。每个这样的卷积提供尺寸为5×5×1的图。然后我们将这些图堆叠在一起以创建5×5×3图像。在此之后,我们的输出尺寸为5 x 5 x 3。
- 第二步:为了扩展深度,我们应用1x1卷积,内核大小为1x1x3。将5 x 5 x 3输入图像与每个1 x 1 x 3内核进行对比,可提供大小为5 x 5 x 1的映射。
因此,在应用128个1x1卷积后,我们可以得到一个尺寸为5 x 5 x 128的层。
通过这两个步骤,深度可分离卷积将输入层(7 x 7 x 3)转换为输出层(5 x 5 x 128)。深度可分离卷积的整个过程如下图所示。
所以深度可分离卷积其实是通过两次卷积实现的。
那么,深度可分离卷积的优势是什么?
效率!与2D卷积相比,对于深度可分离卷积,需要更少的操作。
让我们回顾一下2D卷积示例的计算成本。
有128个3x3x3内核移动5x5次。这是128 x 3 x 3 x 3 x 5 x 5 = 86,400次乘法。
可分离的卷积怎么样?
在第一个深度卷积步骤中,有3个3x3x1内核移动5x5次。那是3x3x3x1x5x5 = 675次乘法。
在1 x 1卷积的第二步中,有128个1x1x3内核移动5x5次。这是128 x 1 x 1 x 3 x 5 x 5 = 9,600次乘法。
因此,总体而言,深度可分离卷积需要675 + 9600 = 10,275次乘法。这只是2D卷积成本的12%左右!
7. 分组卷积
2012年,在AlexNet论文中引入了分组卷积。实现它的主要原因是允许通过两个具有有限内存(每个GPU 1.5 GB内存)的GPU进行网络训练。下面的AlexNet在大多数层上显示了两个独立的卷积路径。它正在跨两个GPU进行模型并行化(当然,如果有更多的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个滤波器组的分组卷积的说明。在每个滤波器组中,每个滤波器的深度仅为标准2D卷积的深度的一半。它们具有深度Din/2。每个滤波器组包含Dout/2滤波器。
第一个滤波器组(红色)与输入层的前半部分([:,:0:Din/2])卷积,而第二个滤波器组(蓝色)与输入层的后半部分卷积([:,:,Din/2:Din])。因此,每个过滤器组都会创建Dout / 2通道。总的来说,两组创建2 x Dout/2 = Dout频道。然后,我们使用Dout通道将这些通道堆叠在输出层中。
8. 1×1卷积
1 x 1卷积中将一个数字乘以输入层中的每个数字。如果输入层有多个通道,此卷积会产生有趣的作用。下图说明了1 x 1卷积如何适用于尺寸为H x W x D的输入层。在滤波器尺寸为1 x 1 x D的1 x 1卷积之后,输出通道的尺寸为H x W x 1.如果我们应用N这样的1 x 1卷积然后将结果连接在一起,我们可以得到一个尺寸为H x W x N的输出层。
最初,在网络文件中提出了1 x 1卷积。然后,他们在Google Inception 被高度使用1 x 1卷积的一些优点是:降低维度以实现高效计算高效的低维嵌入或特征池卷积后再次应用非线性。
在上图中可以观察到前两个优点。在1 x 1卷积之后,我们显着地减小了尺寸。假设原始输入有200个通道,1 x 1卷积会将这些通道(功能)嵌入到单个通道中。第三个优点是在1 x 1卷积之后,可以添加诸如ReLU的非线性激活,非线性允许网络学习更复杂的功能。
今天就总结到这里,谢谢大家。希望我们共同进步,拜拜!
参考:
https://mp.weixin.qq.com/s/caIzpCm7RaE4qFbvy9_dMQ
https://www.cnblogs.com/szxspark/p/8445406.html
https://zhuanlan.zhihu.com/p/57575810
https://blog.csdn.net/v_july_v/article/details/51812459
https://mp.weixin.qq.com/s/IWGQqA183Q1-NX3gwgQ_Yw