基于VggNet网络与ResNet神经网络的物体分类识别研究-附Matlab代码

news2025/1/20 7:09:46

⭕⭕ 目 录 ⭕⭕

  • ✳️ 一、引言
  • ✳️ 二、VGGNet网络与ResNet网络模型
    • ✳️ 2.1 VGG16 网络
    • ✳️ 2.2 ResNet-18网络
  • ✳️ 三、训练与实验结果
    • ✳️ 3.1 CIFAR-10 数据集
    • ✳️ 3.2 ResNet-18训练与识别结果
    • ✳️ 3.3 VGG16 网络训练与识别结果
  • ✳️ 四、参考文献
  • ✳️ 五、Matlab代码获取

✳️ 一、引言

近年来,随着计算机技术的飞速进步, 图像分类具有非常强的实际应用价值,一直是计算机视觉方向的一个重要研究课题, 图像分类是将具有相同属性的目标划分为一个类别,从分类的细致程度上分为粗粒度分类和细粒度分类两种。 早期分类类别属性差异较大的分类就是粗粒度分类,比如猫狗猴子的动物类别分类,目前粗粒度分类与人们日常生活息息相关,具有不可或缺的地位,粗粒度分类的研究还有很大发展空间。但随着技术和人们思维的发展,人们不再局限于粗粒度分类上,于是提出了细粒度图像分类这一概念,细粒度图像分类是指在识别出图像中目标物体的基础上,进行更细致类别区分,与粗粒度图像分类不同的是, 细粒度图像分类是在同一类属性的目标物体下进行类别区分,比如分类车的款式、鸟的品种、方便面的品牌等。在产品质量检测、生物多样性自动监测、智能零售、智能交通监测等方面有广泛的应用价值。

✳️ 二、VGGNet网络与ResNet网络模型

✳️ 2.1 VGG16 网络

深度卷积神经网络在细粒度图像分类任务中的应用非常普遍,常见的深度卷积神经网络有 AlexNet、 Res-Net、 VGG-Net 等。 VGG-Net 是由牛津大学的 Visual Geometry Group 于 2014 年提出。 VGG-Net 有多种配置方式例如 VGG-A、 VGG-B、 VGG-D 等。VGG-D 是 VGG-Net 中使用最普遍的配置方式, VGG-D 有 16 个权重层,其中包括13 个卷积层、 2 个全连接层和 1 个分类层,因此 VGG-D 又被称作 VGG16。本框架使用的基础神经网络是 VGG16 网络,同时 VGG16 网络也是本文的基准网络之一,本节将对 VGG16 网络展开详细的介绍,其结构如图1所示:

在这里插入图片描述

图1 VGG16 网络结构图示意图

如图1所示, VGG16 网络由 5 个卷积块、 2 个全连接层和 1 个分类层组成。第一个卷积块由 2 个卷积层和 1 个池化层组成, 其中每个卷积层均含有 64 个卷积核,且卷积核的尺寸分别为 3× 3× 3 和 3× 3× 64,两个卷积层的像素填充值均为 1,步长也均为 1,可知图像经第一个卷积块的 2 个卷积层提取特征后并没有改变输出特征图的尺寸。 在第一个卷积块的池化层中滑动窗口的尺寸为 2× 2,滑动步长为 2,因此经一次池化操作后特征图的尺寸缩为输入特征图的 1/2。在其余后续四个卷积块中分别有 2、 3、 3、 3 个卷积层并且每一个卷积块之后都连接一个最大池化层。第二个卷积块的 2 个卷积层均有 128 个卷积核,第三个卷积块的三个卷积层均有 256 个卷积核,第四和第五个卷积块的所有卷积层均有 512 个卷积核,并且所有卷积层的卷积核的二维平面尺寸均为 3× 3,只是不同卷积层的卷积核在深度上不同,像素填充值为 1,步长为 1,因此可知在 VGG16 网络中卷积操作均不改变特征图的尺寸,而在后续 4 个卷积块中的池化层中滑动窗口的尺寸均为 2× 2,步长均为 2,因此每经一次池化操作,特征图缩小为原来的 1/2。假设原始图像的大小为 224× 224,则截取第五个卷积块的池化层的输出得到的特征图的尺寸为 7× 7× 512。在 VGG16 网络中全连接层均有 4096 个隐藏神经元,分类层有 1000个神经元。

