深度学习知识大杂烩

前言:本文讲述深度学习神经网络网络的一些基础知识,以及部分网络特点,为后续学习和研究神经网络铺路。

本文内容:

  1. 卷积
  2. 池化
  3. Relu激活函数
  4. LRN方法
  5. Dropout方法
  6. 损失函数
  7. SGD优化器
  8. Focal loss函数
  9. RPN算法
  10. FPN网络
  11. Network in Network结构
  12. 批量标准化
  13. Inception模型
  14. 残差网络
  15. YOLO

卷积:

卷积操作其实就类似于矩阵相乘,每个卷积核与原图的卷积区域对应位置相乘再相加后得到一个结果,这个结果就是卷积区域中心的输出值。以第一层卷积为例,图像卷积前分辨率为227x227,图像通道数为3,经过96个卷积核(每个卷积核对图像的3个通道进行卷积,卷积完成后将这3个通道图相加得到一个卷积图像),每个卷积核大小为11x11,卷积步长为4,得到卷积后图像分辨率为55x55(图像经卷积后分辨率变化公式: A R = R e s o l u t i o n − K e r n e l S i z e s t r i d e + 1 AR = \frac{Resolution-KernelSize}{stride}+1 AR=strideResolutionKernelSize+1,其中AR是卷积后图像分辨率大小,Resolution卷积前图像分辨率大小(包括padding操作),KernelSize卷积核大小,stride卷积步长),通道数为96。

卷积种类:
(一)一般卷积:
概念:与原图进行局部对应相乘再累加。
作用:有效提取原图的特征信息,有利于神经网络的检测,识别,分类等等。
(二)转置卷积:
概念:对卷积核信息,以及卷积结果进行保留,之后对卷积结果进行插值补0,直到卷积后与原图大小相等,再对卷积核进行转置,最后把转置后的卷积核去卷积插值补0后的图最大限度得到原图相似图。
作用:对特征图进行上采样,提取更多特征信息。
(三)空洞卷积:
概念:进行卷积是对卷积核相邻距离增大,以阔宽感受野。
如3x3卷积扩张率为1原感受野是3x3,此时扩张率为2感受野则是5x5。若想表达7x7conv,可以看成是全局进行扩张率为1卷积核3x3卷积,之后再扩张率为3卷积核3x3卷积;此时参数为 3 ∗ 3 + 3 ∗ 3 = 18 3*3+3*3=18 33+33=18,然而要是7x7卷则是49个参数。
作用:增大感受野,能提取到更有价值信息,减少参数,降低模型复杂度,防止模型过拟合。
(四)分组卷积:
概念:对深层特征图进行分段,分别对每段特征图进行卷积。
若输入256通道,输出256通道,每个通道用3x3卷积,所需参数是 25 6 2 ∗ 3 ∗ 3 256^2*3*3 256233,此时group=8,则所需参数是 8 ∗ 3 2 2 ∗ 3 ∗ 3 8*32^2*3*3 832233
作用:减少模型参数,抑制模型过拟合。
(五)可分离卷积:
1、空间可分离卷积:
概念:由矩阵相乘原理而来,一个特征图A先经过一个3x1的卷积核卷积得到B,将B经1x3卷积核卷积得到C,使得A有经一个3x3卷积核卷积的效果。其数学表达为: s h a p e ( n ∗ 1 ) . d o t ( s h a p e ( 1 ∗ n ) ) = n ∗ n shape(n*1).dot(shape(1*n))=n*n shape(n1).dot(shape(1n))=nn
作用:降低网络的参数、计算力,使网络复杂度降低,防止过拟合。
2、深度可分离卷积:
概念:一张输入的特征图为28x28x16,输出为32通道。用16个3×3大小的卷积核(1通道)分别与输入的16通道的数据做卷积【depthwise(逐层)】,接着用32个1×1大小的卷积核(16通道)在这16个特征图进行卷积运算,将16个通道的信息进行融合【pointwise(逐像素)】。使之达到32个3x3大小的卷积核每个都卷积16个特征图通道的效果。
作用:
(1)减少了参数,降低了计算量,加快训练速度;
(2)卷积先只考虑区域,然后再考虑通道。实现了通道和区域的分离操作,区域与通道的融合结果。


