Flattening:类型为:Flatten

基于某个axis进行偏平的意思,如 axis = 1 ,fattens an input of shape n * c * h * w to a simple vector output of shape n * (c*h*w))

Reshape:(重新调整维度),类型为:Reshape

在不改变数据的情况下,改变输入的维度

layer {  
    name: "reshape"  
    type: "Reshape"  
    bottom: "input"  
    top: "output"  
    reshape_param {  
      shape {  
        dim: 0  # copy the dimension from below  
        dim: 2  
        dim: 3  
        dim: -1 # infer it from the other dimensions  
      }  
    }  
  }  

有一个可选的参数组shape,用于指定blob数据的各维的值(bolb是一个四维的数据:n*c*w*h)。

dim:0  表示维度不变,即输入和输出是相同的维度。

dim:2 或 dim:3 将原来的维度变成2或3

dim:-1 表示由系统自动计算维度。数据的总量不变,系统会根据blob数据的其它三维来自动计算当前维的维度值 。

假设原数据为:64*3*28*28, 表示64张3通道的28*28的彩色图片

经过reshape变换:

CNN 各layer汇总(flatten, concat, slice, dropout, pooling, overlapping pooling, SPP, relu,leaky relu...)
reshape_param {  
      shape {  
        dim: 0   
        dim: 0  
        dim: 14  
        dim: -1   
      }  
    }  
CNN 各layer汇总(flatten, concat, slice, dropout, pooling, overlapping pooling, SPP, relu,leaky relu...)

输出数据为:64*3*14*56,系统自己算的。blob里面的数据量不变,知道三个维度,另外一个就知道了

Cocatenation(把多个输入可以串联起来):类型为:Concat

在某个维度,将输入的layer组合起来,是slice的逆过程

Slicing(可以对输入进行切片)类型为:Slice

Slice layer 的作用是将bottom按照需要分解成多个tops。(与split layer的不一样在于spliit的作用是将bottom复制多份,输出到tops)
首先我们先看一下slice layer 在prototxt里面的书写

layer {
  name: "slice"
  type: "Slice"
  bottom: "input"
  top: "output1"
  top: "output2"
  top: "output3"
  top: "output4"
  slice_param {
    axis: 1
    slice_point: 1
    slice_point: 3
    slice_point: 4
  }
}

这里假设input的维度是N*5*H*W,tops输出的维度分别为N*1*H*W N*2*H*WN*1*H*WN*1*H*W 。
这里需要注意的是,如果有slice_point,slice_point的个数一定要等于top的个数减一。 
axis表示要进行分解的维度。 
slice_point的作用是将axis按照slic_point 进行分解。 
slice_point没有设置的时候则对axis进行均匀分解。

Elementwise Operations(类型为Eltwise), Argmax(类型为ArgMax), Softmax(类型为Softmax),

Mean-Variance Normalization(类型为MVN)

 

Dropout(防止过拟合的trick):类型为Dropout

可以随机让网络某些隐含层节点的权重不工作

layer {  
  name: "drop7"  
  type: "Dropout"  
  bottom: "fc7-conv"  
  top: "fc7-conv"  
  dropout_param {  
    dropout_ratio: 0.5  
  }  
}layer {  
  name: "drop7"  
  type: "Dropout"  
  bottom: "fc7-conv"  
  top: "fc7-conv"  
  dropout_param {  
    dropout_ratio: 0.5  
  }  
}  

只需要设置一个dropout_ratio就可以了。 

Pooling

1.  一般池化(General Pooling)

池化作用于图像中不重合的区域(这与卷积操作不同),我们定义池化窗口的大小为sizeX,即下图中红色正方形的边长,定义两个相邻池化窗口的水平位移/竖直位移为stride。一般池化由于每一池化窗口都是不重复的,所以sizeX=stride,最常见的池化操作为平均池化mean pooling和最大池化max pooling:

平均池化:计算图像区域的平均值作为该区域池化后的值。

最大池化:选图像区域的最大值作为该区域池化后的值。参考图[2]。

2,重叠池化(OverlappingPooling)

重叠池化正如其名字所说的,相邻池化窗口之间会有重叠区域,此时sizeX>stride。

论文中,作者使用了重叠池化,其他的设置都不变的情况下, top-1和top-5 的错误率分别减少了0.4% 和0.3%。[“Imagenet classification with deep convolutional neural networks,”in NIPS,2012]。

3. 空金字塔池化(Spatial Pyramid Pooling) 

空间金字塔池化可以把任何尺度的图像的卷积特征转化成相同维度,这不仅可以让CNN处理任意尺度的图像,还能避免cropping和warping操作,导致一些信息的丢失,具有非常重要的意义。

一般的CNN都需要输入图像的大小是固定的,这是因为全连接层的输入需要固定输入维度,但在卷积操作是没有对图像尺度有限制,所有作者提出了空间金字塔池化,先让图像进行卷积操作,然后转化成维度相同的特征输入到全连接层,这个可以把CNN扩展到任意大小的图像。

空间金字塔池化的思想来自于Spatial Pyramid Model,它一个pooling变成了多个scale的pooling。用不同大小池化窗口作用于卷积特征,我们可以得到1X1,2X2,4X4的池化结果,由于conv5中共有256个过滤器,所以得到1个256维的特征,4个256个特征,以及16个256维的特征,然后把这21个256维特征链接起来输入全连接层,通过这种方式把不同大小的图像转化成相同维度的特征,后面通常接FC。

