文章目录
- 1. resNet介绍
- 1.1 34层深度残差结构
- 1.2 网络亮点
- 1.3 网络简单堆叠和resNet网络的比较
- 1.4 残差结构residual
- 1.5 Batch Normalization详解
- 2. 迁移学习简介
- 2.1 使用迁移学习的优势
- 2.2 迁移学习过程理解
- 2.3 常见迁移学习方式
- 3. 花分类实例
1. resNet介绍
1.1 34层深度残差结构
1.2 网络亮点
- 超深的网络结构(突破1000层)
- 提出residual模块
- 使用batch normalization加速训练(丢弃dropout)
1.3 网络简单堆叠和resNet网络的比较
网络简单堆叠存在的问题
- 梯度消失(梯度<1)或梯度爆炸(梯度>1)
- 退化问题
网络简单堆叠和resNet网络错误率的比较。
右图实线为验证集错误率,虚线为训练集错误率
1.4 残差结构residual
有两种残差结构
注意: 主分支与侧分支的输出特征矩阵需要相加,故两者shape必须相同
对左边残差结构的理解
- 左边残差结构在网络层数较少时使用,ResNet34层
- 主分支上:输入特征矩阵经过两个3*3的卷积层
- 结尾的加号表示:输入特征矩阵在主分支经过一系列卷积之后再与原输入特征矩阵相加,最后再通过relu激活函数
对右边残差结构的理解
- 适用于ResNet50层/101/152层
- 主分支上:
的卷积层(作用是降维:从256->64)、
的卷积层、
的卷积层(作用是升维,便于主分支与侧分支的输出特征矩阵的shape相同)
ResNet参数列表:
不同的残差结构(实线残差结构、虚线残差结构)实线残差结构是由于:输入特征矩阵和输出特征矩阵能够直接相加
虚线残差结构:输入特征矩阵和输出特征矩阵不能直接相加,输入特征矩阵需要经过侧分支的128个卷积核才能与主分支的输出特征矩阵相加
对于残差结构图中的侧分支有些是实线有些是虚线的解释
- 虚线原因:由于输入特征矩阵的shape和输出特征矩阵的shape不同
- 实线残差结构和虚线残差结构的不同之处:步距stride、侧分支
- 对于18层、34层ResNet的conv2的第一层是实线残差结构,原因是经过最大池化下采样后得到的输出是[56,56,64],刚好是实线残差结构所需要的输入shape
- 对于深层结构50层、101层、152层,输入特征矩阵通过最大池化层后的输出shape是[56,56,64],而实线残差结构所需要的输入shape是[56,56,256]。因此conv2_x对应的第一个虚线残差层仅调整特征矩阵的深度,高和宽不变。对于conv3_x、conv4_x、conv5_x不仅调整深度,同时需要调整高和宽
1.5 Batch Normalization详解
BN更详细的看这篇:Batch Normalization详解以及pytorch实验
CNN中的feature map介绍
Batch Normalization的目的:使一批(batch)特征矩阵feature map每个channel对应的维度满足均值为0,方差为1的分布规律,通过该方法能够加速网络的收敛并提升准确率
在图像预处理过程中通常会对图像进行标准化处理,以加速网络的收敛。对于Conv1来说输入的就是满足某一分布的特征矩阵,但对于Conv2而言输入的feature map就不一定满足某一分布规律了
(注意这里所说满足某一分布规律并不是指某一个feature map的数据要满足分布规律,理论上是指整个训练样本集所对应feature map的数据要满足分布规律)。
而我们Batch Normalization的目的就是使我们的特征层feature map满足均值为0,方差为1的分布规律。
使用BN应注意的问题
- 训练时将training设置为True,验证时将training设置为False。在pytorch中通过创建模型的model.train()和model.eval()方法控制
- batch size尽可能设置大设置的越大求的均值和方差越接近整个训练集的均值和方差
- 将BN层放在卷积层Conv和激活层(例如Relu)之间,且卷积层不要用偏置bias(即使使用也无任何作用,参考下图推理)
2. 迁移学习简介
2.1 使用迁移学习的优势
1. 能够快速训练出来一个理想的结果
2. 当训练集较小时也能训练出理想的效果
注意 :使用别人预训练模型参数时,要注意与别人的预处理方式保持一致
2.2 迁移学习过程理解
浅层卷积层学习到的角点、纹理信息是较为通用的信息,这些信息不仅在本网络中使用,同时可以迁移应用到其他网络,即迁移。
浅层网络的参数迁移到新网络,则新网络也拥有了识别角点、纹理等通用特征的能力,新网络就能够更加快速的学习新的数据集的高维特征
2.3 常见迁移学习方式
- 载入权重后训练所有参数(准确率高但训练时间长,且对硬件要求严格)
- 载入权重后只训练最后几层参数
- 载入权重后在原网络基础上添加一层全连接层,仅训练最后一个全连接层
硬件有限或对时间有要求选择第2、3种迁移学习方式
由于训练集的最后一层的分类个数可能和原预训练模型的参数不一致,采用第一种方式时,最后一层无法载入模型参数;但若采用第三种迁移学习方式,由于又添加了一层全连接层,最后一层模型参数可以载入,新添加的全连接层的结点个数即训练集的分类个数,仅训练最后一个全连接层即可。
3. 花分类实例
花分类实例参考这篇:使用pytorch搭建ResNet并基于迁移学习训练