深度学习【4】卷积神经网络CNN(1)

一.卷积神经网络简介

1.BP神经网络存在的问题

   B P BP BP神经网络由出输入层、隐藏层、输出层组成,假如一张图片作为网络的输入,该图片是1000x1000x3​的彩色图片,那么输入层就需要有1000x1000x3个 神经元,如果再加入一个具有 1000 1000 1000 个神经元的隐藏层,那么输入层到隐藏层之间的权值个数就会有1000x1000x3x1000=30亿个,这会给神经网络带来两个问题。一是计算量巨大,需要花费大量的时间;而是需要大量的样本进行训练,以防模型过拟合。所以在图像处理的过程中一般不使用全连接网络,需要使用卷积神经网络来解决计算机视觉任务中权值数量巨大的问题。

2.卷积神经网络

  卷积神经网络(Convolutional Neural Network,CNN)就是一种包含卷积计算的神经网络。卷积计算是一种计算方式,指一个卷积窗口在一个平面上滑动,每次滑动就会进行一次卷积计算,得到一个数值,卷积窗口滑动计算完成后,会得到一个用于表示图像特征的特征图。

3.局部感受野和权值共享

  卷积神经网络的设计同样是受到了生物学的启发,借鉴了 H u b e l Hubel Hubel W i e s e l Wiesel Wiesel 的研究,在卷积网络中使用了局部感受野(Local Receptive Field),卷积层中的神经元连接不是全连接的,而是后一层的每个神经元连接前一层的部分神经元。

  上图左边为全连接,右边为局部连接。同一卷积层中的同一个卷积窗口是共享的,所以大大减少了层与层之间的权值个数,例如上图中的卷积窗口为10x10​,所以一共有 100 + 1 100+1 100+1 (偏置)个权值。卷积层的权值数量仅跟卷积窗口的大小有关,与图片大小,卷积步长无关。

二.卷积的具体计算

  卷积窗口又称为卷积核(Convolution Kernel),卷积窗口/卷积核一般都是使用正方形的,比如1x1、3x3、5x5​等,极少数情况才会使用长方形。卷积的计算说白了就是简单的加减乘除运算,即卷积核与图片中对应位置的数值相乘,然后再求和。

1.卷积的计算方法

  使用3x3的卷积核对4x4的图片求卷积(步长为1),可以分为4个步骤完成。

  (1).具体卷积计算为 1x1+0x1+1x1+0x0+1x1+0x1+1x0+0x0+1x1=4。

  (2).具体卷积计算为 1x1+0x1+1x0+0x1+1x1+0x1+1x0+0x1+1x1=3。

  (3).具体卷积计算为 1x1+0x1+1x1+0x0+1x0+0x1+1x0+0x0+1x0=2。

  (4).具体卷积计算为 1x1+0x1+1x1+0x0+1x1+0x1+1x0+0x0+1x1=4。

2.卷积的步长

  卷积的步长指的是卷积每一次移动的步数,例如在1中的步长为1,理论上步长可以为任意正整数。

  如下图是步长为2的卷积。

  如下图是步长为3的卷积。

3.不同卷积核

  使用不同的卷积核对同一张图片卷积会得到不同的结果,所以如果使用多个不同的卷积核对同一图像求卷积,就可以提取图像中不同的特征。

  传统机器学习中,卷积核的取值是人为设计的大量不同的权值,然后使用大量图片测试,最后分析提取合适的卷积核。

  在深度学习中,卷积核的数值实际上就是卷积核的权值,所以卷积核的取值在卷积神经网络训练最开始的阶段是随机初始化的,之后结合反向传播算法训练得到最终结果,训练好的卷积核就可以连接后面的全连接层用于分类回归等任务。

  (1).多通道卷积

​ 在实际中,图像是由多个通道(channel)组成的,卷积核需要拥有相同的 c h a n n e l channel channel 数,每个卷积核通道与对应的图像输入层的通道进行卷积,最后按位相加得到最终的特征图。

  (2).多卷积核卷积

​ 当有多个卷积核时,每个卷积核提取不同的特征,对应产生多个特征图。如下图所示最终输出两个通道的特征图。

三.池化层(Pooling)

1.池化的概念与作用

  一个经典的卷积层包含三个部分:卷积计算。非线性激活函数、池化。池化层和卷积有点相似,也有一个滑动窗口,用于在图像中进行滑动计算,但池化层中没有需要训练的参数。我们在使用多个不同的卷积核对图像求卷积后,会得到很多个不同的特征图,并且卷积网络中的参数仍然很多,此时池化的两个作用就凸显出来:

  • 进一步的特征提取,减少了权值个数,提高了计算速度,并提高了特征图的鲁棒性,防止过拟合。
  • 使网络的输入具有平移不变性。

  平移不变性:当对输入图像数据进行少量平移时,经过池化后的数值并不会发生太大变化。这个性质非常有用,因为我们关心的是图像中是否有某个特征,而不是这个特征的位置。例如下图中,我们只关心图上有没有猫,而不是猫在图中的具体位置。

