ResNet50模型学习笔记

2023-11-03

ResNet的各种网络结构图如下图所示。

ResNet的层级结构

Layer->Block->Stage->Network

Layer是最小的单位,ResNet50代表有50层。

Block由两层或者三层conv层叠加而成,50层以下用左侧的双层block,50层及以上用右侧的三层block,其中右侧的这个block叫做BottleNeck(瓶颈结构)

 数个Block堆叠形成一个Stage,下图中用[ ]框起来的就是一个Stage,一个ResNet中共有4个Stage

ResNet50

输入Input经过Resnet50到输出Output的5个阶段,共经过了50个层,Stage0中的2层(conv7x7、max pooling),Stage1中9层(3x3),Stage2中的12层(3x4),Stage3中的18层(3x6),Stage4中的9层(3x3)。其中Stage0较为简单,可以看作数据的预处理;后面的Stage1、Stage2、Stage3、Stage4都由Bottleneck组成,结构相似。

Stage0

Stage0较为简单,可以看作数据的预处理。(3,473,473)为输入的通道数(channel)、高(height)、宽(width),即(c,h,w)。先假设输入的高和宽相等,所以表示为(c,w,w)

该Stage中第1层包括3个先后操作:

1、CONV

        CONV为卷积(Convolution)的缩写,7x7为卷积核的大小,64为卷积核的数量(即该卷积层输出的通道数),stride 2是卷积核的步长为2

2、BN

        BN是Batch Normalization(批标准化)的缩写,即常说是BN层

3、RELU

        RELU为ReLU激活函数

        self.conv1 = conv3x3(3, 64, stride=2)
        self.bn1 = BatchNorm2d(64)
        self.relu1 = nn.ReLU(inplace=True)
        self.conv2 = conv3x3(64, 64)
        self.bn2 = BatchNorm2d(64)
        self.relu2 = nn.ReLU(inplace=True)
        self.conv3 = conv3x3(64, 128)
        self.bn3 = BatchNorm2d(128)
        self.relu3 = nn.ReLU(inplace=True)

代码中将1个7x7卷积优化为3个3x3的卷积,经过第1个3x3卷积,通道数由3变为64,尺寸应该是(473-3)/2+1=236,即尺寸从473x473变为236x236;经过第2个3x3卷积,通道数为64,尺寸(236-3)/1+1=234,即尺寸从236x236变为234x234;经过第3个3x3卷积,通道数由64变为128,尺寸(234-3)/1+1=232,即尺寸从234x234变为232x232。

        self.maxpool = nn.MaxPool2d(kernel_size=3, stride=2, padding=1)

该Stage的第2层为maxpool,即最大池化层。kernel为3x3,步长为2。尺寸(232-3+2*1)/2+1=117,即尺寸从232x232变为117x117。池化层不改变通道数。

总体来说,在Stage0中,形状为(3,473,473)的输入经过第1层、第2层得到了形状为(128,117,117)的输出。

Stage1

理解了Stage1的结构之后就同样能理解Stage2、Stage3、Stage4的结构。

Stage1中有3个瓶颈层。

    def _make_layer(self, block, planes, blocks, stride=1):
        downsample = None
        if stride != 1 or self.inplanes != planes * block.expansion:
            downsample = nn.Sequential(
                nn.Conv2d(self.inplanes, planes * block.expansion,
                          kernel_size=1, stride=stride, bias=False),
                BatchNorm2d(planes * block.expansion),
            )

        layers = []
        layers.append(block(self.inplanes, planes, stride, downsample))
        self.inplanes = planes * block.expansion
        for i in range(1, blocks):
            layers.append(block(self.inplanes, planes))

        return nn.Sequential(*layers)
        self.layer1 = self._make_layer(block, 64, layers[0])

经过Stage1,通道数变为64x4=256,即形状为(128,117,117)的输入经过该Stage得到了形状为(256,117,117)的输出。

        self.layer2 = self._make_layer(block, 128, layers[1], stride=2)

Stage2中有4个瓶颈层。

经过Stage2,通道数变为128x4=512,尺寸变为59x59,即形状为(256,117,117)的输入经过该Stage得到了形状为(512,59,59)的输出。

        self.layer3 = self._make_layer(block, 256, layers[2], stride=2)

Stgae3中有6个瓶颈层。

经过Stage3,通道数变为1024,尺寸变为30x30,即形状为(512,59,59)的输入经过该Stage得到了形状为(1024,30,30)的输出。

        self.layer4 = self._make_layer(block, 512, layers[3], stride=2)

Stage4中有3个瓶颈层

经过Stage4,通道数变为2048,尺寸变为16x16,即形状为(1024,30,30)的输入经过该Stage得到了形状为(2048,16,16)的输出。

        self.avgpool = nn.AvgPool2d(7, stride=1)

经过一个kernel为7x7的mean-pooling,尺寸变为10x10,即形状为(2048,16,16)的输入经过该池化层得到了形状为(2048,10,10)的输出。

  下图是zyyupup画的ResNet18和ResNet50网络结构图,其中输入的形状为(3,224,224),经过ResNet50模块后输出的形状为(2048,1,1),经过一个FC全连接层将2048个通道与num_class连接。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ResNet50模型学习笔记 的相关文章

