文章目录
- CNN的组成层
- 卷积层
- 卷积运算
- 卷积的变种
- 分组卷积
- 转置卷积
- 空洞卷积
- 可变形卷积
- 卷积层的输出尺寸和参数量
CNN的组成层
在卷积神经⽹络中,⼀般包含5种类型的⽹络层次结构:输入层、卷积层、激活层、池化层和输出层。
- 输入层(input layer)
输⼊层通常是输⼊卷积神经⽹络的原始数据或经过预处理的数据。以图像分类任务为例,输⼊层输⼊的图像⼀般包含RGB三个通道,是⼀个由长宽分别为H和W组成的3维像素值矩阵HW3 。 - 卷积层(convolution layer)
卷积层通常⽤作对输入层输入数据进行特征提取,通过卷积核矩阵对原始数据中隐含关联性的⼀种抽象。卷积操作原理上其实是对两张像素矩阵进⾏点乘求和的数学操作,其中⼀个矩阵为输⼊的数据矩阵,另⼀个矩阵则为卷积核(滤波器或特征矩阵),求得的结果表⽰为原始图像中提取的特定局部特征。 - 激活层(activation layer)
激活层负责对卷积层抽取的特征进⾏激活,由于卷积操作是由输⼊矩阵与卷积核矩阵进⾏相差的线性变化关系,需要激活层对其进⾏⾮线性的映射。激活层主要由激活函数组成,即在卷积层输出结果的基础上嵌套⼀个⾮线性函数,让输出的特征图具有⾮线性关系。【神经网络中的激活函数:】 - 池化层(downsampling layer)
池化层⼜称为降采样层,作⽤是对感受域内的特征进⾏筛选,提取区域内最具代表性的特征,能够有效地降低输出特征尺度,进⽽减少模型所需要的参数量。 - 全连接层(full connected layer)
全连接层负责对卷积神经⽹络学习提取到的特征进⾏汇总,将多维的特征输⼊映射为⼆维的特征输出。
卷积层
卷积运算
卷积层是通过特定数目的卷积核对输入的多通道特征图进行扫描和运算,从而得到多个拥有更高层语义信息的输出特征图。
深度学习中网络模型的卷积运算动图解析:
卷积的变种
分组卷积
在普通的卷积操作中,一个卷积核对应输出特征图的一个通道,而每个卷积核又会作用在输入特征图的所有通道上(即卷积核的通道数等于输入特征图的通道数) ;因此最终输出特征图的每个通道都与输入特征图的所有通道相连接。也就是说,普通的卷积操作,在“通道”这个维度上其实是“全连接”的。
所谓分组卷积,其实就是将输入通道和输出通道都划分为同样的组数,然后仅让处于相同组号的输入通道和输出通道相互进行“ 全连接”。如果记g为输入1输出通道所分的组数,则分组卷积能够将卷积操作的参数量和计算量都降低为普通卷积的1/g。
分组卷积最初是在AlexNet网络中引入的,为解决单个GPU无法处理含有较大计算量和存储需求的卷积层的问题,就采用分组卷积将计算和存储分配到多个GPU上。
转置卷积
先对原始特征矩阵进⾏填充使其维度扩⼤到适配卷积⽬标输出维度,然后进⾏普通的卷积操作的⼀个过程,其输⼊到输出的维度变换关系恰好与普通卷积的变换关系相反,但这个变换并不是真正的逆变换操作,通常称为转置卷积⽽不是反卷积。
普通卷积主要用来做特征提取,倾向于压缩特征图尺寸;而转置卷积用于对特征图进行扩张或上采样。 主要应用场景有:
- 语义分割/实例分割等任务:由于需要提取输入图像的高层语义信息,网络的特征图尺寸一般会先缩小,进行聚合:此外,这类任务一般需要输出与原始图像大小一致的像素级分割结果,因而需要扩张前面得到的具有较高语义信息的特征图,这就用到了转置卷积。
- 一些物体检测、关键点检测任务,需要输出与源图像大小一致的热图。
- 图像的自编码器、变分自编码器、 生成式对抗网络等。
空洞卷积
空洞卷积就是在标准的卷积核中注入“空洞”,以增加卷积核的感受野。
空洞卷积引入扩张率来指定相邻采样点之间的间隔:扩张率为r的空洞卷积,卷积上相邻数据点之间有r-1个空洞。特别的,扩张率为1的空洞卷积实际上就是普通卷积。
空洞卷积利用空洞结构扩大了卷积核尺寸,不经过下采样操作即可增大感受野,同时还能保留输入数据的内部结构。
可变形卷积
普通的卷积操作是在固定的、规则的网格点上进行数据采样,这就束缚了网络的感受野形状,限制了网络对几何形变的适应能力。为克服这个限制,可变形卷积在卷积核的每个采样点上添加一个可学习的偏移量,让采样点不再局限于规则的网格点。
可变形卷积让网络具有了学习空间几何形变的能力,即可变形卷积引入了一个平行分支来端到端地学习卷积核采样点的位置偏移量。该平行分支先根据输入特征图计算出采样点的偏移量,然后再在输入特征图上采样对应的点进行卷积运算。这种结构让可变形卷积的采样点能根据当前图像的内容进行自适应调整。
卷积层的输出尺寸和参数量
假设一个卷积层的输入特征图的尺寸为li,卷积核大小为k,步长为s,填充为p,则输出特征图的尺寸为:(l + 2p - k)/ s + 1。
卷积层的参数量,主要取决于每个卷积核的参数量以及卷积核的个数,设输入输出的通道数分别为ci和co,卷积核为kw和kh,则参数总量为:cikwkhco。
怎样才能减少卷积层参数量?
- 使用堆叠小卷积代替大卷积
- 添加1X1的卷积操作
- 在卷积层之前使⽤池化操作:池化可以降低卷积层的输⼊特征维度