✳️ 2.2 ResNet-18网络

在卷积神经网络构建过程中, 选择良好的特征提取基础网络,有助于模型获得更加有效的高维语义特征,在具体的任务中取得更加良好的表现。因此,本文使用由 He等人提出,并在 ImageNet 大规模视觉识别挑战赛(ILSVRC)中获得 2015 年冠军的ResNet 网络结构作为大气光估计的基础特征提取网络。

学者们通过研究发现,随着深度学习网络层数不断加深,网络所提取的特征维度也不断增加。然而更深的网络使得反向传播的链路也在不断变长,导致最上层的梯度难以良好的传播到底层, 指导底层参数的更新, 从而出现梯度弥散导致网络无法收敛,网络出现退化的现象。 为了解决该问题, He 等人[51]在网络中引入了“shortcut”分支,该分支与原始网络组成一个基本单元,被称为残差模块,其结构如图2所示。

在这里插入图片描述

图2 残差结构示意图

如上图所示, 左侧为“shortcut”结构,右侧为卷积分支。 He 等人[51]认为, 如果想使前层网络不受后面层的影响,使模型变为浅层网络,那么网络后面的层需要进行恒等映射。 但是如果让深层的网络直接学习这个潜在的恒等映射H(x)= x十分困难,因此 He[2] 等人将网络设计为如下公式:

在这里插入图片描述

其中 x 为上一层网络的输出,即改残差模块的输入, F(x)为卷积分支的映射函数, H(x)为最终输出, +由专门的 Element-wise addition 模块完成,卷积分支会保证F(x)与 x 的输出大小和维度相同。从上式中可以看出,当 F(x)=0时,构成恒等映射H(x)= x。其残差函数的可以表示为:

