本文对resnet进行介绍,文章目录如下:
本文参考资料有:
https://www.bilibili.com/video/BV1T7411T7wahttps://arxiv.org/pdf/1512.03385.pdfhttps://arxiv.org/abs/1502.03167ResNet在2015年由微软实验室提出,在2015 ImageNet中分类任务第一,目标检测第一,COCO数据集目标检测第一,图像分割第一。
原论文如下:

亮点主要有三点:
解决退化问题解决梯度消失/梯度爆炸问题如果层数太深会引起梯度消失与梯度爆炸和退化问题。其中梯度消失指的是,假如你每次都乘以一个<1的数,由级数知识可知,最终结果会趋向于无穷,这个问题最终使用BN层消除了。还会引起退化问题,最终退化问题通过引入residual残差结构解决了。

残差模块即特征矩阵相加,而对于深度更深的ResNet,作者通过使用1x1卷积核降维升维后,再进行特征矩阵的相加实现。两个特征矩阵要实现加法,需要保证两个特征矩阵的[channels, height, width]要相同。下图中,通过深度残差模块(右),我们能够明显地发现我们的网络所需要参数减少了。

ResNet的模型结构见下表:

需要注意的是,每一个conv[n]_x(18,34浅层n>2,50,101,152深层n>1)的第一个层都是虚线,需要对输入特征矩阵的大小进行变换,使其不等于输出特征矩阵大小。如果是实线的残差结构,则输出特征矩阵和输入矩阵是一样的,而对于虚线的残差结构捷径部分也是经过卷积处理的,输出特征矩阵往往不等于输出特征矩阵,如下:

BN是解决过拟合的一种方式,BN全称Batch Normalization,它的目的是使每一批数据(batch)的每一层的feature map满足均值为0,方差为1的分布规律,在增加BN层后,在该BN层的前一层的Conv2d的bias参数得为False。
BN是google团队2015年论文”Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift"中提出,原论文链接https://arxiv.org/abs/1502.03167,通过该方法能够加速网络的收敛并提升准确率。


我们对feature map输出特征矩阵的每一维度的数据求均值和方差,再通过标准化处理,缩放平移,得到最终的 y i y_i yi。缩放所使用的 β , γ \beta, \gamma β,γ是通过学习得到的。BN对于多维度的例子如下:

使用BN时需要注意以下三点:
BN总结:

迁移学习指的是使用别人训练好的模型参数再进行训练,他的优势在于:
使用迁移学习需要保证模型的全部参数或者某一部分参数是相同的。在对新的数据集进行训练时,往往低纬度的特征是通用的,而高维度的特征才是我们需要学习的,所以我们可以采用迁移学习对具有相同部分的新的网络或者新的数据集的高维度特征进行学习。

常见的迁移学习的方式具有以下几种:
使用迁移学习,我们需要注意两个网络得有相同部分或完全相同才能迁移学习;要注意别人的预处理方式,保持自己的预处理方式与别人的预处理方式相同。