基于ResNet50算法实现图像分类识别

news2024/11/25 14:42:46

概要

 

在本文中将介绍使用Python语言,基于TensorFlow搭建ResNet50卷积神经网络对四种动物图像数据集进行训练,观察其模型训练效果。

 

一、目录

  • ResNet50介绍

  • 图片模型训练预测

  • 项目扩展

 

二、ResNet50介绍

ResNet50是一种基于深度卷积神经网络(Convolutional Neural Network,CNN)的图像分类算法。它是由微软研究院的Kaiming He等人于2015年提出的,是ResNet系列中的一个重要成员。ResNet50相比于传统的CNN模型具有更深的网络结构,通过引入残差连接(residual connection)解决了深层网络训练过程中的梯度消失问题,有效提升了模型的性能。

  1. 深度卷积神经网络(CNN) CNN是一种专门用于图像处理的神经网络结构,具有层次化的特征提取能力。它通过交替使用卷积层、池化层和激活函数层,逐层地提取图像的特征,从而实现对图像的分类、检测等任务。然而,当网络结构变得非常深时,CNN模型容易面临梯度消失和模型退化的问题。

  2. 残差连接(Residual Connection) 残差连接是ResNet50的核心思想之一。在传统的CNN模型中,网络层之间的信息流是依次通过前一层到后一层,而且每一层的输出都需要经过激活函数处理。这种顺序传递信息的方式容易导致梯度消失的问题,尤其是在深层网络中。ResNet50通过在网络中引入残差连接,允许信息在网络层之间直接跳跃传递,从而解决了梯度消失的问题。

  3. 残差块(Residual Block) ResNet50中的基本构建块是残差块。每个残差块由两个卷积层组成,这两个卷积层分别称为主路径(main path)和跳跃连接(shortcut connection)。主路径中的卷积层用于提取特征,而跳跃连接直接将输入信息传递到主路径的输出上。通过将输入与主路径的输出相加,实现了信息的残差学习。此外,每个残差块中还使用批量归一化(Batch Normalization)和激活函数(如ReLU)来进一步提升模型的性能。

  4. ResNet50网络结构 ResNet50网络由多个残差块组成,其中包括了一些附加的层,如池化层和全连接层。整个网络的结构非常深,并且具有很强的特征提取能力。在ResNet50中,使用了50个卷积层,因此得名ResNet50。这些卷积层以不同的尺寸和深度对图像进行特征提取,使得模型能够捕捉到不同层次的特征。

三、模型训练预测

在本文中选取了常见的四种动物数据(猫、狗、马、鸡),文件夹结构如下图所示。

2ed59d07a4fd4421ad3d9549d55c5cfd.png

fe577a5925604abca176f605fb1c48df.png

在完成数据集的收集准备后,打开jupyter notebook平台,导入数据集通过以下代码可以计算出数据集的总图片数量。本次使用的数据集总图片为4000张。

import pathlib

data_dir = "./dataset/"
data_dir = pathlib.Path(data_dir)
image_count = len(list(data_dir.glob('*/*')))
print("图片总数为:",image_count)

然后划分TensorFlow的image_dataset_from_directory方法划分测试集和训练集。再构建模型。在本文中如下图所示

# 加载resnet50模型
model = keras.applications.ResNet50(weights='imagenet', include_top=True)

这段代码的目的是使用Keras库加载预训练的ResNet50模型,并将其应用于图像分类任务。

具体解释如下:

  • keras.applications.ResNet50: 这是Keras库中的一个函数,用于加载ResNet50模型。ResNet50是一个已经定义好的模型架构,包含了数十个卷积层、池化层和全连接层,用于图像分类任务。

  • weights='imagenet': 这个参数指定了模型所使用的权重。'imagenet'是一个大规模的图像数据集,ResNet50在该数据集上进行了预训练,因此通过设置这个参数,我们可以加载已经在该数据集上训练好的权重。这样的预训练权重可以提供较好的特征表示能力,有助于提升模型在图像分类任务上的性能。

  • include_top=True: 这个参数指定是否包含模型的顶层(即全连接层)。当设置为True时,加载的模型将包含原始ResNet50模型的所有层,包括最后的全连接层,用于输出分类结果。如果我们只需要使用ResNet50的特征提取能力而不需要分类层,则可以将该参数设置为False。