在这里插入图片描述
He 等人[2]认为拟合残差比直接拟合函数更加容易。例如把 10 映射到 10.1,那么引入残差分支前是 F’ (10)=10.1,引入残差分支后是H(10)=10.1,H(10)= F(10)+10,F(10)=0.1。 此处的 F’ 和 H 表示对输入数据进行映射, 引入残差分支后的,可以看出对于输出变化残差结构更为敏感。比如输出从 10.0 变到 10.1,映射 F` 的输出增加了 1%,而对于残差结构 F 输出从 10.0 到 10.1,映射 H 是从0.0到0.1,增加了 100%。更大的变化使得网络参数可以进行较大的调整,由于通过“shortcut”分支去掉相同的主体部分, 突出微小的变化, 所以效果更好。

为了提高网络执行效率,采用 ResNet 网络中最轻量级的结构 ResNet-18 作为基础网络,其网络结构如所示:

在这里插入图片描述

图 3 ResNet-18 结构图

如上图所示, 网络在训练时输入图像为CIFAR-10 数据,每个卷积模块由一个 3x3 的卷积层,一个 BatchNorm 层和一个 ReLU 层组成,最后一层卷积后连接一个 Global Average Pooling层将特征尺寸改为 1x1,这样做的好处可以保证网络输入任意大小的图片。

✳️ 三、训练与实验结果

✳️ 3.1 CIFAR-10 数据集

该数据集共有 60 000 幅彩色图像, 分为 10 类, 每类 6000 幅图。如图3所示, CIFAR-10 数据集中 50000 幅用于训练, 另外10000 幅用于测试。

在这里插入图片描述

图34 CIFAR-10 数据集

✳️ 3.2 ResNet-18训练与识别结果

基于ResNet-18网络训练结果如下,在单GPU环境下训练该网络共用时41分钟。随着训练迭代次数的增强,准确率逐渐上升,Loss曲线逐渐下降。

在这里插入图片描述

图5 ResNet-18网络训练结果

随后,导入一幅图像进行识别,该网络模型准确识别结果为“airplane”,整个识别过程共用时1.41秒。

在这里插入图片描述

图6 ResNet-18识别结果

✳️ 3.3 VGG16 网络训练与识别结果

基于VGG16网络训练结果如下,在单GPU环境下训练500轮共用时26分钟。随着训练迭代次数的增强,准确率逐渐上升,Loss曲线逐渐下降。

在这里插入图片描述

图7 VGG16网络训练结果

同样地,导入一幅图像进行识别,该网络模型准确识别结果为“airplane”,整个识别过程共用时0.19秒。

在这里插入图片描述

图8 VGG16网络的识别与分类结果

✳️ 四、参考文献

[1] Simonyan K, Zisserman A. Very deep convolutional networks for large-scale image recognition [Online], available: https://arxiv.org/abs/1409.1556, April 10, 2015

[2] He K, Zhang X, Ren S. Deep Residual Learning for Image Recognition[C]. 2015 IEEE Conference on Computer Vision and Pattern Recognition (CVPR), 2015: 770-778

✳️ 五、Matlab代码获取

上述演示实例,均由Matlab代码实现,可私信博主获取。


博主简介:研究方向涉及智能图像处理、深度学习、卷积神经网络等领域,先后发表过多篇SCI论文,在科研方面经验丰富。任何与算法程序科研方面的问题,均可私信交流讨论


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

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

相关文章

使用vue脚手架快速搭建vue 2项目

简单了解vue-cli 官网地址:https://cli.vuejs.org/zh/guide/browser-compatibility.html 前提 1.安装node(js代码的运行环境)、npm; 2.全局安装vue-cli; 命令创建项目 vue create hello-word 等待项目创建成功即可 开发工具打开刚刚创建的项目 项目结构如图…

RS232和RS485

1. 串口存在的问题 电器接口不统一。UART只是对信号的时序和格式进行定义,未定义接口的电气特性 Uart通信一般直接使用从处理器的TTL电平,但不同的处理器使用的电平存在差异,导致不通处理器一般不能使用UART相互连接 UART没有规定连接器件的连…

Css 3 动画

动画(animation)是css3中具有颠覆性的特征之一,可通过设置多个节点来精确控制一个或一组动画,常用来实现复杂的动画效果。 相比较过渡,动画可以实现更多变化,更多控制,连续自动播放等效果。 动…

【毕业设计-课程设计】-单片机电子密码锁设计

资源链接在文章最后,订阅查看获取全部内容及资料,如需可私信提供硬件。 一、 主要功能: 1.按键设置6位密码,输入密码若密码正确,则锁打开。显示open! 2.密码可以自己修改(6位密码),必须是锁打开时才能改密。为防止误操作,修改密码得输入两次。 3.若密码输入错误次数…

Metabase学习教程:仪表盘-1

BI仪表盘最佳实践 学习如何制作出色的商业智能仪表盘。 在Metabase中,仪表盘可以在网格中组织图表和文本卡片。关于基本知识,请查看我们的文档创建仪表盘。这篇文章介绍了有关什么是优秀的商业智能仪表盘的高级概念,并包括一些关于如何充分…

网络程序设计——重叠I/O模型

目录 1、重叠I/O (1)概念 (2)重叠数据结构WSAOVERLAPPED 2、重叠I/O的相关函数 (1)套接字创建 (2)发送数据函数 (3)两种获取传输数据数量的方法 3、…

17.指针的概念及其分类

内存 存储器 存储数据的器件 外部存储器 长期存放数据,掉电不丢失数据。 常见的外存数据:硬盘、ROM、U盘 内部存储器 暂时存储数据,掉电丢失 常见的内存数据:ram、DDR 物理内存 实实在在的存储设备。 虚拟内存 操作系统虚拟…

FFmpeg进阶: 截取视频生成gif动图

文章目录1.封装视频滤镜2.截取视频生成gif3.gif优化4.示例效果现在互联网上很多人都通过表情包来表达自己的情绪,常用的表情包很多都是视频文件的一部分。这里就介绍一下如何通过ffmpeg截取视频生成gif动图。其实原理很简单,首先我们seek到视频对应的位置…

Go sync.WaitGroup的学习

一.前言 二. 夯实基础 2.1 sync.WaitGroup是什么? Go语言中除了可以使用通道(channel)和互斥锁进行两个并发程序间的同步外,还可以使用等待组进行多个任务的同步,等待组可以保证在并发环境中完成指定数量的任务 在…

Spring Boot 中的Thymeleaf分页和排序示例

在上一篇文章中,我们已经知道如何构建Spring Boot Thymeleaf示例。今天,我将继续使用 Spring Data 和 Bootstrap 进行 Thymeleaf 分页和排序(按列标题)。 百里香叶分页和排序示例 假设我们在数据库中有这样的教程表:…

深入理解 Android 模块化里的资源冲突

翻译自 Understanding resource conflicts in Android ⚽ 前言 作为 Android 开发者,我们常常需要去管理非常多不同的资源文件,编译时这些资源文件会被统一地收集和整合到同一个包下面。根据官方的《Configure your build》文档介绍的构建过程可以总结这…

RFSoC应用笔记 - RF数据转换器 -22- API使用指南之配置DAC相关工作状态和中断相关函数使用

前言 本文完结后,关于RFSoC的配置的API函数部分就全部介绍完毕,后续有空将更新介绍简单的射频收发回环示例工程,不定时更新,敬请期待。 配置DAC相关工作状态 XRFdc_SetInterpolationFactor 函数原型 u32 XRFdc_SetInterpolat…

内存一致性,指令重排序,内存屏障,volatile解析

文章目录为什么会存在“内存可见性”问题重排序与内存可见性的关系as-if-serial语义单线程程序的重排序规则多线程程序的重排序规则happen-before是什么解决方案:内存屏障Volatile关键字解决内存可见性问题的实现原理为什么会存在“内存可见性”问题 下图为x86架构…

redis 的企业实战应用 (二)

前言: 如今redis的常用场景有 短信登录:使用redis共享session来实现 商户查询缓存:会理解缓存击穿,缓存穿透,缓存雪崩等问题,让小伙伴的对于这些概念的理解不仅仅是停留在概念上,更是能在代码…

【数学】仿射变换

∣降维打击NightguardSeries.∣\begin{vmatrix}\Huge{\textsf{ 降 维 打 击 }}\\\texttt{ Nightguard Series. }\end{vmatrix}∣∣∣∣∣​ 降 维 打 击 Nightguard Series. ​∣∣∣∣∣​ 注:本文讨论的仿射变换仅为y轴上的伸缩变换,且难度在高中生理…

H3CNE V7.0 视频教程

构建中小企业网络全套PPT汇总【V7版本】 第1章 计算机网络概述 第2章 OSI参考模型与TCP IP模型 第3章 局域网基本原理 第4章 广域网基本原理 第5章 IP基本原理 第6章 TCP和UDP基本原理 第7章 路由器、交换机及其操作系统介绍 第8章 命令行操作基础 第9章 网络设备文件…

mycat-3-实战篇

1 总结: 1:用的表必须在mycat的配置文件中配置。 2:mycat默认分片策略中,都是针对表的主键,默认是id,如果主键不是id的,请去rule.xml自己复制一份修改 3: 2 注意细讲解 1:schem…

Springboot启动流程分析(四):完成启动流程

目录 一 添加BeanPostProcessors到IOC容器 二 国际化支持 三 初始化监听器的多路播放器 四 刷新容器 五 注册监听器到IOC容器的多播器 六 完成bean的大规模实例化 6.1 大规模实例化bean 6.1.1 连续三层do...while循环作用 6.1.2 FactoryBean是什么?为什么要…

04 YAML kubetnetes世界里的通用语

文章目录1. 前言2. 声明式和命令式是怎么回事?3. 什么是YAML?4. 什么是API对象?4.1 k8s都有哪些资源对象4.2 列出kubectl 命令详细执行过程5. 如何描述 API 对象5.1 命令式5.2 声明式5.2.1 声明式YAML语法详解5.2.1.1 header部分详解5.2.1.2 …

【教学类-19-01】20221127《ABAB式-规律排序-A4竖版2份》(中班)

展示效果: 单人使用样式: 单页打印样式 ​ 背景需求: 中班幼儿需要掌握ABAB规律排序,如下图所示,AB两个元素能外形不同、颜色不同。 ​ ​利用Python Word单元格填色功能,随机生成AB样式,引…