系列文章

手把手教你:图像识别的垃圾分类系统

手把手教你:人脸识别考勤系统

手把手教你:基于粒子群优化算法(PSO)优化卷积神经网络(CNN)的文本分类


目录

  • 系列文章
  • 一、项目简介
  • 二、水果分类结果预测
  • 三、环境安装
    • 1.环境要求
    • 2.环境安装示例
  • 四、重要代码介绍
    • 1.数据预处理
    • 2.分类模型构建
    • 3.模型训练
  • 五、训练自己的数据
    • 1.项目目录如下
    • 2.分类模型训练
  • 六、完整代码地址

一、项目简介

本文主要介绍如何使用python搭建:一个基于深度残差网络(ResNet)的水果图像分类识别系统

项目只是用水果分类作为抛砖引玉,其中包含了使用ResNet进行图像分类的相关代码。主要功能如下:

  • 数据预处理,生成用于输入TensorFlow模型的TFRecord的数据。
  • 模型构建及训练,使用tensorflow.keras构建深度残差网络。
  • 预测水果分类并进行模型评估。

如各位童鞋需要更换训练数据,完全可以根据源码将图像和标注文件更换即可直接运行。

博主也参考过网上图像分类的文章,但大多是理论大于方法。很多同学肯定对原理不需要过多了解,只需要搭建出一个预测系统即可。

本文只会告诉你如何快速搭建一个基于ResNet的图像分类系统并运行,原理的东西可以参考其他博主

也正是因为我发现网上大多的帖子只是针对原理进行介绍,功能实现的相对很少。

如果您有以上想法,那就找对地方了!


不多废话,直接进入正题!

二、水果分类结果预测

首先我们来看下模型最终预测的水果类别的情况。本项目采用的数据集共有13种水果:香蕉、樱桃、无花果、芒果等等。博主英语不好就不在这献丑了,感兴趣的同学可以百度翻译


  • 接下来是模型预测的结果,这里我输入了2个单张图片,来验证模型的分类结果:

  • 可以看到2张图片分别为:香蕉、桔柚,模型都准确预测并分类正确。

三、环境安装

1.环境要求

本项目开发IDE使用的是:Anaconda中的jupyter notebook,大家可以直接csdn搜索安装指南非常多,这里就不再赘述。

因为本项目基于TensorFlow因此需要以下环境:

  • tensorflow >= 2.0
  • pandas
  • scikit-learn
  • numpy
  • OpenCV2
  • matplotlib

2.环境安装示例

环境都可以通过pip进行安装。如果只是想要使用博主训练的模型直接进行预测,不需要对模型重新训练的话,这边建议tensorflow安装cpu版的。

如果没使用过jupyter notebook通过pip安装包的同学可以参考如下:

  • 新建一个terminal窗口:

  • 在新建的窗口中使用pip进行安装:

点开“终端”,然后通过pip进行安装pandas,其他环境包也可以通过上面的方法安装。

四、重要代码介绍

环境安装好后就可以打开jupyter notebook开始愉快的执行代码了。由于代码众多,博客中就不放入最终代码了,有需要的童鞋可以在博客最下方找到下载地址

1.数据预处理

  • 首先我们将需要处理的图像分为训练集、测试集。

  • 其中按13类的水果分别建立文件夹放入对应水果图片:

  • 这里拿芒果举例:

  • 使用opencv2来读取图像生成:(100,100,3)的三通道图像数据。

# 定义图像处理函数
def read_img(path):print("数据集地址:"+path)imgs = []labels = []for root, dirs, files in tqdm(os.walk(path)):for file in files:# print(path+'/'+file+'/'+folder)# 读取的图片img = cv2.imread(os.path.join(root, file))# 将读取的图片数据加载到imgs[]列表中imgs.append(img)# 将图片的label加载到labels[]中,与上方的imgs索引对应labels.append(str(os.path.basename(root)))return imgs,labels
  • 并处理图像,和对类别进行LabelEncoder编码处理,处理后情况如下:
  • 训练集共计:6560张图片,测试集共计:2207张图片。
  • 然后将数据储存为TFRecord:

2.分类模型构建

  • 使用TensorFlow搭建一个ResNet模型:

3.模型训练

  • 模型训练,设置批处理batch_size:64,每2个epoch保存一次模型,博主总共跑了30个epoch。
from tensorflow.keras.callbacks import (ReduceLROnPlateau,EarlyStopping,ModelCheckpoint,TensorBoard)# 编译模型来配置学习过程
ResNet_model.compile(optimizer=optimizer,loss='sparse_categorical_crossentropy',metrics=['accuracy'])
callbacks = [
#     ReduceLROnPlateau(verbose=1),# 提前结束解决过拟合# EarlyStopping(patience=10, verbose=1),# 保存模型ModelCheckpoint(checkpoints + 'resnet_train_{epoch}.tf', monitor='accuracy',verbose=0,# 当设置为True时,将只保存在验证集上性能最好的模型save_best_only=True, save_weights_only=True,# CheckPoint之间的间隔的epoch数period=2),TensorBoard(log_dir='logs')
]
# 模型训练
history = ResNet_model.fit(data_train, epochs = epoch,callbacks=callbacks,validation_data = data_test)
  • 训练和测试集的准确率如下,可以看到训练至15个epoch左右已经能达到很高的准确率了。

五、训练自己的数据

1.项目目录如下

2.分类模型训练

  • 需要将自己的数据集整理后放入以下项目目录中:

./img/train/

./img/test/

下目录设置,一个类别的图片放入一个文件夹中,如下:

然后按顺序执行下述代码:

a数据预处理.ipynb
b加载并训练模型.ipynb
c模型评估及预测.ipynb

即可开始分类模型训练


六、完整代码地址

由于项目代码量和数据集较大,感兴趣的同学可以下载完整代码,使用过程中如遇到任何问题可以在评论区进行评论,我都会一一解答。

完整代码下载:
【代码分享】手把手教你:基于深度残差网络(ResNet)的水果分类识别系统

手把手教你:基于深度残差网络(ResNet)的水果分类识别系统相关推荐

  1. dlibdotnet 人脸相似度源代码_使用dlib中的深度残差网络(ResNet)实现实时人脸识别 - supersayajin - 博客园...

    opencv中提供的基于haar特征级联进行人脸检测的方法效果非常不好,本文使用dlib中提供的人脸检测方法(使用HOG特征或卷积神经网方法),并使用提供的深度残差网络(ResNet)实现实时人脸识别 ...

  2. 基于深度残差网络的番茄叶片病害识别方法

    基于深度残差网络的番茄叶片病害识别方法 1.研究思路 该方法首先利用贝叶斯优化算法自主学习网络中难以确定的超参数,降低了深度学习网络的训练难度.在此基础上,通过在传统深度神经网络中添加残差单元,解决了 ...

  3. TF2.0深度学习实战(七):手撕深度残差网络ResNet

    写在前面:大家好!我是[AI 菌],一枚爱弹吉他的程序员.我热爱AI.热爱分享.热爱开源! 这博客是我对学习的一点总结与记录.如果您也对 深度学习.机器视觉.算法.Python.C++ 感兴趣,可以关 ...

  4. 何恺明编年史之深度残差网络ResNet

    文章目录 前言 一.提出ResNet原因 二.深度残差模块 1.数学理论基础 2.深度网络结构 三.Pytorch代码实现 四.总结 前言 图像分类是计算机视觉任务的基石,在目标监测.图像分割等任务中 ...

  5. 基于深度残差网络图像分类算法研究综述

    文章从残差网络的设计出发,分析了不同残差单元的构造方式,介绍了深度残差网络不同的变体.从不同角度比较了不同网络之间的差异以及这些网络架构常用图像分类数据集上的性能表现.最后对各种网络进行l总结,并讨论 ...

  6. 基于深度学习的高精度家禽猪检测识别系统(PyTorch+Pyside6+YOLOv5模型)

    摘要:基于深度学习的高精度家禽猪检测识别系统可用于日常生活中或野外来检测与定位家禽猪目标,利用深度学习算法可实现图片.视频.摄像头等方式的家禽猪目标检测识别,另外支持结果可视化与图片或视频检测结果的导 ...

  7. 基于深度学习的高精度牙齿健康检测识别系统(PyTorch+Pyside6+YOLOv5模型)

    摘要:基于深度学习的高精度牙齿健康检测识别系统可用于日常生活中检测牙齿健康状况,利用深度学习算法可实现图片.视频.摄像头等方式的牙齿目标检测识别,另外支持结果可视化与图片或视频检测结果的导出.本系统采 ...

  8. 【深度学习之ResNet】——深度残差网络—ResNet总结

    目录 论文名称:Deep Residual Learning for Image Recognition 摘要: 1.引言 2.为什么会提出ResNet残差网络呢? 3.深度残差网络结构学习(Deep ...

  9. 深度残差网络ResNet解析

    ResNet在2015年被提出,在ImageNet比赛classification任务上获得第一名,因为它"简单与实用"并存,之后很多方法都建立在ResNet50或者ResNet1 ...

最新文章

  1. 【Java从0到架构师(3),【好文推荐
  2. 有了这篇网络排错思路大总结:我帮了不少同事~
  3. UOJ#244-[UER#7]短路【贪心】
  4. 收藏列表放入MySQL还是redis_mysql导入redis
  5. 每日站立会议 12.06
  6. 摄像头驱动0V7725学习笔记连载(三):0V7725 SCCB时序的实现
  7. java将数据从外部读入到程序称为_java复习与练习答案beta3(基本可信~~)
  8. mysql建表语句转达梦_MySQL建表语句转PostgreSQL建表语句全纪录
  9. 瑞幸在前 Manner在后 资本吹不熟的咖啡赛道迎来新变局
  10. 用Keil+CMSIS DAP调试NXP S32系列单片机时遇到的问题
  11. 2019山东省赛总结
  12. 【云原生之Docker实战】使用Docker部署BookStack文档管理系统
  13. Ubuntu下Android编译环境Build_evn的配置
  14. 关于二手交易平台的思路背景
  15. DBA在项目中的角色
  16. Linux的基础指令
  17. 并发批量管理500台以上服务器脚本分享(shell版)
  18. Excel客户等级星级表达
  19. android抖音自动刷新,Android SwipeRefreshLayout仿抖音app静态刷新
  20. 申报倒计时|武汉东湖高新区促进外资企业投资发展专项资金最后6天

热门文章

  1. Linux之smartctl命令磁盘检测运维
  2. 修改华为荣耀U8860的官方Rom 之 状态栏透明和下拉通知栏可修改
  3. Hbase面试题总结(大数据面试)
  4. 怎样用java编程抓取动态生成的网页
  5. vue 引入第三方js报错undefined
  6. [.crt 证书] openssl 查看.crt 证书详细信息
  7. mysql revoke详解_MySQL管理员帮你了解CREATE和REVOKE语句_MySQL
  8. 电脑识别不了手机等USB设备,怎么办?
  9. 如何通过对广告条的优化,提升广告条的点击率
  10. PHP入门-函数的定义与使用