随机推荐

  • JS面试题整理

    1 JS的数据类型有哪些 它们是如何存储的 JavaScript一共有八种数据类型 其中分为基本数据类型和引用数据类型 基础数据类型 String Number Boolean Undefined Null Symbol ES6新增的数据类
  • 使用java读取execel

    需要下载jxl jar 去官网下载 代码如下 import java io import java util Scanner author Administrator version 1 0 Date 2011 06 07 java练习 p
  • ModelMatrix、ModelViewMatrix、ProjectionMatrix、NormalMatrix模型矩阵、模型视图矩阵、投影矩阵、正规矩阵详解

    ModelMatrix ModelViewMatrix ProjectionMatrix ModelMatrix模型矩阵 模型视图矩阵 投影矩阵 正规矩阵详解 1 前言 在openGL经常用到ModelMatrix ModelViewMat
  • 游戏盾可以防止DD和CC吗

    游戏盾是针对游戏行业专门研发的一款防DD和CC的产品 在市场上游戏盾不同与传统的单点抗D 它是由一个乃至多个高防节点池组成 每个节点池里面都是包含有成百上千个节点存在的 并且采用自主大数据和Anycast算法来实现智能调度 轻松将正常玩家和
  • 服务器 ping 不通有哪些原因导致的

    服务器 ping 不通有哪些原因导致的 太心急 即网线刚插到交换机上就想 Ping 通网关 忽略了生成树的收敛时间 当然 较新的交换机都支持快速生成树 或者有的管理员干脆把用户端口 access port 的生成树协议关掉 问题就解决了 某
  • 通过Git使用GitHub

    目录 一 建立个人仓库 二 配置SSH密钥 三 克隆仓库代码 四 推送代码到个人仓库 五 代码拉取 一 建立个人仓库 1 建立GitHub个人仓库 首先注册GitHub用户 注册好了之后 打开用户的界面 然后就是配置问题 配置好后拉到最下方
  • docker网络--多机通信--4--ingress笔记

    docker网络 多机通信 4 ingress 一 介绍 二 ingress网络 1 啥 2 增 3 删 4 改 5 查 三 ingress实验 1 说明 2 整体拓扑图 3 实验步骤 1 预置条件 2 步骤 4 原理说明 四 外部负载均衡
  • spring-bean的生命周期和怎么配置spring-bean的后置处理器

    前言 本章是spring基于XML 配置bean系类中第6篇讲解spring bean的生命周期和怎么配置spring bean的后置处理器 个人主页 尘觉主页 个人简介 大家好 我是尘觉 希望我的文章可以帮助到大家 您的满意是我的动力 在
  • 计算PI值到一亿位的算法 (转)

    计算PI值到一亿位的算法 转 more 我大体上考虑了一下用Delphi计算PI值到一亿位的算法 得到一个大体的算法 也好用来交流一下 这是一个构造一种新的长四则运算的算法 所谓长四则运算 是指用数据库的字段来作一个小数 用一个记录来作一个
  • 基于python的毕业设计仓库库存管理系统

    更多项目资源 最下方联系我们 目录 Python项目介绍 资料获取 Python项目介绍 计算机毕业设计python毕设项目之python仓库库存管理系统 IT实战课堂 哔哩哔哩 bilibili计算机毕业设计python毕设项目之pyth
  • 微信浏览器清理缓存的方法

    项目场景 项目包含电脑浏览器和手机的微信公众号两个部分 现在需要在微信端对项目进行测试 问题描述 在微信端打开项目的网页 发现某些部分的功能不如预期 退出微信并在服务器端进行修改 修改完成再次打开该网页 跟修改前的表现一样没有任何变化 原因
  • 企业u盘系统服务器,服务器u盘装系统

    服务器u盘装系统 内容精选 换一换 如果Linux操作系统云服务器未安装密码重置插件 可以参见本节内容重新设置密码 本节操作重置的是root用户的密码 您可以重置完root密码后登录云服务器后再更换秘钥或重置非root用户的密码 Windo
  • Group conv vs. Depthwise separable conv

    本王有话说 这俩属于是做轻量化绕不开的经典工作 盘踞武林好多年 我们的目标学会并企图超越它 分组卷积 Group conv paper 原理 分组卷积 即ResNeXt的亮点 受Inception和AlexNet的启发产生 Inceptio
  • 通过css样式定义span标签实现文本输入框功能

    span style width 200px height 24px line height 24px font size 14px padding 5px 8px border 1px solid ddd 我是文本输入框 span
  • TensorFlow学习过程记录 -- 问题解决

    在运行过程中 输出总是会产生两行警告信息 WARNING tensorflow From D python35 lib site packages tensorflow python util tf should use py 118 in
  • 机器学习中概率论知识复习

    机器学习先验知识概率论部分 发现看Machine Learning Andrew Ng 课程的时候中间有推导过程不是很明白 遂针对性复习 知识内容组织结构 参考 Probability Theory Review for Machine L
  • 使用PHP生成Excel文件并通过邮件发送

    需求 每周一自动检测一个月内即将过期的用户 生成excel2007文件 xlsx文件 并发送给指定的人员 做成一个脚本 使用定时任务即可解决 脚本分解为两步 生成Excel 发送邮件 一 生成Excel 使用简单的更改文件头 header
  • Java入门(6)——集合、基本数据类型和引用数据类型的相互转换

    集合 1 HashMap gt 类 概述 通过key可以找到value key就是键 values就是值 俗称键值对 特点 无序的 值可以重复 键不可以重复的 如果重复了 值就会覆盖 回顾 10 int num 10 jack String
  • Python基础内容:适合刚入门的朋友看的教程

    1 基本概念 1 1 四种类型 python中数有四种类型 整数 长整数 浮点数和复数 整数 如 1 长整数 是比较大的整数 浮点数 如 1 23 3E 2 复数 如 1 2 j 1 1 2 2j 1 2 字符串 字符串 字符的序列 pyt
  • ResNet50模型学习笔记

    ResNet的各种网络结构图如下图所示 ResNet的层级结构 Layer gt Block gt Stage gt Network Layer是最小的单位 ResNet50代表有50层 Block由两层或者三层conv层叠加而成 50层以