计算机系统应用教程网站

网站首页 > 技术文章 正文

ResNet代码讲解

btikc 2024-09-09 01:42:43 技术文章 14 ℃ 0 评论

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前向传播代码了,就是前向传播五个卷积块:

当然若输出特征金字塔范式多层特征的话,可直接使用分层特征来输出。

整体代码如下:

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表