图像识别之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 × 4中 第一个残差块是Conv Block,剩下三个是Identity Block

因为CNN最后都是要把输入图像一点点的转换成很小但是depth很深的feature map,
一般的套路是用统一的比较小的kernel(比如VGG都是用3*3),但是随着网络深度的增加,output的channel也增大(学到的东西越来越复杂)

所以有必要在进入Identity Block之前,用Conv Block转换一下维度,这样后面就可以连续接Identity Block.

BottleNeck是Conv Block时,3 × 3 卷积核中的stride =2,从而实现将特征图大小减半,在上诉论文展示的图片的output size中可以体现出来,当是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博客

相关推荐

  1. cnn-resnet实现代码

    2024-02-20 20:26:01       24 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-20 20:26:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-20 20:26:01       101 阅读
  3. 在Django里面运行非项目文件

    2024-02-20 20:26:01       82 阅读
  4. Python语言-面向对象

    2024-02-20 20:26:01       91 阅读

热门阅读

  1. git_note

    2024-02-20 20:26:01       45 阅读
  2. 智能红包分配算法:实现均衡随机金额分配

    2024-02-20 20:26:01       48 阅读
  3. Android 15的开发者预览版

    2024-02-20 20:26:01       49 阅读
  4. 【工具类】非 sudo 运行 docker

    2024-02-20 20:26:01       58 阅读
  5. 关于类模板对象做函数参数的方法

    2024-02-20 20:26:01       47 阅读
  6. 关于三色标记算法

    2024-02-20 20:26:01       50 阅读
  7. 在html中target有什么作用

    2024-02-20 20:26:01       41 阅读
  8. 【leetcode】贪心算法介绍

    2024-02-20 20:26:01       52 阅读
  9. Pinia 官网速通

    2024-02-20 20:26:01       59 阅读
  10. golang 的内存分配

    2024-02-20 20:26:01       41 阅读
  11. CP AUTOSAR的信息安全机制汇总(一)

    2024-02-20 20:26:01       48 阅读
  12. C语言20240219练习

    2024-02-20 20:26:01       50 阅读