然后开始训练,其训练过程如下图所示

1b979f753a124110ab97ce91b286bfe3.png

通过上图可知,通过20轮迭代训练,在最后一轮迭代完成后,模型在测试集上面的精度为0.9875,精度还是非常高的。接下来就是打印下ACC曲线图和LOSS曲线图以及混淆矩阵图等。通过图片可知,算法的拟合度还是比较理想的。

dca5e0ba65ff4c58ae06d97e356d8c4b.png

 947e02b21bf645d78a43d77b47995acc.png

 69dbe35fcd7d4838b7c271e211eea0ba.png

 

三、项目扩展

在完成模型训练后,通过model.save方法保存模型为本地文件,然后就可以基于改模型开发出非常多的应用了,比如开发出API接口给别人调用等。

 

今天的分享就到这里,欢迎点赞收藏转发,感谢🙏

 

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

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

相关文章

智迪科技在创业板上市:市值约31亿元,谢伟明和黎柏松为实控人

7月17日,珠海市智迪科技股份有限公司(下称“智迪科技”,SZ:301503)在深圳证券交易所创业板上市。本次上市,智迪科技的发行价为31.59元/股,发行数量为2000万股,募资总额约为6.32亿元,…

多线程、高并发(理解一)

线程的简单了解 进程、线程、纤程创建线程的几种方式synchronizedvolatileAtomicXJUC 同步锁ReentrantLockCountDownLatch 倒数的门栓CyclicBarrier 复杂操作完成,再走后续逻辑Phaser 所有线程需要在屏障上等待才能进入下一步执行ReadWriteLockSemaphoreExchanger 线…

MQTT协议在物联网环境中的应用及代码实现解析(三)

三、使用C#PC端编程读取MQTT服务器上特定的主题信息 以下是使用C#编程利用MQTT协议接收MQTT服务器“mqtt.laobai.net”上的“laobai_topic001”主题上的订阅信息,并动态显示在多行文本框中的程序代码示例,包括完整的代码注释和编程说明: us…

javascript中过滤二维对象数组重复的字段并只保留唯一值(array.filter与Array.from)

javascript中过滤二维对象数组重复的字段并只保留唯一值 1.Array.filter过滤array.filter()方法 2.Array.from过滤Array.from方法 1.Array.filter过滤 在JavaScript中,你可以使用Array.filter()和Set数据结构来过滤二维对象数组中重复的字段,只保留唯一…

CSS三栏布局的几种自适应的排版方式

CSS三栏布局的几种方式&#xff0c;主要有 float、position、flex实现。 对红色、蓝色 box 设置 float&#xff0c;绿色不设。 <style>* {margin: 0;padding: 0;}.left {width: 200px;height: 300px;background-color: red;float:left;}.right {width: 200px;height: 300…

计算机图形硬件(二) 5 - 4 硬拷贝设备

我们可以使用几种格式来获得图像的硬拷贝输出。为了演示或存档&#xff0c;可以将图像文件传送到生成投影胶片、35 mm幻灯片或电影胶片的设备与服务部门。也可将图形输出到打印机或绘图仪上&#xff0c;从而在纸上打印出图像。 输出设备生成图片的质量依赖于可显示的点的大小和…

浅尝python 一

浅尝python一 一、注释二、指定数值精度三、算数运算符四、字符串格式化输出五、打印六、类型转换&#xff0c;不会改变原数据七、比较运算符综合练习 一、注释 1、单行注释&#xff0c;快捷键 command/ # 此行被注释掉 2、多行注释 本行被注释 本行被注释or""&quo…

react报错信息

报错信息 render函数里dom不能直接展示obj对象 取变量记得要有{} https://segmentfault.com/q/1010000009619339 这样在写的时候就已经执行方法了&#xff0c;所以此处用箭头函数&#xff08;&#xff09;》{}才会在点击时执行或者 遍历数据使用map来遍历&#xff0c;使用forea…

matplotlib用面积填充实现lmplot

文章目录 示例参数回归图 示例 在绘图时经常遇到类似区域填充的问题&#xff0c;比如对于 y sin ⁡ x y\sin x ysinx函数&#xff0c;想填充其与X轴所围成的区间&#xff0c;那么就可以使用fill_between函数。 import numpy as np import matplotlib.pyplot as pltx np.ara…

