ResNet解析_restnet

ResNet解析_restnetResNet在2015年被提出,在ImageNet比赛classification任务上获得第一名,因为它“简单与实用”并存,之后很多方法都建立在ResNet50或者ResNet101的基础上完成的,检测,分割,识别等领域都纷纷使用ResNet,Alphazero也使用了ResNet,所以可见ResNet确实很好用。下面我们从实用的角度去看看ResNet。1.ResNet意义随着…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

ResNet在2015年被提出,在ImageNet比赛classification任务上获得第一名,因为它“简单与实用”并存,之后很多方法都建立在ResNet50或者ResNet101的基础上完成的,检测,分割,识别等领域都纷纷使用ResNet,Alpha zero也使用了ResNet,所以可见ResNet确实很好用。
下面我们从实用的角度去看看ResNet。

1.ResNet意义

随着网络的加深,出现了训练集准确率下降的现象,我们可以确定这不是由于Overfit过拟合造成的(过拟合的情况训练集应该准确率很高);所以作者针对这个问题提出了一种全新的网络,叫深度残差网络,它允许网络尽可能的加深,其中引入了全新的结构如图1;
这里问大家一个问题
残差指的是什么
其中ResNet提出了两种mapping:一种是identity mapping,指的就是图1中”弯弯的曲线”,另一种residual mapping,指的就是除了”弯弯的曲线“那部分,所以最后的输出是 y=F(x)+x y = F ( x ) + x
identity mapping顾名思义,就是指本身,也就是公式中的 x x ,而residual mapping指的是“”,也就是
yx

y x
,所以残差指的就是 F(x) F ( x ) 部分。
为什么ResNet可以解决“随着网络加深,准确率不下降”的问题?
除了实验证明外:
这里写图片描述
表1,Resnet在ImageNet上的结果
理论上,对于“随着网络加深,准确率下降”的问题,Resnet提供了两种选择方式,也就是identity mapping和residual mapping,如果网络已经到达最优,继续加深网络,residual mapping将被push为0,只剩下identity mapping,这样理论上网络一直处于最优状态了,网络的性能也就不会随着深度增加而降低了。

2.ResNet结构

它使用了一种连接方式叫做“shortcut connection”,顾名思义,shortcut就是“抄近道”的意思,看下图我们就能大致理解:
这里写图片描述
图1 Shortcut Connection
这是文章里面的图,我们可以看到一个“弯弯的弧线“这个就是所谓的”shortcut connection“,也是文中提到identity mapping,这张图也诠释了ResNet的真谛,当然大家可以放心,真正在使用的ResNet模块并不是这么单一,文章中就提出了两种方式:
这里写图片描述
图2 两种ResNet设计
这两种结构分别针对ResNet34(左图)和ResNet50/101/152(右图),一般称整个结构为一个”building block“。其中右图又称为”bottleneck design”,目的一目了然,就是为了降低参数的数目,第一个1×1的卷积把256维channel降到64维,然后在最后通过1×1卷积恢复,整体上用的参数数目:1x1x256x64 + 3x3x64x64 + 1x1x64x256 = 69632,而不使用bottleneck的话就是两个3x3x256的卷积,参数数目: 3x3x256x256x2 = 1179648,差了16.94倍。
对于常规ResNet,可以用于34层或者更少的网络中,对于Bottleneck Design的ResNet通常用于更深的如101这样的网络中,目的是减少计算和参数量(实用目的)。

问大家一个问题:
如图1所示,如果F(x)和x的channel个数不同怎么办,因为F(x)和x是按照channel维度相加的,channel不同怎么相加呢?
针对channel个数是否相同,要分成两种情况考虑,如下图:
这里写图片描述
图3 两种Shortcut Connection方式
如图3所示,我们可以清楚的”实线“和”虚线“两种连接方式,
实线的的Connection部分(”第一个粉色矩形和第三个粉色矩形“)都是执行3x3x64的卷积,他们的channel个数一致,所以采用计算方式:
y=F(x)+x y = F ( x ) + x
虚线的的Connection部分(”第一个绿色矩形和第三个绿色矩形“)分别是3x3x64和3x3x128的卷积操作,他们的channel个数不同(64和128),所以采用计算方式:
y=F(x)+Wx y = F ( x ) + W x
其中W是卷积操作,用来调整x的channel维度的;
下面我们看看两个实例:
这里写图片描述
图4 两种Shortcut Connection方式实例(左图channel一致,右图channel不一样)

3.ResNet50和ResNet101

