ResNet网络结构

  • Post author:
  • Post category:其他


注:深度好像就是channel w*h*c

根据b站up霹雳吧啦的讲解做的笔记 视频地址

6.1 ResNet网络结构,BN以及迁移学习详解_哔哩哔哩_bilibiliR


6.2 使用pytorch搭建ResNet并基于迁移学习训练_哔哩哔哩_bilibili


ResNet网络解决梯度消失、爆炸,以及退化(我理解成随着层数的增加精度反而下降)问题

网络中亮点:1超深的网络结构

2提出residuaal模块

3使用batch normalization加速训练(丢弃drop out)

residual结构:

左边是针对网络层数较少的网络(18 34)使用的残差结构,右边对网络层数较多(50 101 152)的网络使用残差结构

主分支与侧分支输出的特征矩阵

相加

,他们的shape需要一样

3*3卷积核,深度为256~

从下面的式子可以看出,右边的网络所需计算量更小

ResNet网络结构分别有 18、34、50、101、152层

拿34层网络结构进行讲解

conv1   7*7卷积核

conv2_x 一系列残差结构中,  最大池化下采样,然后使用三层残差层

conv3_x 四个残差

conv4_x 六个残差结构

conv5_x 三个残差结构

平均池化下采样、全连接、softmax

实线与虚线的结构有何不同?

实线残差结构,输入特征矩阵与输出特征矩阵shape一样,对于虚线残差结构,对应conv3一系列结构的第一层,他的输入特征矩阵shape是【56,56,64】,输出特征矩阵shape是【28,28,128】

对比左右两个残差网络,发现右边第一个3*3卷积的stride发生了变化,经过第一个3*3卷积之后,输入特征向量变成了28*28(可以算出padding=1),通过128个卷积核改变了特征矩阵的深度

捷径 采用1*1卷积核,stride=2卷积之后特征矩阵变成28*28(算出来padding=0)



总结 左边实线部分的残差结构 输入输出特征矩阵shape一样,虚线部分的残差结构 输入输出shape不一样,所以在conv_3\conv_4\conv_5中都是 第一层都是接了虚线的残差结构来使输入shape变成自己需要的shape

原论文中提供了3种残差结构,作者认为B结构最好


注意:

对于18层和34层这两个浅层神经网络,他们经过最大池化下采样之后所得到的特征矩阵就是56*56*64,而conv2需要的残差结构刚好就是56*56*65,浅层网络不需要在第一层使用虚线网络结构,对于深层50 101 152 层来说,他们经过最大池化下采样的shape是56*56*64,而实线残差网络结构需要的输入shape是56*56*256,所以他们在conv2中的第一层也是虚线结构来调整深度

BN层:

在15年 谷歌提出,目的是使我们的一批(batch)

feature map满足均值为0,方差为1的分布规律

,它可以加速网络的收敛并提升准确率)

对于一个拥有d维的输入x,我我们对他的每一个维度进行标准化处理,d就是输入图像的channels,对于RGB图像来说d=3,
x=(x^{(1)},x^{(2)},x^{(3)})
其中
x^{(1)}
就代表我们R通道对应的特征矩阵。标准化处理也就是分别对R\G\B通道进行处理。

计算公式:

1计算一批数据 同一通道所有数据的 对应的均值、方差 (计算得出)

2原参数减去均值 除以方差

3
\epsilon
是一个很小的值,防止分母=0

4
\gamma \beta
\gamma \beta
做进一步调整,
\gamma
调整数据方差大小,初始值为1,
\beta
调整均值,初始值为0,如果不用他们调整就得到均值为0,方差为1的数据分布,
\gamma

\beta
是通过反向传播学习得到的

举例子:

我们所求的均值和方差是一个向量,维度和channel对应~

使用BN需要注意的问题:

迁移学习:

优势:

1快速训练出理想的结果

2数据集较小时也能训练出理想的结果

注意:使用别人预训练模型参数时,要注意别人的预处理方式

方式:学习浅层网络参数,将网络学习的底层通用特征迁移到新的网络,缩短训练时间

常见迁移学习方式:

1要注意最后一个fc网络,最后一层fc无法载入权重参数

第二三种可以节约时间,节省硬件

使用PyTorch搭建ResNet并基于迁移学习训练



版权声明:本文为m0_60673782原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。