ResNet
一般而言,网络越深越宽会有更好的特征提取能力,但当网络达到一定层数后,随着层数的增加反而导致准确率下降,网络收敛速度更慢。
针对这个问题,ResNet 的创新之处有二点:
- 提出 Shortcut Conection, 右边直接连接的部分称为 Identiy Maping;
- 提出瓶颈模块(Bottleneck Block)用于丰富特征:包含1x1、3x3、1x1卷积和残差架构
使用瓶颈模块构建出了 ResNet34, ResNet50, ResNet101, ResNet152 等深层神经网络,这些CNN网络用于更深层次视觉任务(如目标分类、目标检测、语义分割、目标跟踪等)来提取图像目标特征。
ResNet结构
ResNet网络整体由Bottleneck Block组成,前面穿插几层卷积层,下表列出ResNet18、ResNet34、ResNet50、ResNet101和Resnet152的结构图。
ResNet代码
ResNet模型初始化:初始化卷积块conv1bn1relu(对应于上图conv1),_make_layer函数是用于构造Bottleneck Block块(对于ResNet-18和ResNet-34就是两个3x3卷积,对于ResNet-50、Resnet-101和ResNet-152就是1x1、3x3和1x1卷积堆叠的残差块)
_make_layer: 构造残差块结构:
Bottleneck Block(BasicBlock: 适用于ResNet18和ResNet34):包含两个3x3卷积核残差连接
Bottleneck Block(Bottleneck: 适用于ResNet50、ResNet101和ResNet152):包含1x1、3x3和1x1卷积架构和残差连接
最后就是ResNet前向传播代码了,就是前向传播五个卷积块:
当然若输出特征金字塔范式多层特征的话,可直接使用分层特征来输出。
整体代码如下:
本文暂时没有评论,来添加一个吧(●'◡'●)