Java开发基础系列(八):泛型及反射

&#x1f60a; 作者&#xff1a; 一恍过去 &#x1f496; 主页&#xff1a; https://blog.csdn.net/zhuocailing3390 &#x1f38a; 社区&#xff1a; Java技术栈交流 &#x1f389; 主题&#xff1a; Java开发基础系列(八):泛型及反射 ⏱️ 创作时间&#xff1a; 2023年0…

ETLBox for .Net Crack

ETLBox for .Net Crack 为设计的轻量级ETL(提取转换负载)工具箱和数据集成库。NET。 ETL是现代商业智能应用程序的基础&#xff0c;是将分析与之前的所有其他组件分离的唯一方法。ETL是提取-加载、转换和转换的缩写&#xff0c;描述了一个由三个步骤组成的过程&#xff1a; 提取…

学生成绩管理系统|Python小应用练习

题目要求 实现学生成绩管理系统 输入学生成绩信息序列&#xff0c;获得成绩从高到低、从低到高、按某一门成绩的排列,相同成绩都按先录入排列在前的规则处理。 数据如下&#xff1a;(数据规则&#xff1a;学生姓名 高数成绩 英语成绩 大物成绩) SanZhang 70 80 61 SiLi 86 77 …

Java的五种数据类型解析

Java的五种数据类型解析 不知道大家对java的简单数据类型是否了解&#xff0c;下面针对Java的五种类型简单数据类型表示数字和字符&#xff0c;进行详细的讲解和分析。 一、简单数据类型初始化 在Java语言中&#xff0c;简单数据类型作为类的成员变量声明时自动初始化为默认值…

IDEA远程调试SpringBoot项目

IDEA远程调试SpringBoot项目 一、前提二、脚本三、运行远程项目四、本地配置五、使用场景六、扩展点 一、前提 保证线上的jar代码和本地代码一样 二、脚本 nohup java -Xdebug -Xnoagent -Djava.compilerNONE Xrunjdwp:transportdt_socket,servery,suspendn,address5001 -ja…

golang网络编程学习-websocket

golang网络编程学习-websocket 网络编程主要的内容是&#xff1a; 1.TCP网络编程 2.http服务 3.rpc服务 4.websocket服务 一、websocket编程 1.1服务端&#xff0c;代码来自网络&#xff0c;仅限于学习研究 package mainimport ("fmt""net/http""os…

智慧签 - 开源研究系列文章

这些天整理了一下以前的代码&#xff0c;将一个插件里的便签器的源码单独找出来&#xff0c;弄成了这个“智慧签”的程序。程序比较简单&#xff0c;具体请读者自己看代码。 1、 项目目录&#xff1b; 目录见下图&#xff0c;对代码进行了划分&#xff0c;比较简单。主处…

golang网络编程学习-1rpc

网络编程主要的内容是&#xff1a; 1.TCP网络编程 2.http服务 3.rpc服务 4.websocket服务 一、rpc RPC 框架----- 远程过程调用协议RPC&#xff08;Remote Procedure Call Protocol)-----允许像调用本地服务一样调用远程服务。 RPC是指远程过程调用&#xff0c;也就是说两台服…

visual studio配置调用c++ dll opencv为例

1&#xff0c;配置VC目录&#xff0c;包含目录和库目录。 2&#xff0c;链接器->输入->包含目录 3&#xff0c;生成目录下包含对应的dll文件 4&#xff0c;需注意对应的Debug&#xff0c;Release及X86&#xff0c;X64选项

flutter 自适应宽高气泡框,聊天气泡框

先看效果 前言&#xff1a;&#xff1a;&#xff1a;&#xff1a; 网上好多气泡框&#xff0c;都让写固定宽高&#xff0c;无法自适应文本内容。 还有的就是通过算child 然后动态计算气泡框宽高&#xff0c;脱裤子&#x1f4a8;&#xff0c;放到listview 刷新数据还会丢ui&am…

Spring Cloud Alibaba的组件(解决方案)

Spring Cloud Alibaba的组件&#xff08;解决方案&#xff09; 前言Spring CloudSpring Cloud Alibaba问题的解决方案面临的问题Spring Cloud Alibaba给出的解决方案 前言 在之前的文章里我们介绍了分布式微服务以及其需要解决的问题&#xff0c;现在我们看看在Spring Cloud A…