对于不同的图像要得到相同大小的pooling结果,就需要根据图像的大小动态的计算池化窗口的大小和步长。假设conv5输出的大小为a*a,需要得到n*n大小的池化结果,可以让窗口大小sizeX为CNN 各layer汇总(flatten, concat, slice, dropout, pooling, overlapping pooling, SPP, relu,leaky relu...),步长为CNN 各layer汇总(flatten, concat, slice, dropout, pooling, overlapping pooling, SPP, relu,leaky relu...) 。具体示意图参考博客[2]

SPP其实就是一种多个scale的pooling,可以获取图像中的多尺度信息;在CNN中加入SPP后,可以让CNN处理任意大小的输入,这让模型变得更加的flexible。

参考Kaiming  He:Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition,2014

4,Global average Pooling

global average pooling 这个概念出自于 network in network ,主要是用来解决全连接的问题,其主要是是将最后一层的特征图进行整张图的一个均值池化,形成一个特征点,将这些特征点组成最后的特征向量进行softmax中进行计算。举个例子:

假如,最后的一层的数据是10个6*6的特征图,global average pooling是将每一张特征图计算所有像素点的均值,输出一个数据值,

这样10 个特征图就会输出10个数据点,将这些数据点组成一个1*10的向量的话,就成为一个特征向量,就可以送入到softmax的分类中计算了。

原文中介绍这样做主要是进行全连接的替换,减少参数的数量,这样计算的话,global average pooling层是没有数据参数的,这也与network in network 有关,其文章中提出了一种非线性的 类似卷积核的mlpconv的感知器的方法,计算图像的分块的值可以得到空间的效果,这样就取代了pooling的作用,但是会引入一些参数,但是为了平衡,作者提出了使用global average pooling。

5,ReLU和LeakyReLU区别

1、ReLU(Rectified Line Unit,ReLU):修正线性单元,神经网络中常用的激活函数。ReLU的输入是x,当x>0, 其梯度不为0, 可用于权重更新;当x<0, 其梯度为0, 权重无法更新,后续训练中处于静默状态(学习速率变慢,神经元处于不学习状态)。

函数图像:

CNN 各layer汇总(flatten, concat, slice, dropout, pooling, overlapping pooling, SPP, relu,leaky relu...)

表达式:

(1)前向过程:ReLU(x)=max(0,x)

(2)后向传播:

a) 将ReLU看作神经网络中的一层,设第CNN 各layer汇总(flatten, concat, slice, dropout, pooling, overlapping pooling, SPP, relu,leaky relu...)层输出是CNN 各layer汇总(flatten, concat, slice, dropout, pooling, overlapping pooling, SPP, relu,leaky relu...), 然后输入ReLU激活函数后输出是CNN 各layer汇总(flatten, concat, slice, dropout, pooling, overlapping pooling, SPP, relu,leaky relu...)

b)设损失函数L关于第CNN 各layer汇总(flatten, concat, slice, dropout, pooling, overlapping pooling, SPP, relu,leaky relu...)层输出CNN 各layer汇总(flatten, concat, slice, dropout, pooling, overlapping pooling, SPP, relu,leaky relu...)的偏导是

 CNN 各layer汇总(flatten, concat, slice, dropout, pooling, overlapping pooling, SPP, relu,leaky relu...)

2、Leaky Relu:(与Relu的不同之处在于负轴保留了非常小的常数leak,使得输入信息小于0时,信息没有完全丢掉,进行了相应的保留),即ReLU在取值小于零部分没有梯度,LeakyReLU在取值小于0部分给一个很小的梯度

函数图像:

 CNN 各layer汇总(flatten, concat, slice, dropout, pooling, overlapping pooling, SPP, relu,leaky relu...)

表达式:

(1)前向过程:

 CNN 各layer汇总(flatten, concat, slice, dropout, pooling, overlapping pooling, SPP, relu,leaky relu...)

leak是小数,例如leak=0.01

(2)后向传播:

a) 将Leaky ReLU看作神经网络中的一层,设第CNN 各layer汇总(flatten, concat, slice, dropout, pooling, overlapping pooling, SPP, relu,leaky relu...)层输出是CNN 各layer汇总(flatten, concat, slice, dropout, pooling, overlapping pooling, SPP, relu,leaky relu...), 然后输入Leaky ReLU激活函数后输出是CNN 各layer汇总(flatten, concat, slice, dropout, pooling, overlapping pooling, SPP, relu,leaky relu...)

b)设损失函数L关于第CNN 各layer汇总(flatten, concat, slice, dropout, pooling, overlapping pooling, SPP, relu,leaky relu...)层输出CNN 各layer汇总(flatten, concat, slice, dropout, pooling, overlapping pooling, SPP, relu,leaky relu...)的偏导是

 CNN 各layer汇总(flatten, concat, slice, dropout, pooling, overlapping pooling, SPP, relu,leaky relu...)

 

参考:

1,http://m.blog.csdn.net/m0_37407756/article/details/72235667

2,https://blog.csdn.net/mao_kun/article/details/50507376

3,https://blog.csdn.net/losteng/article/details/51520555

4,https://blog.csdn.net/qq_37342061/article/details/99090590

 

 

LED照明:依古齐尼(深圳)照明科技有限公司

      13723451660 刘先生

相关文章:

  • 2021-04-29
  • 2022-01-31
  • 2021-09-12
  • 2021-06-21
  • 2021-07-12
  • 2021-08-27
  • 2021-10-07
猜你喜欢
  • 2022-12-23
  • 2021-09-27
  • 2021-11-21
  • 2022-01-03
  • 2021-07-04
  • 2022-12-23
相关资源
相似解决方案