池化:

普通池化:
当我们描述一个大的图像的时候可以对不同位置的特征进行聚合统计(可以计算图像上以某个特定特征为中心的一个区域的平均值或最大值作为该特征的池化结果值),这种聚合统计的操作就称之为池化(池化有平均池化和最大池化),这种统计方式不仅可以降低纬度,还可以防止过拟合。以第一个池化层为例,图像卷积前分辨率为55x55,图像通道数为96,经过池化尺寸为3x3的最大池化操作,池化步长为2,得到池化后的图像分辨率为27x27(图像经池化后分辨率变化公式: A R = R e s o l u t i o n − P o o l S i z e s t r i d e + 1 AR = \frac{Resolution-PoolSize}{stride}+1 AR=strideResolutionPoolSize+1,其中AR是池化后图像分辨率大小,Resolution池化前图像分辨率大小,PoolSize池化尺寸,stride池化步长),通道数为96。

Overlapping Pooling(覆盖池化):
Overlapping Pooling就是池化有部分是重叠的即stride < pool_size,其中strid是步长,pool_size是池化尺寸,该操作使得模型可以得到更准确的结果,而且不容易过拟合(过拟合是指过于紧密或精确地匹配特定数据集,以致于无法良好地拟合其他数据或预测未来的观察结果的现象)。


激活函数(Relu):

在多层神经网络中,上层节点的输出和本层节点的输入之间具有一个函数关系,这个函数称为激活函数(又称激励函数),本实验网络使用Relu激活函数(函数式子为: R e l u = m a x ( 0 , x ) Relu = max(0,x) Relu=max(0,x)),网络使用该函数是因为其梯度不存在饱和(非常接近于0),可以使网络结构进行深层叠加而损失函数不容易出现无法收敛的情况。


LRN方法(Local Response Normalization,局部响应归一化):

局部响应归一化是对局部神经元的活动创建竞争机制,使得其中响应比较大的值变得相对更大,并抑制其他反馈较小的神经元,有助于提高模型的泛化能力(AlexNet网络的5层卷积中只有第三、四层没有用到LRN)。


Dropout方法:

Dropout可以作为训练深度神经网络的一种优化方法供选择。在每层节点训练时,通过忽略掉一部分的神经元节点(让一部分的隐层节点激活值为0)来减少神经元(隐层节点)间的相互作用(指某些检测器依赖其他检测器才能发挥作用),以至于可以明显地减少过拟合现象。


损失函数(categorical_crossentropy):

多分类交叉熵损失函数(categorical_crossentropy)是loss算法的一种,一般用在多分类问题上,其表达式为 L = − ∑ i = 1 n ∑ t = 1 c y i , t ∗ log ⁡ y ^ i , t L = - \displaystyle\sum_{i=1}^{n}\displaystyle\sum_{t=1}^{c}y_{i,t}*\log\hat{y}_{i,t} L=i=1nt=1cyi,tlogy^i,t(其中n为样本数,c为label类别, y i , t y_{i,t} yi,t为真实值, y ^ i , t \hat{y}_{i,t} y^i,t为预测值)。


优化器(SGD):

优化器就是对梯度进行优化更新的,这样不仅能使模型能找到最优点,而且还能大大提升模型收敛速度,当然不同的优化器找到的最优点可能不同,有可能是局部最优点,这个是决定模型好坏的重要因素之一,所以优化器怎么选对模型的好坏起着重要的作用。SGD(Stochastic Gradient Descent,随机梯度下降)每次更新时对单个个样本进行梯度更新,对于很大的数据集来说,可能会有相似的样本,而SGD不容易学习到相似的样本,而且收敛比较快,可以新增样本,因此本实验的AlexNet网络模型的优化器选择了SGD。


Focal loss函数

