图像识别之ResNet(结构详解以及代码实现)

前言

在人工智能的浪潮中,深度学习已经成为了推动计算机视觉、自然语言处理等领域突破的关键技术。在这众多技术中,ResNet(残差网络)无疑是一个闪耀的名字。自从2015年Kaiming He等人提出ResNet架构以来,它不仅在图像识别领域取得了革命性的进展,更影响了后续神经网络设计的诸多方面。

那么,什么是ResNet?简而言之,ResNet是一种深度卷积神经网络(CNN),其核心创新在于引入了“残差学习”的概念,通过残差块(residual block)的设计优雅地解决了深度网络训练中的退化问题。这种结构允许网络通过简单的恒等映射来学习复杂的表示,有效地促进了更深网络的训练。

让我们先看看网络退化问题 

在作者论文中提及随着网络层数的不断加深,模型的准确率起初会不断的提高,最后达到饱和值,之后随着网络深度的不断增加,模型准确率不但不会继续增加,反而会出现大幅度降低的现象。如上图,模型训练以及验证的过程中56层的error比20层的还要高,这是由于之前的网络模型随着网络层不断加深会造成梯度爆炸和梯度消失的问题。

随着深度学习技术的不断进步,ResNet及其变体已经广泛应用于多种视觉任务,包括但不限于图像分类、物体检测、语义分割等。ResNet的成功不仅体现在它的性能上,更在于它为后来的网络架构设计提供了灵感,诸如DenseNet、Inception等都受到了ResNet设计的启发。

论文地址:https://arxiv.org/pdf/1512.03385.pdf

亮点

1、提出Residual模块
2、使用Batch Normalization加速训练(丢弃dropout)
3、残差网络:易于收敛、很好的解决了退化问题、模型可以很深,准确率大大提高

ResNet模型结构

1、残差学习

结构1:Identity Block:输入和输出的dimension是一样的,用于增加网络的深度,可以串联多个

结构2:Conv Block:输入和输出的dimension是不一样的,用于改变网络的维度,不能连续串联

2、ResNet模型 

论文展示的ResNet-layer模型

BottleNeck中就是咱们先前学习的残差块啦,往往第一个BottleNeck中是Conv Block,之后是Identity Block串联例如BottleNeck × 3中 第一个残差块是Conv Block,剩下两个是Identity Block

因为CNN最后都是要把输入图像一点点的转换成很小但是depth很深的feature map,
一般的套路是用统一的比较小的kernel(比如VGG都是用3*3),但是随着网络深度的增加,output的channel也增大(学到的东西越来越复杂)
所以有必要在进入Identity Block之前,用Conv Block转换一下维度,这样后面就可以连续接Identity Block.

当是Conv Block时,3 × 3 卷积核中的stride =2,从而实现将特征图大小减半,当是Identity Block,3 × 3 卷积核中的stride =1,不改变特征图大小

不过在原论文中第一个1 × 1卷积层的步长是2,第二个3 × 3卷积层步长是1

但在pytorch官方实现过程中第一个1 × 1卷积层的步长是1,第二个3 × 3卷积层步长是2,这样能给在imagenet的top1上提升大概0.5%的准确率

BN层使用注意事项

代码 

我回去翻翻 找到了立马上传

水平有限,有错希望大家能指正

点赞或收藏,能鼓励作者不断更新哟~

参考链接:

【DL系列】ResNet网络结构详解、完整代码实现-CSDN博客

4.ResNet50 网络结构_resnet50网络架构-CSDN博客

庖丁解牛-Resnet50 深度剖析,细致讲解,深入理解-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/689237.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端的开发规范

作为一个程序员开发规范是相当重要的,因为遵守开发规范有很多好处: 规范的代码可以促进团队合作;规范的代码可以减少bug处理;规范的代码可以降低维护成本;规范的代码有助于代码审查;养成代码规范的习惯&am…

安全防御-第五次

新建NAT策略 新建NAT策略 双机热备 FW1 FW3 新建带宽策略 办公区限流

百度百家号旋转验证码识别研究

最近研究了一下图像识别,一直找到很好的应用场景,今天我就发现可以用百度的旋转验证码来做一个实验。没想到效果还挺好,下面就是实际的识别效果。 1、效果演示 2、如何识别 2.1准备数据集 首先需要使用爬虫,对验证码图片进行采…

引入成熟的Pytest自动化测试框架

虽然我们能使用脚本编写自动化测试框架,但没有必要重复找车轮子,引入成熟的自动化测试框架即可, Pytest是目前最成熟、功能最全面的Python测试框架之一,简单灵活、易于上手,可完全兼容其他测试框架如unitest&#xff…

Unittest+Selenium模块驱动自动化测试实战

UnittestSelenium自动化测试框架使用模块驱动测试模型将冗余的代码封装成类,且基于PageObject的自动化设计模式,通过分层的方式将页面对象、操作、业务分开处理。 1、首先创建自动化测试框架的文件模块架构,创建common、base、testcase、rep…

The Captainz NFT 概览与数据分析

作者:stellafootprint.network 编译:cicifootprint.network 数据源:The Captainz NFT Collection Dashboard The Captainz 是 Memeland 的旗舰系列,由 9,999 个实用性极强的 PFP 组成。持有者在 Memeland 宇宙中展开了一场神…

