目录
1.概念
2. 结构及每层详解
3. CNN特征
4. 卷积神经网络的流程
5.可变形卷积(DCN)
6.一些小问题
1. 1x1卷积作用
2. 卷积层和池化层有什么区别?
3.怎样才能减少卷积层参数量
4.瓶颈结构和沙漏结构
5.全连接、局部连接、全卷积与局部卷积
卷积神经网络(Convolutional Neural Networks, CNN),由纽约大学的 Yann Lecun 于 1998 年提出,其本质是一个多层感知机,成功的原因在于其所采用的局部连接和权值共享的方式:
卷积神经网络的核心思想: 其一是局部感受野,其二是权值共享,其三是 pooling 层,以此来达到简化网络参数并使得网络具有一定程度的位移、尺度、缩放、非线性形变稳定性。
局部感受野:由于图像的空间联系是局部的,每个神经元不需要对全部的图像做感受,只需要感受局部特征即可,然后在更高层将这些感受得到的不同的局部神经元综合起来就可以得到全局的信息了,这样可以减少连接的数目。
权值共享:不同神经元之间的参数共享可以减少需要求解的参数,使用多种滤波器去卷积图像就会得到多种特征映射。权值共享其实就是对图像用同样的卷积核进行卷积操作,也就意味着第一个隐藏层的所有神经元所能检测到处于图像不同位置的完全相同的特征。其主要的能力就能检测到不同位置的同一类型特征,也就是卷积网络能很好的适应图像的小范围的平移性,即有较好的平移不变性。
一个典型的卷积网络是由卷积层、汇聚层、全连接层交叉堆叠而成
输入层,输入图像;
卷积层,提取图像特征;
ReLU层:对图像特征图做整流从而激活图像;
池化层,缩小图像尺寸,降低运算量;
全连接层,将所有特征图得到的特征联合进行识别。
1) 数据输入层(0层)
输入层(lnput Layer)通常是输入卷积神经网络的原始数据或经过预处理的数据,可以是图像识别领域中原始三维的多彩图像,也可以是音频识别领域中经过傅利叶变换的二维波形数据,甚至是自然语言处理中一维表示的句子向量。以图像分类任务为例,输入层输入的图像一般包含RGB三个通道,是个由长宽分别为 H 和 W 组成的 3 维像素值矩阵 H X W X 3,卷积网络会将输入层的数据传递到一系列卷积、池化等操作进行特征提取和转化,最终由全连接层对特征进行汇总和结果输出。根据计算能力、存储大小和模型结构的不同,卷积神经网络每次可以批量处理的图像个数不尽相同,若指定输入层接收到的图像个数为 N ,则输入层的输出数据为 N X H X W X 3
归一化:将图像尺寸归一化到同样的范围,减少不同维度数据取值范围的不同,防止其不同量级的值的差异干扰最终结果。
去均值:每个数据减去均值,相当于把样本中心点变为坐标系中的原点。
PCA:主成分分析法,对数据进行降维操作,通过正交变换将一组可能存在相关性的变量数据转换为一组线性不相关的变量。
白化:对数据各个特征轴上的幅度归一化。
2) 卷积层
卷积神经网路中每层卷积层由若干卷积单元组成,每个卷积单元的参数都是通过反向传播算法优化得到的。卷积运算的目的是提取输入的不同特征,第一层卷积层可能只能提取一些低级的特征如边缘、线条和角等层级,更多层的网络能从低级特征中迭代提取更复杂的特征。
这一层的核心是利用卷积核对图像不断做卷积操作,提取特征。
卷积层的基本属性
卷积核(Kernel) : 卷积操作的感受野,直观理解就是一个滤波矩阵,普遍使用的卷积核大小为 3 X3、5X5等;
步长(Stride) : 卷积核遍历特征图时每步移动的像素,如步长为 1 则每次移动 1个像素,步长为 2则每次移动 2 个像素,以此类推:
填充(Padding): 处理特征图边界的方式,一般有两种,一种是对边界外完全不填充,只对输入像素执行卷积操作,这样会使输出特征图的尺寸小于输入特征图尺寸,另一种是对边界外进行填充 (-般填充为 0),再执行卷积操作,这样可使输出特征图的尺寸与输入特征图的尺寸一致;
通道 (Channel) : 卷积层的通道数 (层数)
3 )激活层
激活层(Activation Layer)负责对卷积层抽取的特征进行激活,由于卷积操作是由输入矩阵与卷积核矩阵进行相差的线性变化关系,需要激活层对其进行非线性的映射。激活层主要由激活函数组成,即在卷积层输出结果的基础上嵌套一个非线性函数,让输出的特征图具有非线性关系.
4)池化层(降采样)
池化层(Pooling layer),通常在卷积层之后会得到维度很大的特征,将特征切成几个区域,取其最大值或平均值,得到新的、维度较小的特征。
经过池化操作,图像像素大大缩小,参与到运算中的像素就会减少,运算效率就会大大提高。所以池化层的主要目的就是对图像进行缩放,提高运算效率。
如果池化对图像的尺寸压缩太大,就会导致某些图像特征丢失,影响图像识别的准确度。所以我们的窗口一般都是行列均为2的正方形窗口。池化层还有一个辅助的目的,就是通过池化操作,去除一些噪点,减少过拟合的情况发生。
主要作用
5) 全连接层
全连接层( Fully-Connected layer), 把所有局部特征结合变成全局特征,采用 softmax 全连接,得到的激活值即卷积神经网络提取到的图片特征。全连接层计算量实在是太大了,所以一般在全连接层之前要使用池化层对图像进行放缩。
6) 输出层
卷积神经网络中输出层的上游通常是全连接层,因此其结构和工作原理与传统前馈神经网络中的输出层相同。输出层的形式面向具体任务。对于图像分类问题,输出层使用逻辑函数或归一化指数函数(softmax function)输出分类标签。在物体识别 (object detection) 问题中,输出层可设计为输出物体的中心坐标、大小和分类 。在图像语义分割中,输出层直接输出每个像素的分类结果。
1)具有一些传统技术所没有的优点:良好的容错能力、并行处理能力和自学习能力,可处理环境信息复杂,推理规则不明确情况下的问题,允许样品有较大的缺损、畸变,自适应性能好,具有较高的分辨率。它是通过结构重组和减少权值将特征抽取功能融合进多层感知器,省略识别前复杂的图像特征抽取过程。
2)泛化能力要显著优于其它方法,卷积神经网络已被应用于模式分类,物体检测和物体识别等方面。
3)是一个前馈式神经网络,能从一个二维图像中提取其拓扑结构,采用反向传播算法来优化网络结构,求解网络中的未知参数。
4)CNN 通过挖掘数据中的空间上的相关性,来减少网络中的可训练参数的数量,达到改进前向传播网络的反向传播算法效率。CNN 中层次之间的紧密联系和空间信息使得其特别适用于图像的处理和理解,并且能够自动的从图像抽取出丰富的相关特性。
5)CNN 通过结合局部感知区域、共享权重、空间或者时间上的降采样来充分利用数据本身包含的局部性等特征,优化网络结构,并且保证一定程度上的位移和变形的不变性。
6)CNN 是一种深度的监督学习下的机器学习模型,具有极强的适应性,善于挖掘数据局部特征,提取全局训练特征和分类,它的权值共享结构网络使之更类似于生物神经网络,在模式识别各个领域都取得了很好的成果。
1)参数初始化:
在开始训练前,所有的权都应该用一些不同的随机数进行初始化。
“小随机数”用来保证网络不会因权值过大而进入饱和状态,从而导致训练失败;
“不同”用来保证网络可以正常地学习。实际上,如果用相同的数去初始化权矩阵,则网络无学习能力。
2)训练过程包括四步
① 第一阶段:前向传播阶段
从样本集中取一个样本,输入网络
计算相应的实际输出;在此阶段信息从输入层经过逐级的变换,传送到输出层,这个过程也是网络在完成训练之后正常执行时执行的过程
② 第二阶段:后向传播阶段
计算实际输出与相应的理想输出的差
按照极小化误差的方法调整权值矩阵
3)调参
依次计算出各权值的调整量和阈值的调整量;调整权值和调整阈值;
4)精度要求
判断指标是否满足精度要求,如果不满足,则返回 (3),继续迭代;如果满足就进入下一步;
5)训练结束,将权值和阈值保存在文件中。
论文来源:https://openaccess.thecvf.com/content_ICCV_2017/papers/Dai_Deformable_Convolutional_Networks_ICCV_2017_paper.pdf
论文创新点: 可变形卷积和可变形RoI池化
5.1 为什么提出DCN
我们知道卷积核的目的是为了提取输入物的特征。我们传统的卷积核通常是固定尺寸、固定大小的(例如3x3,5x5,7x7.)。这种卷积核存在的最大问题就是,对于未知的变化适应性差,泛化能力不强。卷积单元对输入的特征图在固定的位置进行采样;池化层不断减小着特征图的尺寸;RoI池化层产生空间位置受限的RoI。
同一CNN层的激活单元的感受野尺寸都相同,这对于编码位置信息的深层卷积神经网络并不可取,因为不同的位置可能对应有不同尺度或者不同形变的物体,这些层需要能够自动调整尺度或者感受野的方法。再比如,目标检测虽然效果很好但是都依赖于基于特征提取的边界框,这并不是最优的方法,尤其是对于非网格状的物体而言
(a) 标准卷积的规则采样网格(绿点)。(b) 在可变形卷积中具有增强的偏移(浅蓝色箭头)的变形采样位置(深蓝色点)。(c) (d)是(b)的特例,表明可变形卷积推广了尺度、(各向异性)纵横比和旋转的各种变换。
使用两层对标准卷积(a)中的固定感受野和可变形卷积(b)中的自适应感受野进行图示。
顶部:顶部特征地图上的两个激活单元,位于两个不同比例和形状的对象上。激活来自3×3过滤器。中间:前面特征图上3×3滤波器的采样位置。另外两个激活单元突出显示。底部:前一特征图上两级3×3滤波器的采样位置。
可变形卷积在采样时可以更贴近物体的形状和尺寸,而标准卷积无法做到这一点。
可变形卷积的学习过程
可形变卷积是基于一个平行网络学习offset(偏移),使得卷积核在input feature map的采样点发生偏移,集中于我们感兴趣的区域或者目标。
1.原始图片batch (大小为b*h*w*c),记为U,经过一个普通卷积,卷积填充为same,即输出输入大小不变,对应的输出结果为(b*h*w*2c),记为V,输出的结果是指原图片batch中每个像素的偏移量(偏移与y偏移,因此为2c)。
2.将U中图片的像素索引值与V相加,得到偏移后的position(即在原始图片U中的坐标值),要将position值限定为图片大小以内position的大小为(b*h*w*2c),position只是一个坐标值,而目还是float类型的,我们需要这些float类型的坐标值获取像素
3.例,取一个坐标值(a,b),将其转换为四个整数,floor(a),ceil(a), floor(b),ceil(b),将这四个整数进行整合得到四对坐标 (floor(a),floor(b),((floor(a),ceil(b), ((ceila),floor(b), ((ceila),ceilb)。这四对坐标每个坐标都对应U中的一个像素值,而我们需要得到(a,b)的像素值,这里采用双线性差值的方式计算(一方面得到的像素准确,另一方面可以进行反向传播)。
4.在得到position的所有像素后,即得到了一个新图片M,将这个新图片M作为输入数据输入到别的层中,如普通卷积.
可形变卷积这种形变不是发生在卷积核,而是发生在原图产生了offset偏移,在经过正常卷积就达到可变卷积的效果,也就是特征偏移+正常卷积.
https://zhuanlan.zhihu.com/p/62661196
https://blog.csdn.net/P_LarT/article/details/85042264
https://blog.csdn.net/jiangqixing0728/article/details/126269423
实现信息的跨通道交互和整合,
对卷积核通道数进行降维和升维,减小参数量
1 x 1卷积 + 激活函数可以增加非线性,提升网络表达能力
卷积层和池化层在结构上具有一定的相似性,都是对感受野内的特征进行提取,并且根据步长设置获取到不同维度的输出,但是其内在操作是有本质区别的。
减少卷积层参数量的方法可以简要地归为以下几点:
瓶颈结构是在GoogLeNet中提出的,而后的ResNet、MobileNet等很多网络也采用并发展了这个结构,瓶颈结构的初衷是为了降低大卷积层的计算量,即在计算比较大的卷积层之前,先用一个 1 x 1卷积来压缩大卷积层输入特征图的通道数目,以减少计算量,在大卷积层完成计算之后,根据实际票要,有时候会再次使用一个 1 x 1 卷进来将大卷积层输出特征图的通道数目复原,由此,瓶颈结构般是一个小通道数的1 x 1卷积层,接一个较大卷积层,后面可能会再跟一个大通道数的 1 x 1卷积。
瓶颈结构是卷积神经网络中比较基础的模块,它可以用更小的计算代价达到与之前相似甚至更好的效果,因为瓶颈结构会增加网络层数,所以特征提取能力可能也会有相应提升,瓶颈结构基本上可以用于所有的卷积神经网络中场景,包括物体检测和分割、生成对抗网络等大方向。
沙漏结构也是卷积神经网络中比较基础的模块,他类似于瓶颈结构,但尺度要更大,涉及的层也更多,沙漏结构一般包括以下两个分支。
自底向上 (bottom-up)分支,利用卷积池化等操作,将特征图的尺寸逐层压缩(通道受可能增加),类似于自编码器中的编码器 (encoder)。
自顶向下 (top-down)分支,利用反卷积或插值等上采样操作,将特征图的尺寸逐渐扩大(通道数可能降低),类似于自编码其中的解码器 (decoder)
大多数神经网络中高层网络通常会采用全连接层(Global Connected Layer),通过多对多的连接方式对特征进行全局汇总,可以有效地提取全局信息。但是全连接的方式需要大量的参数,是神经网络中最占资源的部分之,因此就需要由局部连接(Local Connected Layer),仅在局部区域范围内产生神经元连接,能够有效地减少参数量。根据卷积操作的作用范围可以分为全卷积(Global Convolution)和局部卷积(Local Convolution)。实际上这里所说的全卷积就是标准卷积,即在整个输入特征维度范围内采用相同的卷积核参数进行运算,全局共享参数的连接方式可以使神经元之间的连接参数大大减少:局部卷积又叫平铺卷积(Tiled Convolution)或非共亨卷积(Unshared Convolution),是局部连接与全卷积的折衷。四者的比较如下所示
全连接。层间神经元完全连接,每个输出神经元可以获取到所有输入神经元的信息,有利于信息汇总,常置于网络末层,连接与连接之间独立参数,大量的连接大大增加模型的参数规模。
局部连接。层间神经元只有局部范围内的连接,在这个范围内采用全连接的方式,超过这个范围的神经元则没有连接,连接与连接之间独立参数,相比于全连接减少了感受域外的连接,有效减少参数规模
全卷积。层间神经元只有局部范围内的连接,在这个范围内采用全连接的方式,连接所采用的参数在不同感受域之间共享,有利于提取特定模式的特征,相比于局部连接,共用感受域之间的参数可以进一步减少参数量
局部卷积。层间神经元只有局部范围内的连接,感受域内采用全连接的方式,而感受域之间间隔采用局部连接与全卷积的连接方式,相比与全卷积成倍引入额外参数,但有更强的灵活性和表达能力,相比于局部连接,可以有效控制参数量。
局部卷积的应用
并不是所有的卷积都会进行权重共享,在某些特定任务中,会使用不权重共享的卷积。下面通过人脸这一任务来进行讲解。在读人脸方向的一些paper时,会发现很多都会在最后加入一个LocalConnected Conv,也就是不进行权重共享的卷积层。总的来说,这一步的作用就是使用3D模型来将人脸对齐,从而使CNN发挥最大的效果。
使用参数不共享的卷积核有如下原因:
对齐的人脸图片中,不同的区域会有不同的统计特征,因此并不存在特征的局部稳定性,所以使用相同的卷积核会导致信息的丢失。
不共享的卷积核并不增加inference时特征的计算量,仅会增加训练时的计算量。