概念:这个损失函数是在标准交叉熵损失基础上修改得到的。这个函数可以通过减少易分类样本的权重,使得模型在训练时更专注于难分类的样本。一般目标检测网络中正样本远远小于负样本的候选框,在双阶目标检测中利用了RPN网络、selective search算法等去降低负样本的候选框个数,但在单阶中正负样本极不平衡,训练过程中负样本引起的关注比正样本要多很多,最终导致模型对正样本识别率降低。
前身:
在分类问题中用到交叉熵函数作为损失函数( C E l o s s CE_{loss} CEloss) C E l o s s = − y ∗ l o g ( a ) − ( 1 − y ) ∗ l o g ( 1 − a ) CE_{loss}=- y*log(a)-(1-y)*log(1-a) CEloss=ylog(a)(1y)log(1a)
在loss公式中使用与目标存在概率成反比的系数对其进行较正(Balanced_CE_loss) B _ C E = − λ ∗ ( y ∗ l o g a + ( 1 − y ) ∗ l o g ( 1 − a ) ) B\_CE =-\lambda*( y*loga+(1-y)*log(1-a)) B_CE=λ(yloga+(1y)log(1a))
原始focal loss函数: f o c a l l o s s = − ( 1 − a ) γ ∗ l o g ( a ) focal_{loss} = -(1-a)^\gamma*log(a) focalloss=(1a)γlog(a)
最终focal loss函数: f o c a l l o s s = − λ ∗ ( 1 − a ) γ ∗ l o g ( a ) focal_{loss} = -\lambda*(1-a)^\gamma*log(a) focalloss=λ(1a)γlog(a)
注: α \alpha α表示网络预测类别的概率、 y y y表示标签、 γ \gamma γ表示调节因子、 λ \lambda λ表示平衡因子

作用:
focal loss所加的指数式系数可对正负样本对loss的贡献自动调节,当某样本类别比较明确,它对整体loss的贡献就比较少;反之,则对整体loss的贡献就相对偏大。这样得到的loss最终将诱导模型去努力分辨那些难分的目标类别。


RPN算法(region proposals network):

组成:
RPN网络分为2条线,上面一条通过softmax分类anchors获得positive和negative分类,
下面一条用于计算对于anchors的bounding box regression偏移量,以获得精确的proposal。
而最后的Proposal层则负责综合positive anchors和对应bounding box regression偏移量来获取精准的proposals,同时剔除太小和超出边界的proposals。


FPN网络(feature pyramid networks,特征金子塔网络):

需解决的问题:网络的深度(对应到感受野)与总stride通常是一对矛盾的东西,常用的网络结构对应的总stride一般会比较大,而图像中的小物体甚至会小于stride的大小,造成的结果就是小物体的检测性能急剧下降。

解决思路:FPN是实现多尺度特征融合,把低分辨率、高语义信息的高层特征和高分辨率、低语义信息的低层特征进行自上而下的侧边连接,使得所有尺度下的特征都有丰富的语义信息。
在这里插入图片描述
组成:
一个自底向上的线路,一个自顶向下的线路,横向连接(lateral connection),每个阶段都会有特征激活输出;
自底向上:是网络的前向过程,采用3x3的卷积核对feature map进行卷积,在经下采样后大小会变为1/2倍;
自顶向下:上采样过程(upsampling,采用内插值方法feature map大小变为2倍),融合之后还会再采用3x3的卷积核对每个融合结果进行卷积【消除上采样的混叠效应】;
应用:目标框地位【有利于准确地检测目标】


Network in Network结构(包含了mlpconv结构):

亮点一:MLP卷积层
先进行一次普通的卷积(比如3x3),紧跟再进行一次1x1的卷积。
普通的卷积:把每一个特征层中的每一个元素展平排列;
1x1的卷积:对每一个特征层中的同一个位置的一个元素进行加权线性重组;
亮点二:全局均值池化
在最后一层卷积后进入全连接时,把全连接层换成全局均值池化层来提取每个特征图的特征;
每个特征图一整张图片进行全局均值池化,每张特征图都可以得到一个输出【避免过拟合】。


批量标准化【BN,Batch Normalization】:

原因:随着网络深度加深或者在训练过程中,其分布逐渐发生偏移或者变动,整体分布逐渐往非线性函数的取值区间的上下限两端靠近,导致反向传播时低层神经网络的梯度消失。