SG-9101CB(可编程+105℃晶体振荡器)

SG-9101CB 系列是一款高精度可编程性的晶体振荡器,能够在0.67 MHz至170 MHz的频率范围内以1ppm的步长精确调整频率。这款振荡器支持宽范围的电源电压(1.62 V至3.63V),并提供使能(OE)或待机(ST&a…

App启动优化笔记 1

app大致的启动流程。有Launcher进程,system_server进程,zygote进程,APP进程。 Launcher进程:启动activity来启动应用 system_server进程:(ams是其中的一个binder):发送一个socket消息给Zygote。 zygote进程:收到消息后,fork新的进程,---》app进程启动 APP进程:…

【复现】Panalog大数据日志审计系统 RCE漏洞_51

目录 一.概述 二 .漏洞影响 三.漏洞复现 1. 漏洞一: 四.修复建议: 五. 搜索语法: 六.免责声明 一.概述 Panalog大数据日志审计系统定位于将大数据产品应用于高校、 公安、 政企、 医疗、 金融、 能源等行业之中,针对网络流…

关于IOPS指标对性能的影响

IOPS (Input/OutputPer Second) IOPS 即每秒的输入输出量(或读写次数),是衡量磁盘性能的主要指标之一。IOPS是指单位时间内系统能处理的I/O请求数量,一般以每秒处理的I/O请求数量为单位,I/O请求通常为读或写数据操作请求。随机读写频繁的应用…

【AGI视频】Sora的奇幻之旅:未来影视创作的无限可能

在五年后的未来,科技的发展为影视创作带来了翻天覆地的变化。其中,Sora视频生成软件成为了行业的翘楚,引领着全新的创作潮流。Sora基于先进的Transformer架构,将AI与人类的创造力完美结合,为观众带来了前所未有的视听盛…

【ArcGIS微课1000例】0103:导出点、线、面要素的折点坐标值

点要素对应的是一个或者若干个坐标,线要素对应的是对个坐标值对应的点连起来,面要素是多个坐标值对应的点连起来构成的封闭多边形。本文讲述导出点的坐标值。 文章目录 一、点要素坐标导出1. 计算点坐标2. 导出点坐标二、线要素坐标导出1. 生成线要素折点2. 计算折点坐标3. 导…

第13章 网络 Page749~755 asio核心类 ip::tcp::acceptor

4,ip::tcp::acceptor ip::tcp::socket类提供用于客户端 async_connect()(发起连接)方法,但没有提供服务端 用于assync_accept()(接受连接)的方法;这正对应了客户端和服务端之间的"多对一&…

海外媒体发稿:8个提升影响力的日韩地区媒体发稿推广策略-华媒舍

在今天的数字化时代,媒体发稿推广成为企业和个人增加影响力的重要方式。特别是在日韩地区,这个拥有庞大媒体市场和活跃社交媒体用户的地区,正确的推广策略将对影响力的提升起到关键作用。我们将介绍8个提升影响力的日韩地区媒体发稿推广策略。…

软件测试-功能测试-测试流程-如何进行需求评审?对于测试人员来讲,如何从测试的角度评审需求文档?

导言 产品人员编写的需求文档,无疑是一个项目或者一项新功能的开端。需求文档的优劣,直接影响开发人员的代码质量,更会影响到后续的测试工作。所以,我认为,需求评审对于开发质量以及测试质量至关重要,那么…

前端判断对象为空

一.使用JSON.stringify()方法: JSON.stringify() 是将一个JavaScript对象或值转换为JSON格式字符串,如果最终只得到一个{},就说明他是一个空对象 let obj1 {}; console.log(JSON.stringify(obj1) "{}"); //true 表示为空对象l…

Python面向对象:什么是面向对象程序设计

编程范式 编程即写程序or代码,具体是指程序猿用特定的语法数据结构算法编写代码,目的是用来告诉计算机如何执行任务。 如果把编程的过程比喻为练习武功,那么编程范式指的就是武林中的各种流派,而在编程的世界里最常见的两大流派就…

微信小程序:实现微信小程序应用首页开发 (本地生活首页)

文章目录 小程序应用页面开发1、创建项目并配置项目目录结构配置导航栏效果三、配置 tabBar 效果四、轮播图实现4.1 创建轮播图数据容器4.2 定义一个请求轮播图数据的接口4.3 页面加载调用 数据请求接口 五、九宫格实现5.1 获取九宫格数据5.2 结构和样式的完善六、图片布局实现…

基于 Amazon EC2 和 Amazon Systems Manager Session Manager 的堡垒机的设计和自动化实现

1. 背景 在很多企业的技术实现中,由于数据安全和合规性要求,大部分的应用服务都部署在私有云环境或专用网络中。为了满足开发人员和运维团队从本地数据中心安全访问云上资源的需求,采用堡垒机作为一种有效的解决方案变得尤为重要。 堡垒机的…

Java数组的传递

Java数组的传递过程中,值会不会改变 最后的运行结果是 String类型的值没有改变,char[]类型的值改变了。char[]打印出的并不是值,而是地址。 public class Test1{String str new String("good");char[] ch {a,b,c};public void ch…