目录
8.1 图像卷积过程
8.2 卷积层基本参数
8.3 卷积后图像的长和宽大小的计算方式
8.4 卷积神经网络中的权重共享
8.5 上采样中的反卷积
8.6 空洞卷积
8.7 深度可分离卷积
8.8 为什么可分离卷积中Depthwise卷积后还要进行pointwise卷积
8.9 分组卷积 Group Conv
8.10 1x1卷积作用
8.11 卷积的底层实现/加速技巧
8.12 卷积神经网络的特点
8.13 卷积的memory,params,GFLOPs计算方法
欢迎大家订阅我的专栏一起学习共同进步,主要针对25届应届毕业生
祝大家早日拿到offer! let's go
🚀🚀🚀http://t.csdnimg.cn/dfcH3🚀🚀🚀
卷积(Convolution)是一种数学运算,常见于信号处理、图像处理和机器学习等领域。在深度学习中,卷积神经网络(Convolutional Neural Network,CNN)是一种常用的模型结构,其中的卷积操作是其核心组成部分之一。
卷积操作的基本思想是通过滑动一个滤波器(也称为卷积核或者特征检测器)在输入数据上进行局部加权求和。这个滤波器可以捕捉到输入数据的局部特征,例如在图像中可以捕捉到边缘、纹理等。在二维图像处理中,卷积操作通常是对图像的二维矩阵进行处理,而在文本处理中,可以是对文本序列的一维向量进行处理。
通过不同的滤波器和多个卷积层的组合,卷积神经网络能够逐层提取输入数据的抽象特征,从而实现对复杂数据的高效建模和处理。
8.1 图像卷积过程
8.2 卷积层基本参数
参数名 | 作用 | 常见设置 |
卷积核大小 (Kernel Size) | 卷积核大小定义了卷积的感受野 | 在过去常设为5,如LeNet-5;现在多设为3,通过堆叠3 × 3 3\times33×3的卷积核来达到更大的感受域【两个3*3的卷积核相当于1个5 *5的卷积核】 |
卷积核步长 (Stride) | 定义了卷积核在卷积过程中的每一步长度 | 常见设置为1,表示滑窗距离为1,可以覆盖所有相邻位置特征的组合;当设置为更大值时相当于对特征组合降采样 |
填充方式 (Padding) | 在卷积核尺寸不能完美匹配输入的图像矩阵时需要进行一定的填充策略 | 设置为’SAME’表示对不足卷积核大小的边界位置进行某种填充(通常零填充)以保证卷积输出维度与与输入维度一致;当设置为’VALID’时则对不足卷积尺寸的部分进行舍弃,输出维度就无法保证与输入维度一致 |
输入通道数 (In Channels) | 指定卷积操作时卷积核的深度 | 默认与输入的特征矩阵通道数(深度)一致;在某些压缩模型中会采用通道分离的卷积方式 |
输出通道数 (Out Channels) | 指定卷积核的个数 | 若设置为与输入通道数一样的大小,可以保持输入输出维度的一致性;若采用比输入通道数更小的值,则可以减少整体网络的参数量 |
8.3 卷积后图像的长和宽大小的计算方式
Output = ((Input - k + 2p) / s) + 1 【向下取整】
8.4 卷积神经网络中的权重共享
权重共享即输入一张图片,这张图片用一个卷积核进行卷积操作的时候,图片中的每一个位置都被同一个卷积核进行卷积,所以权重是一样的,也就是共享
8.5 上采样中的反卷积
扩大图像尺寸,实现图像由小分辨率到大分辨率的映射的操作,叫做上采样(Upsample)。常见的方法:双线性插值(bilinear),反卷积(Transposed Convolution),反池化(Unpooling)。
反卷积(Deconvolution)通常是用于图像的上采样和特征图的反卷积操作,而不是简单的卷积核的转置。在深度学习中,通常使用转置卷积(Transpose Convolution)来实现反卷积操作,而不是直接将卷积核进行转置。转置卷积是一种通过卷积核的扩展和补零来实现上采样的操作。
反卷积的实现过程通常涉及以下步骤:
1. 输入图像的尺寸扩大:首先,通过在输入图像的周围补零的方式来扩大图像的尺寸。这样可以使得图像的尺寸变大,从而实现上采样操作。
2. 卷积核的转置:将原始的卷积核进行转置操作。转置操作将卷积核的行和列进行交换,使得卷积核从一个大小为 \(m \times n\) 的核变为一个大小为 \(n \times m\) 的核。
3. 进行转置卷积:使用转置后的卷积核对扩大后的图像进行卷积操作。这个操作会使得输出的特征图的尺寸变为原始图像的尺寸。
4. 可能的激活函数处理:根据需要,可能会对输出进行激活函数处理,如ReLU等。
转置卷积操作不仅仅是简单地对卷积核进行转置,还包括对输入进行补零扩大和通过卷积操作实现的上采样过程。因此,转置卷积能够更好地恢复原始图像的信息,而不仅仅是尺寸大小。
8.6 空洞卷积
Dilated/Atrous Convolution(空洞卷积或者膨胀卷积) 或者是 Convolution with holes。即在标准的卷积核里注入空洞,以此来增加感受野。相比原来的常规卷积,Dilated convolution 多了一个超参数称之为 Dilation rate(空洞率) 指的是kernel的间隔数量(e.g. 标准卷积的空洞率是1)。下图为空洞卷积示意图。
与标准卷积相比,在保持同等计算量的情况下,可以扩大感受野。对于检测与分割任务,扩大感受野可以提升精度; 缺点是会出现网格效应(gridding effect),丢失局部像素信息。
8.7 深度可分离卷积
Depthwise卷积与Pointwise卷积,合起来被称作 Depthwise Separable Convolution(深度可分离卷积), 相比于常规卷积,其参数量和运算成本比较低,在一些轻量级网络中时常出现。
1.首先看看分组卷积,对于一张5x5像素,三通道RGB输入图片,经过3x3x4卷积核的卷积层,最终会输出4个feature map。卷积层共4个Filter,每个Filter包含了3个Kernel,每个Kernel的大小为3×3。
2.深度可分离卷积,深度可分离卷积是将一个完整的卷积运算分解为两步运行,即Depthwise卷积 与 Pointwise卷积。
Depthwise convolution的一个卷积核只负责一个通道,即一个通道只被一个卷积核卷积。同样是对一张5x5像素,3通道彩色输入图片,Depthwise卷积的一个卷积核只负责一个通道,即一个通道只被一个卷积核卷积,卷积核的数量与上一层的通道数相同。所以一个三通道的图像经过运算后生成了3个Feature map。这里其实最终的维数应该是3x3,因为每一个卷积都会作用一次,所以最终是3x3维度。
Depthwise Convolution完成后的Feature map数量与输入层的depth相同,但是这种运算对输入层的每个通道独立进行卷积运算后就结束了,没有有效利用不同map在相同空间位置上的信息。因此需要增加另外一步操作来将这些map进行组合生成新的Feature map,即接下来的Pointwise Convolution。
Pointwise 卷积运算则是常规的运算,它的卷积核的尺寸为1x1xM,M为需要得到的最终feature map数量,所以这里的卷积运算会将上一步的map在深度方向上进行加权组合,生成新的feature map,总共为M维度,操作方法就是Concate,然后再用1x1的卷积。经过Pointwise Convolution之后,同样输出了4张Feature map,与常规卷积的输出维度相同。
深度可分离卷积计算量
同样以一张5x5像素,三通道RGB输入图片为例:
普通卷积:3x3x3x4=108
3x3是卷积核尺寸,3是输入图片通道数目,4是输出卷积核的个数。
深度可分离卷积:
DW:3x3x3x1=27
卷积核个数仅会设置1,也是DW的性质,最终形成3张feature map
PW:1x1x3x4=12
1x1为卷积核的尺寸,3为上一层feature map的数量,4为最终需要的维度。其实这里我们也得到了4维的feature map。
total: 27+12=39
明显深度可分离卷积计算量比普通卷积小很多,只有其近三分之一的计算量。
8.8 为什么可分离卷积中Depthwise卷积后还要进行pointwise卷积
Depthwise Convolution完成后的Feature map数量与输入层的depth相同,但这种运算对输入层的每个channel独立进行卷积运算后就结束了,没有利用不同map在相同空间位置上的信息。因此需要增加另外一步操作来将这些map进行组合生成新的Feature map,即接下来的Pointwise Convolution。
8.9 分组卷积 Group Conv
Group convolution 分组卷积,由于当时的硬件资源有限,训练模型时卷积操作不能全部放在同一个GPU处理,因此把feature maps分给多个GPU分别进行处理,最后把多个GPU的结果进行融合。下图就是将特征图分成两半,卷积后再组合。
8.10 1x1卷积作用
1.实现跨通道的交互和信息整合
2.进行卷积核通道数的降维和升维
3.对于单通道feature map 用单核卷积即为乘以一个参数,而一般情况都是多核卷积多通道,实现多个feature map的线性组合
4.可以实现与全连接层等价的效果。如用1x1xm的卷积核卷积n(如512)个特征图的每一个位置(像素点),其实对于每一个位置的1x1卷积本质上都是对该位置上n个通道组成的n维vector的全连接操作。
8.11 卷积的底层实现/加速技巧
卷积在图像处理中,可通过矩阵相乘来实现。所以可以从矩阵运算入手来加速。主要方式是低秩近似算法。
(1)使用结构化矩阵近似重构原矩阵。
(2)使用SVD矩阵分解方法来重构矩阵。
8.12 卷积神经网络的特点
局部连接(稀疏连接)。提取局部特征
权值共享。减少参数量,降低训练难度,避免过拟合,提升模型“平移不变性”
降维。通过池化或卷积实现
多层次结构。将低层次的局部特征组合成较高层次的特征,不同层级的特征可以对应不同任务
8.13 卷积的memory,params,GFLOPs计算方法
- memory
- params
- FLOPs 10^9 FLOPS = 1 GFLOPS