这里把ResNet50和ResNet101特别提出,主要因为它们的出镜率很高,所以需要做特别的说明。给出了它们具体的结构:
这里写图片描述
表2,Resnet不同的结构
首先我们看一下表2,上面一共提出了5中深度的ResNet,分别是18,34,50,101和152,首先看表2最左侧,我们发现所有的网络都分成5部分,分别是:conv1,conv2_x,conv3_x,conv4_x,conv5_x,之后的其他论文也会专门用这个称呼指代ResNet50或者101的每部分。
拿101-layer那列,我们先看看101-layer是不是真的是101层网络,首先有个输入7x7x64的卷积,然后经过3 + 4 + 23 + 3 = 33个building block,每个block为3层,所以有33 x 3 = 99层,最后有个fc层(用于分类),所以1 + 99 + 1 = 101层,确实有101层网络;
注:101层网络仅仅指卷积或者全连接层,而激活层或者Pooling层并没有计算在内;
这里我们关注50-layer和101-layer这两列,可以发现,它们唯一的不同在于conv4_x,ResNet50有6个block,而ResNet101有23个block,查了17个block,也就是17 x 3 = 51层。

4.基于ResNet101的Faster RCNN

文章中把ResNet101应用在Faster RCNN上取得了更好的结果,结果如下:
这里写图片描述
这里写图片描述
表3,Resnet101 Faster RCNN在Pascal VOC07/12 以及COCO上的结果
这里有个问题:
Faster RCNN中RPN和Fast RCNN的共享特征图用的是conv5_x的输出么?
针对这个问题我们看看实际的基于ResNet101的Faster RCNN的结构图:
这里写图片描述
图5 基于ResNet101的Faster RCNN
图5展示了整个Faster RCNN的架构,其中蓝色的部分为ResNet101,可以发现conv4_x的最后的输出为RPN和RoI Pooling共享的部分,而conv5_x(共9层网络)都作用于RoI Pooling之后的一堆特征图(14 x 14 x 1024),特征图的大小维度也刚好符合原本的ResNet101中conv5_x的输入;
最后大家一定要记得最后要接一个average pooling,得到2048维特征,分别用于分类和框回归。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/184867.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 数据库课程设计-职工工资管理系统

    数据库课程设计-职工工资管理系统XXX大学《数据库原理及应用课程设计》设计报告…

    2022年5月18日
    39
  • dropdownlist绑定数据源_datatable获取列名

    dropdownlist绑定数据源_datatable获取列名        Dim qx As String()        qx = Split(“白色,兰色,黄色,黑色,红色”, “,”)        Dim dt As DataTable = New DataTable(“col”)        Dim dc As DataColumn = New DataColumn(“str”)        dt.Columns.Add(dc) 

    2022年10月8日
    0
  • 四大国内外开源的java工作流程引擎,流程快速开发平台对比分析选型[通俗易懂]

    四大国内外开源的java工作流程引擎,流程快速开发平台对比分析选型[通俗易懂]为了更好的帮助大家找到适合自己的流程引擎,快速的完成流程引擎技术架构选型,快速的完成项目交付我们找到了4个开源的java工作流引擎,一些应用环境对比分析。希望您能从中找到适合您自己的流程引擎。 工作流引擎 Activiti JBossJBPM6.5 JFlow6.0 FixFlo…

    2022年7月8日
    31
  • 细粒度图像分类(FGVC)—综述[通俗易懂]

    细粒度图像分类(FGVC)—综述[通俗易懂]一、概述什么是细粒度图像分类细粒度图像分类问题是对大类下的子类进行识别。细粒度图像分析任务相对通用图像(General/GenericImages)任务的区别和难点在于其图像所属类别的粒度更为精细。以图1为例,通用图像分类其任务诉求是将“袋鼠”和“狗”这两个物体大类(蓝色框和红色框中物体)分开,可见无论从样貌、形态等方面,二者还是很容易被区分的;而细粒度图像的分类任务则要求对“狗”该类类别……

    2025年5月26日
    1
  • 常用的安全渗透测试工具(渗透测试工具)

    应用程序安全性并不新鲜,但它在需求、复杂性和深度方面正迅速增长。随着网络犯罪自疫情爆发以来增长了近600%,越来越多的SaaS企业开始争相保护他们的应用程序。即使那些运行最新端点保护的系统也面临重大漏洞。然而随之而来的一个问题是:即便采取了这些安全防护措施,能保护自己不会受到网络攻击吗?答案在于应用程序安全测试解决方案,该解决方案可以主动测试您的代码是否存在错误、关键漏洞和需要全面改进的领域。接下来是常见几种测试。 渗透测试 部署自动化工具,如SAST、DAST、RAST和IAST

    2022年4月16日
    60
  • 在node.js中使用COOKIE

    node.js中如何向客户端发送COOKIE呢?有如下两个方案:一、使用response.writeHead,代码示例://设置过期时间为一分钟1vartoday=newDate();

    2021年12月21日
    39

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号