卷积神经网络(CNN)-CSDN博客
https://blog.csdn.net/fuhanghang/article/details/135544761
卷积神经网络(Convolutional Neural Networks,CNN)是一类包含卷积计算且具有深度结构的前馈神经网络(Feedforward Neural Networks),是深度学习(deep learning)的代表算法之一。本文旨在介绍CNN的基本概念和结构,以及CNN网络架构设计的基本思路。(深度指的是隐藏层的层数)
一、卷积神经网络介绍
1、什么是卷积神经网络?
卷积神经网络是多层感知机(MLP)的变种,由生物学家休博尔和维瑟尔在早期关于猫视觉皮层的研究发展而来,视觉皮层的细胞存在一个复杂的构造,这些细胞对视觉输入空间的子区域非常敏感,称之为感受野。
CNN由纽约大学的Yann Lecun于1998年提出(LeNet-5),其本质是一个多层感知机,成功的原因在于其所采用的局部连接和权值共享的方式:一方面减少了权值的数量使得网络易于优化;另一方面降低了模型的复杂度、减小了过拟合的风险。 当网络的输入为图像时,这些优点将表现地更加明显。
2006年,Hinton提出了深度学习,其主要的观点是:多隐层的人工神经网络具有优异的特征学习能力,学习到的数据更能反映数据的本质特征有利于可视化或分类。大数据和计算机硬件的发展使得深度学习得以推广和应用。(每一层都提取上一层的特征,从而层层递进,提取到本质特征)
2012年AlexNet取得ImageNet比赛的分类任务的冠军,使得卷积神经网络真正爆发。如今的卷积神经网络(CNN)是一种带有卷积结构的深度神经网络,卷积结构可以减少深层网络占用的内存量,其三个关键的操作——局部感受野、权值共享、pooling层,有效地减少了网络的参数个数,缓解了模型的过拟合问题。
2、卷积神经网络的特点
当使用全连接神经网络处理大尺寸图像时,有三个非常明显的缺点:
(1)将图像展开为向量会丢失空间信息;
(2)参数过多效率低下,训练困难;
(3)大量的参数也很快会导致网络过拟合。
卷积神经网络则可以很好地解决以上三个问题。
与常规神经网络不同,卷积神经网络的各层中的神经元是3维排列的:宽度、高度和深度。对于输入层来说,宽度和高度指的是输入图像的宽度和高度,深度代表输入图像的通道数,例如,对于RGB图像有R、G、B三个通道,深度为3;而对于灰度图像只有一个通道,深度为1。对于中间层来说,宽度和高度指的是特征图(feature map)的宽和高,通常由卷积运算和池化操作的相关参数决定;深度指的是特征图的通道数,通常由卷积核的个数决定。全连接神经网络中的主要运算为矩阵相乘,而卷积神经网络中主要为卷积计算,文章第三部分将对卷积运算及其变种进行介绍。
二、基本概念
0、卷积(Convolution)
要理解后续内容,首先要大致了解什么是卷积运算(这里指最常用的标准卷积运算),以及多核卷积和深度卷积是什么?这些比较入门,且要介绍清楚需要大量的篇幅,这里不具体赘述,可以参考下面这篇文章:知乎:原来卷积是这么计算的 。这里仅从文章里引借一个动画来帮助大家直观地理解卷积运算的大致形式。
卷积运算演示动画:
在卷积神经网络中,对于输入的图像,需要多个不同的卷积核对其进行卷积(每个卷积核从头到尾卷积一次,提取特征,形成一张特征图,多个卷积核就提取多种特征图,形成了卷积深度),来提取这张图像不同的特征(多核卷积);同时也需要多个卷积层进行卷积,来提取深层次的特征(深度卷积)。
1、感受野(Receptive Field)
感受野指的是卷积神经网络每一层输出的特征图(feature map)上每个像素点映射回输入图像上的区域大小。神经元感受野的范围越大表示其能接触到的原始图像范围就越大,也意味着它能学习更为全局,语义层次更高的特征信息;相反,范围越小则表示其所包含的特征越趋向局部和细节。因此感受野的范围可以用来大致判断每一层的抽象层次。并且我们可以很明显地知道网络越深,神经元的感受野越大。由此可知,深度卷积神经网络中靠前的层感受野较小,提取到的是图像的纹理、边缘等局部的、通用的特征;靠后的层由于感受野较大,提取到的是图像更深层次、更具象的特征。因此在迁移学习(模型微调)中常常会将靠前的层的参数冻结(不参与训练,因为他们在迁移到新的场景之前已经具备了提取通用特征的能力),来节省训练的时间和算力消耗。
2、权值共享
在卷积运算中采用权值共享可以有效减少需要求解的参数。权值共享是基于这样的一个合理的假设:如果一个特征在计算某个空间位置 的时候有用,那么它在计算另一个不同位置的时候也有用。通俗地来讲,在一个卷积核在和一个n通道的特征图(为方便理解,这里可以暂时理解为3通道的RGB输入图像)进行卷积运算时,可以看作是用这个卷积核作为一个滑块去“扫”这个特征图,卷积核里面的数就叫权重,这个特征图每个位置是被同样的卷积核“扫”的,所以权重是一样的,也就是共享。
3、分辨率(Resolution)
分辨率指的是输入模型的图像尺寸,即长宽大小。通常情况会根据模型下采样次数和最后一次下采样后feature map的分辨率来决定输入分辨率的大小(注:下采样通常指在数据处理中减少样本数量的过程),即:
从输入到最后一个卷积特征feature map的,整个过程是一个信息逐渐抽象化的过程,即网络学习到的信息逐渐由低级的几何信息转变为高级的语义信息,这个feature map的大小可以是3×3,5×5,7×7,9×9等等,太大会增加后续的计算量且信息抽象层次不够高,影响网络性能,太小会造成非常严重的信息丢失,如原始分辨率映射到最后一层的feature map有效区域可能不到一个像素点,使得训练无法收敛。
在ImageNet分类任务中,通常设置5次下采样,并且考虑到其原始图像大多数在300分辨率左右,所以把最后一个卷积特征大小设定为7×7,将输入尺寸固定为224×224×3。在目标检测任务中,很多采用的是416×416×3的输入尺寸,当然由于很多目标检测模型是全卷积的结构,通常可以使用多尺寸训练的方式,即每次输入只需要保证是32×的图像尺寸大小就行,不固定具体数值。但这种多尺度训练的方式在图像分类当中是不通用的,因为分类模型最后一层是全连接结构,即矩阵乘法,需要固定输入数据的维度。
4、网络深度(Depth)
神经网络的深度决定了网络的表达能力,它有两种计算方法,早期的backbone设计都是直接使用卷积层堆叠的方式,它的深度即神经网络的层数,后来的backbone设计采用了更高效的module(或block)堆叠的方式,每个module是由多个卷积层组成,它的深度也可以指module的个数,这种说法在神经架构搜索(NAS)中出现的更为频繁。通常而言网络越深表达能力越强,但深度大于某个值可能会带来相反的效果,所以它的具体设定需要不断调参得到。
5、网络宽度(Width)
宽度决定了网络在某一层学到的信息量,但网络的宽度指的是卷积神经网络中最大的通道数,由卷积核数量最多的层决定。通常的结构设计中卷积核的数量随着层数越来越多的,直到最后一层feature map数量达到最大,这是因为越到深层,feature map的分辨率越小,所包含的信息越高级,所以需要更多的卷积核来进行学习。通道越多效果越好,但带来的计算量也会大大增加,所以具体设定也是一个调参的过程。通常各层通道数会按照8×的倍数来确定,这样有利于GPU的并行计算。
scaling:缩放
6、下采样(Down-Sample)
下采样层有两个作用,一是减少计算量,防止过拟合,二是增大感受野,使得后面的卷积核能够学到更加全局的信息。下采样的设计有两种:
(1) 采用步长(stride)为2的池化层,如Max-pooling或Average-pooling,目前通常使用Max-pooling,因为它计算简单且最大响应能更好保留纹理特征;
(2) 采用步长(stride)为2的卷积层,下采样的过程是一个信息损失的过程,而池化层是不可学习的,用stride为2的可学习卷积层来代替pooling可以得到更好的效果,当然同时也增加了一定的计算量。
7、上采样(Up-Sampling)
在卷积神经网络中,由于输入图像通过卷积神经网络(CNN)提取特征后,输出的尺寸往往会变小,而有时我们需要将图像恢复到原来的尺寸以便进行进一步的计算(如图像的语义分割),这个使图像由小分辨率映射到大分辨率的操作,叫做上采样,它的实现一般有三种方式:
1)插值,一般使用的是双线性插值,因为效果最好,虽然计算上比其他插值方式复杂,但是相对于卷积计算可以说不值一提;
2)转置卷积又或是说反卷积,通过对输入feature map间隔填充0,再进行标准的卷积计算,可以使得输出feature map的尺寸比输入更大;
3)Max Unpooling,在对称的max pooling位置记录最大值的索引位置,然后在unpooling阶段时将对应的值放置到原先最大值位置,其余位置补0。
scaling:缩放
6、下采样(Down-Sample)
下采样层有两个作用,一是减少计算量,防止过拟合,二是增大感受野,使得后面的卷积核能够学到更加全局的信息。下采样的设计有两种:
(1) 采用步长(stride)为2的池化层,如Max-pooling或Average-pooling,目前通常使用Max-pooling,因为它计算简单且最大响应能更好保留纹理特征;
(2) 采用步长(stride)为2的卷积层,下采样的过程是一个信息损失的过程,而池化层是不可学习的,用stride为2的可学习卷积层来代替pooling可以得到更好的效果,当然同时也增加了一定的计算量。
7、上采样(Up-Sampling)
在卷积神经网络中,由于输入图像通过卷积神经网络(CNN)提取特征后,输出的尺寸往往会变小,而有时我们需要将图像恢复到原来的尺寸以便进行进一步的计算(如图像的语义分割),这个使图像由小分辨率映射到大分辨率的操作,叫做上采样,它的实现一般有三种方式:
1)插值,一般使用的是双线性插值,因为效果最好,虽然计算上比其他插值方式复杂,但是相对于卷积计算可以说不值一提;
2)转置卷积又或是说反卷积,通过对输入feature map间隔填充0,再进行标准的卷积计算,可以使得输出feature map的尺寸比输入更大;
3)Max Unpooling,在对称的max pooling位置记录最大值的索引位置,然后在unpooling阶段时将对应的值放置到原先最大值位置,其余位置补0。
标签:采样,卷积,feature,神经网络,图像,CNN,输入 From: https://www.cnblogs.com/Li-JT/p/18541483