操作过程:
BN就是通过一定的规范化手段,把每层神经网络任意神经元这个输入值y【y=wx+b】的分布强行拉回到均值为0方差为1的标准正态分布,其实就是把越来越偏的分布强制拉回比较标准的分布。在标准分布中有64%的概率x其值落在[-1,1]的范围内,在两个标准差范围内,也就是说95%的概率x其值落在了[-2,2]的范围内,而sigmoid函数在这两个范围内的梯度相对其他范围内梯度大很多,避免了梯度饱和(梯度消失)情况。
作用:
(1)不仅仅极大提升了训练速度,收敛过程大大加快;
(2)还能增加分类效果,一种解释是这是类似于Dropout的一种防止过拟合的正则化表达方式,所以不用Dropout也能达到相当的效果;
(3)另外调参过程也简单多了,对于初始化要求没那么高,而且可以使用大的学习率等


Inception模型【卷积单元】:

Inception核心思想:通过增加网络深度和宽度的同时减少参数、增强准确率、抑制过拟合的方法解决问题。
原始模型:
组成:1x1,3x3,5x5的卷积核与3x3最大池化堆叠在一起。
作用:
(1)增加网络宽度;
(2)增加网络对尺度的适应性;
(3)提升准确率且不至于过拟合。

Inception-v1模型:【原模型上改进】:
改进原因:由于特征图厚度大,导致参数增多,计算量大;
改进方法:在3x3、5x5卷积前,和最大池化后加上一个1x1的卷积核;
1x1卷积作用:降低特征输出的维度,即降低特征图厚度,使计算量更小。

Inception-v2模型:【Inception-v1改进】
改进原因:网络加深梯度消失问题,网络稳定性问题,计算量问题。
改进方法:
1、在卷积之后加入BN层(批量标准化),减少内变协变量的移动问题(卷积结果分布不均,偏离正太分布);
2、使用了梯度截断技术;增强了网络稳定性;
3、使用两个3x3conv替代模块中的5x5conv。使得参数减少,计算量降低,计算速度提升。

Inception-v3模型:【Inception-v2改进】
改进原因:网络参数太多,计算量太大。
改进方法:
1、利用空间可分离卷积将5x5分成1x5、5x1对输入矩阵进行卷积运算(3x3的也一样),这使得参数更加变少,算力降低。

Inception-v4模型:【Inception-v3改进】
改进原因:网络变深出现梯度问题,信息量问题。
改进方法:
1、结合了残差连接技术的作用对模型结构特性进行了优化调整。防止了梯度消失问题;
2、由Inception-v3的4个卷积变成6个卷积(主要对3x3卷积进行空间可分离后相连;对池化层结果进行卷积)。


残差网络【ResNet】:

亮点:
1、残差连接(residual connection)

残差连接原理:
在标准前馈卷积网络上加一个跳跃,会产生两个卷积结果,再对卷积结果进行addition。【注意:跳跃时,a.一条线输入的是该卷积层,b.另一条线输入的是该卷积结果激活后】由于b线需要卷积,所以梯度相对a要小得多,所以引入scale,在addition时是a+b x scale。
作用:不会明显提高模型的精准度,而是加快训练收敛,减少训练时间,将网络由串行改为并行。
残差网络原理:
在传播过程中,两条线的损失会相加(addition)。b线的损失会随层数的变深,梯度会越来越小,a线是由addition直接连到Input,所以还是会保留additionde 梯度。这样相加后梯度就不会太小。


YOLO:

1、相对于rcnn,fast-rcnn,faster-rcnn而言,它把候选框的检测和目标识别归为一步做;
2、yolo使用darknet网络进行特征提取(使用了Roi Align对候选框进行池化);
2、检测图像时,它将图像分成SxS个格式;
3、在训练时,主要对每个格子检测出的目标点与标签区域的中心位置点以及宽高进行比较,得到的偏移值都归一化到 [0,1];
4、输出时,每个格子会输出所预测到的B个bounding box信息,和C个物体属于某种类别的概率信息。输出维度即是SxSx(Bx5 + C);
5、每个格子虽检测到B个bounding box但输出的检测物体只是IOU最高的那个,这个导致有些物体检测不出,比如一个格子有两个目标;
6、yolo损失函数是位置误差+iou误差+分类误差;
7、在box的求损失时,小box的边框偏移和大box边框偏移的值所产生的效果是不同的;当偏移量相同时,对小box精准度的影响要比大box要大得多。所以yolo为了缩小小box和大box之间偏移量所产生影响的差距。将标签box和预测box的width和height取平均再算偏移loss。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值