2.池化的分类

  池化也有池化窗口,由于它不需要训练权值,所以有自己固定的池化计算方式,通常分为三种:

  • 最大池化(Max-Pooling):提取池化窗口区域内的最大值
  • 平均池化(Mean-pooling):提取池化窗口区域内的平均值
  • 随机池化(Stochastic-Pooling):随机提取池化窗口区域内的一个值(很少用)

  最常用的池化方式是最大池化,常用的池化窗口大小为2x2,步长为2.

四.Padding

  在一个深度的卷积神经网络中,通常会有多个卷积层结构,每一次做卷积,得到的特征图就会比原来的图像更小一些,这样特征的数量就会不断减少。

另外卷积计算的时候图像中间的数据会重复多次使用,而边缘数据可能只会用到一次,说明卷积计算容易丢失图像的边缘特征。

如下图所示,不仅特征数量不断减少,而且4x4图像的四个角的数据只用到了1次。

  针对上述两个问题,可以使用 P a d d i n g Padding Padding 的方式进行处理。卷积和池化都可以使用 P a d d i n g Padding Padding P a d d i n g Padding Padding 一般有两种方式, V a l i d P a d d i n g Valid\quad Padding ValidPadding S a m e P a d d i n g Same\quad Padding SamePadding

1.Padding方式----Valid Padding

   V a l i d P a d d i n g Valid\quad Padding ValidPadding 就是不填充,卷积后的特征图就会比原始图小。

2.Padding方式----Same Padding

   S a m e P a d d i n g Same\quad Padding SamePadding通过填充数据,一般填0,使得卷积后的特征图和原始特征图大小相同。

  如下图所示,使用3x3的卷积核对5x5的图片进行卷积操作,步长为1。先将原图像最外圈填充1圈0后再进行卷积,这样卷积后的特征图大小就可原始图像的大小相同,同样是5x5。

  同理,使用5x5的卷积核对5x5的图片进行卷积操作,步长为1。先将原图像最外圈填充2圈0后再进行卷积,这样卷积后的特征图大小就可原始图像的大小相同,同样是5x5;使用7x7的卷积核对5x5的图片进行卷积操作,步长为1。先将原图像最外圈填充3圈0后再进行卷积,这样卷积后的特征图大小就可原始图像的大小相同,同样是5x5。

  这也是卷积核经常使用单数x单数的原因,因为可以通过填充0来得到与原图大小相同的特征图。

五.特征图大小和权值数量的计算

1.卷积与池化后的特征图大小

字符意义
o l d , c h a n n e l old,channel old,channel原图的宽高
k s i z e , s t r i d e , P ksize,stride,P ksize,stride,P卷积核大小,步长,填充的圈数
n e w new new输出特征图的宽高

  虽然计算特征图大小的原理一致,但是不同框架计算公式稍有不同。

  (1). C a f f e Caffe Caffe P y T o r c h PyTorch PyTorch 会放弃输入特征图的左侧和上侧的一部分数据,使得卷积核窗口恰好能够到达最右下角的点,使得最终的输出特征图的尺寸为:
n e w = ⌊ o l d + 2 p − k s i z e s t r i d e ⌋ + 1 new=\lfloor\frac{old+2p-ksize}{stride} \rfloor+1 new=strideold+2pksize+1
  (2). T e n s o r f l o w Tensorflow Tensorflow K e r a s Keras Keras在做卷积运算时无法显示指定输入特征图的边界填充尺寸(当然可以在卷积运算前手动填充),所以会根据 P a d d i n g Padding Padding 模式的不同而有不同的计算方法:

  • P a d d i n g = v a l i d Padding=valid Padding=valid

n e w = ⌊ o l d − k s i z e s t r i d e ⌋ + 1 new=\lfloor \frac{old-ksize}{stride}\rfloor+1 new=strideoldksize+1

  • P a d d i n g = s a m e Padding=same Padding=same

n e w = ⌊ o l d − 1 s t r i d e ⌋ + 1 new=\lfloor \frac{old-1}{stride}\rfloor+1 new=strideold1+1

2.卷积层的权值数量计算

  设输入特征图的通道数为 c i c_i ci,卷积核的宽高为 h , w h,w h,w,输出特征图的通道数为 c o c_o co,则该卷积层的权值数量为:
P a r a m s = ( c i ∗ h ∗ w + 1 ) ∗ c o Params=(c_i*h*w+1)*c_o Params=(cihw+1)co

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值