一文搞懂卷积神经网络CNN

1 简介

因为图像规模较大,所以此前提及的感知机与神经网络表现一般,由此,卷积神经网络应运而生。卷积神经网络因卷积操作而得名,取代了全连接神经网络中一般的矩阵乘法运算。CNN 通过卷积来提取特征,同时利用卷积的权值共享与池化操作降低了计算成本。如下图所示,CNN 通常包含输入层、卷积层、激活层、池化层和全连接层,对于图像分割等应用,还可能包含反卷积层。激活层与全连接层请参考一文读懂深度神经网络
在这里插入图片描述

2 卷积层

顾名思义,CNN 最重要的部分就是卷积层。卷积层涉及三大概念:步长S,填充值P,深度D。其中,S是卷积核在原图上滑动时间隔的像素数量;P是原图像素数量不足以进行卷积操作时,手动对原图补0;D是原图的通道数。根据填充值的不一,卷积分为三类:valid卷积,full卷积,same卷积。下文将详细介绍。

2.1 valid卷积

此种卷积操作特点是不补0,是一种下采样操作。卷积核尺寸一般为 3x3 或 5x5,小尺寸能更好地表达图像特征,同时卷积核的深度必须与原图矩阵深度相同,但是卷积层的深度是由卷积核个数决定的。具体的卷积操作过程如下图所示。
在这里插入图片描述
输出维度计算公式如下:
D output  = D input  − D kernel  + 2  Padding  S kernel  + 1 D_{\text {output }}=\frac{D_{\text {input }}-D_{\text {kernel }}+2 \text { Padding }}{S_{\text {kernel }}}+1 Doutput =Skernel Dinput Dkernel +2 Padding +1
其中, S kernel  S_{\text {kernel }} Skernel  是卷积核步长, D kernel  D_{\text {kernel }} Dkernel  是卷积核维度,  Padding  \text { Padding }  Padding  是填充值的维度。
如上图所示,输出图维度为 ( 5 + 2 × 0 − 3 1 + 1 ) × ( 5 + 2 × 0 − 3 1 + 1 ) = 3 × 3 \left(\frac{5+2 \times 0-3}{1}+1\right) \times\left(\frac{5+2 \times 0-3}{1}+1\right)=3 \times 3 (15+2×03+1)×(15+2×03+1)=3×3

2.2 full卷积

此类卷积操作的特点是可以补0,但前提是卷积核边缘要与特征图边缘有交点,是一种上采样操作。具体卷积操作过程如下图所示。
在这里插入图片描述

2.3 same卷积

前文的valid卷积下采样,full卷积上采样。same卷积,顾名思义,输出图尺寸与输入图尺寸一样。如何保证这一点,关键在于填充值的选取,具体Padding值可由上文公式计算而出(令 D output  D_{\text {output }} Doutput  = D input  D_{\text {input }} Dinput  即可)。

3 池化层

池化层实质是下采样操作,目的在于减小特征图的维度,进而减少最后传给全连接层的参数量,同时可以避免过拟合。池化操作不改变特征图深度。池化操作与卷积操作类似,具体过程如下图所示,池化分为两类:最大池化与平均池化。
在这里插入图片描述

4 反卷积层

反卷积是一种上采样操作,常用于图像分割与增强场景。与卷积的多对一关系相反,反卷积是一对多的关系,如下图所示。
在这里插入图片描述
输出图的维度为 D output  = S kernel  × ( D input  − 1 ) + D kernel  − 2 × D_{\text {output }}=S_{\text {kernel }} \times\left(D_{\text {input }}-1\right)+D_{\text {kernel }}-2 \times Doutput =Skernel ×(Dinput 1)+Dkernel 2× Padding + + + offset
其中,offset = ( D output  − 2 ×  Padding  − D kernel  ) % S kernel  =\left(D_{\text {output }}-2 \times \text { Padding }-D_{\text {kernel }}\right) \% S_{\text {kernel }} =(Doutput 2× Padding Dkernel )%Skernel 

5 工程tricks

5.1 数据增强

增大数据量可以提升模型的性能,一般数据增强的方式分为两类:采集更多数据,合成更多数据。一般操作有:图像平移/旋转/缩放/翻转/裁剪/噪声/GAN…

5.2 批次归一化

BN 位于卷积与激活之间,目的是使梯度平稳,训练速度更快。BN算法的伪代码如下图所示。
在这里插入图片描述

5.3 参数初始化

参数初始化的方式一般分为以下几种。

  • 全零初始化
    无法进行模型训练

  • 随机初始化
    使用比较小的随机数初始化,一般符合高斯分布,均值为0,标准差为1e-2。一般适用于小网络。

  • Xavier参数初始化
    根据每层输入与输出个数决定参数随机初始化的分布范围,保证前向传播与反向传播时每层的方差一致。一般适用于tanh激活函数,不适用ReLU激活函数。

  • He参数初始化
    对Xavier参数初始化的改进版,适用于ReLU激活函数。

5.4 超参数设置

超参数是训练前人工设置的参数,而非训练得到的参数。因此,产业界戏称CV工程师为“调参党”。超参数一般包含网络模型(结构、层数、激活函数等)、学习率、批次大小、迭代次数、优化器等。

5.5 过拟合与欠拟合

如下图所示,过拟合就是模拟考都是100,大考60;欠拟合就是模拟考60,大考60.
在这里插入图片描述
那么,如何判断模型是否产生过拟合与欠拟合了呢?一般采用交叉验证法判断,即将数据集分为训练集与测试集,训练集用于训练,测试集用于验证。

在CNN中,过拟合经常出现,如何避免它十分重要。常用的方法如下。

  • 获取更多数据
  • 使用复杂度合适的模型
  • 正则化(早停法、Dropout、L1和L2范数正则化)

6 LeNet-5

LeNet-5模型是Yann LeCun教授提出的第一个成功应用于MNIST手写数字识别问题的卷积神经网络。
如下图所示,此网络共7层:3个卷积层(C1,C3,C5),2个池化层(S2,S4),2个全连接层(F6),最后是输出层。
在这里插入图片描述

  • 第一层卷积层
    该层的输入是32x32x1,该层卷积核尺寸为5x5,深度为6,不填充0,步长为1,该层的输出:28x28x6,本卷积层共有参数5x5x1x6+6=156个
  • 第二层池化层
    该层的输入为第一层的输出,是一个28x28x6的矩阵,本层采用的滤波器大小为2x2,长和宽的步长均为2,本层的输出矩阵大小为14x14x6
  • 第三层卷积层
    本层的输入矩阵大小为14x14x6,使用的滤波器大小为5x5,深度为16,不填充0,步长为1。本层的输出矩阵大小为10x10x16,本层有参数5x5x6x16+16=2416个。
  • 第四层池化层
    本层的输入矩阵大小10x10x16,本层采用的滤波器大小为2x2,长和宽的步长均为2,所以本层的输出矩阵大小为5x5x16
  • 第五层卷积层
    本层的输入矩阵大小为5x5x16,因为滤波器的大小就是5x5,所以和全连接层没有区别。如果将5x5x16矩阵中的节点拉成一个向量,那么这一层和全连接层就一样了。本层的输出节点个数为120,总共参数为5x5x 16x120+120=48120个.
  • 第六层全连接层
    本层的输入节点个数为120个,输出节点个数为84个,总共参数为120x84+84=10164个.
  • 第七层输出层
    本层的输入节点个数为84个,输出节点个数为10个,总共参数为84x10+10=850个.
    在这里插入图片描述
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值