系列文章

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

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


目录

  • 系列文章
  • 项目简介
  • 一、项目架构
  • 二、图像数据
  • 三、环境介绍
    • 1.环境要求
    • 2.环境安装实例
  • 四、重要代码介绍
    • 1.图像数据读取和预处理
    • 2.图像数据增强
    • 3.模型加载并训练
      • 3.1 模型加载
      • 3.2 模型训练
      • 3.3 训练各项指标
    • 4.结果预测
      • 4.1 测试集模型评价
      • 4.2 单张图片测试
  • 五、完整代码地址

项目简介

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

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

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

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

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


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

一、项目架构

整个项目的程序流程图如下,分别为:
1.图像数据预处理
2.模型训练
3.模型测试
三个模块

二、图像数据

本文用到的垃圾图片数据主要为以下四类:

1.厨余垃圾
2.可回收垃圾
3.其他垃圾
4.有害垃圾
如下:

其中每个类别又涉及多个子类别如,有害垃圾文件夹中,中又涉及以下多个类别:

每类图片数量及图片总数情况如下,共计6038张图像数据:

三、环境介绍

1.环境要求

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

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

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

如下:

2.环境安装实例

环境都可以通过pip进行安装。如果只是想要功能跑起来,这边建议tensorflow安装cpu版的。

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


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

四、重要代码介绍

1.图像数据读取和预处理

## 读取图像,解决imread不能读取中文路径的问题
def cv_imread(filePath):# 核心就是下面这句,一般直接用这句就行,直接把图片转为mat数据cv_img=cv2.imdecode(np.fromfile(filePath,dtype=np.uint8),-1)# imdecode读取的是rgb,如果后续需要opencv处理的话,需要转换成bgr,转换后图片颜色会变化# cv_img=cv2.cvtColor(cv_img,cv2.COLOR_RGB2BGR)return cv_img# 定义图像获取函数
def read_img(img_url_list,num):# 设置随机数种子random.seed(999)imgs = []err_img = []if num>len(img_url_list):print("抱歉,出错了,您设置的采样数量大于了图片张数,请调小img_num!")else:# 对图片数量进行采样img_url_list = img_url_list[:num]for img_url in tqdm(img_url_list):# 获取图像img = cv_imread(img_url)if img is None:err_img.append(img_url) else:# skimage.transform.resize(image, output_shape)改变图片的尺寸img = cv2.resize(img, (w,h))if np.asarray(img).shape == (w,h,3):imgs.append(img)else:err_img.append(img_url)return imgs

2.图像数据增强

因为我们用于训练的图像数量不算多,可以进行以下几种方式进行数据增强:

  1. 随机裁剪
  2. 旋转
  3. 翻转
# 图像增强将图像进行随机翻转,裁剪
def img_create_cut(imgs,label,cut_min,cut_max,cut_true):imgs_out = []label_out = []w = imgs[0].shape[0]h = imgs[0].shape[1]for i in tqdm(range(len(imgs))):# 添加原图imgs_out.append(imgs[i])label_out.append(label[i])if cut_true:# 原图随机裁剪,执行1次for f in range(1):# 生成裁剪随机数rd_num = np.random.uniform(cut_min, cut_max)# 生成随机裁剪长宽rd_w = int(w * rd_num)rd_h = int(h * rd_num)# 进行裁剪crop_img = tf.image.random_crop(imgs[i],[rd_w,rd_h,c]).numpy()# 重新调整大小re_img = cv2.resize(crop_img, (w, h))# 添加裁剪图像imgs_out.append(re_img)# 添加类标label_out.append(label[i])# 随机翻转for e in range(0,2):# 1:水平翻转,0:垂直翻转,-1:水平垂直翻转f_img = cv2.flip(imgs[i], e)# 添加翻转图像imgs_out.append(f_img)# 添加类标label_out.append(label[i])imgs_out,label_out = np.asarray(imgs_out, np.float32), np.asarray(label_out, np.int32)# 打乱顺序# 读取data矩阵的第一维数(图片的个数)num_example = imgs_out.shape[0]arr = np.arange(num_example)np.random.seed(99)np.random.shuffle(arr)imgs_out= imgs_out[arr]label_out= label_out[arr]return imgs_out,label_out

3.模型加载并训练

3.1 模型加载

3.2 模型训练

3.3 训练各项指标

可以看到,训练准确率模型很快就达到了一个比较高的水平,测试集准确率在80分以上。

4.结果预测

读取训练好的模型:

w = test_data.shape[1]
h = test_data.shape[2]
c = test_data.shape[3]
# 获取label数量
label_counts = len(classes)
# 加载模型结构
Resnetmodel = ResNetModel(input_shape=(w,h,c),classes=label_counts)
ResNet_model = Resnetmodel.ResNet50()
# 设置学习率
learning_rate=0.001
optimizer = keras.optimizers.Adam(learning_rate=learning_rate)
ResNet_model.compile(optimizer=optimizer,loss='sparse_categorical_crossentropy',metrics=['accuracy'])
ResNet_model.summary()

4.1 测试集模型评价

使用sklearn输出各类别评价指标:
其中类标:

0为:厨余垃圾
1为:可回收垃圾
2为:其他垃圾
3为:有害垃圾

4.2 单张图片测试

五、完整代码地址

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

完整代码下载:
手把手教你:图像识别的垃圾分类系统

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

  1. 平板电脑如何刷linux,手把手教你六步刷系统

    · 手把手教你六步刷系统 当一切准备就绪后,就可以开始刷机了,首先要用USB2.0接口数据线连接电脑与神舟LiPad T10,然后在关机状态下同时按下上文中介绍的A按键与B按键,这时Windows系统 ...

  2. 【环境搭建】手把手教你安装Ubuntu16.04系统

    [环境搭建]手把手教你安装Ubuntu16.04系统 使用U盘制作Ubuntu系统盘 准备工作 操作过程 用制作好的系统盘安装Ubuntu16.04系统 结语 使用U盘制作Ubuntu系统盘 准备工作 ...

  3. 如何刻linux系统光盘,手把手教您把多个系统ISO刻录到一张光盘

    有时我们所以刻录的系统文件很小,如果只刻在一张光盘里面,就显的有一些浪费.下面我们就来手把手教您把多个系统ISO刻录到一张光盘,具体步骤如下: 制作多系统启动光盘 1.制作启动盘 在Windows 和 ...

  4. 手把手教你搭建网盘系统,给小姐姐换个新家可好​?

    在数据时代,我们每天都在互联网上生成大量数据,同时也接收着大量数据.随着图片.音乐.影视.课程越来越多,不管是手机.iPad 还是电脑,空间根本不够用,所以很多人会把文件存在各种网盘里. 但近几年,网 ...

  5. 手把手教你搭建视频去重系统

    #01 背景 如今,短视频平台对各类搬运视频的检测力度和精确度越来越高了.无论是影视号的剪辑,还是从油管搬运,即使做了各类复杂的视频变换,都很容易被检测出来.作者都会收到提醒,严重的甚至被封号. 乔布 ...

  6. 计算机操作系统重装,手把手教你电脑怎样重装系统

    系统和其他东西一样都是有一定的使用寿命.使用时间久了出现难以修复的问题就要更换系统了.有些朋友想在家更换系统,但是不知如何下手.针对这个问题,我以win7为例,教大家重装系统的详细操作方法 重装系统是 ...

  7. android调用相机与相册的方法,手把手教你:android调用系统相机、相册功能,适配6.0权限获取以及7.0之后获取URI(兼容多版本)...

    Android中调用系统相机来拍摄照片的代码,以下:html 一.首先设置Uri获取判断以及相机请求Codejava public final int TYPE_TAKE_PHOTO = 1;//Ur ...

  8. python开源报表系统详细操作流程_手把手教你实现自动化报表系统

    今天给大家安利一套自动化报表的实现过程. 说到报表,大家脑海里一定浮现了各种高大上的财务报表,不管他们如何实现的,本文却要教你实现自己的报表系统.对于土豪公司来说,这些都是小case,因为商业的工具平 ...

  9. 如何扩大临linux零时空间,手把手教你如何扩充linux系统空间

    概述 我们管理的服务器可能会随着业务量的不断增长造成磁盘空间不足的情况,在这个时候我们就需要增加磁盘空间,本章主要介绍如何使用fdisk分区工具创建磁盘分区和挂载分区,介绍两种情况一种是对原有的磁盘的 ...

最新文章

  1. L1-009. N个数求和
  2. 完整的Python 3和树莓Pi大师课 Complete Python 3 and Raspberry Pi Masterclass
  3. 累加结合律,交换律,分配律的一个例子
  4. 【公测中】阿里云发布国内首个大数据双活容灾服务,满足高要求大数据灾备场景...
  5. 客户管理系统之模块设计(十)
  6. java框架之Spring 核心框架体系结构
  7. org.springframework.http.converter.HttpMessageNotReadableException: Required request body is(亲测)
  8. ufldl学习笔记与编程作业:Multi-Layer Neural Network(多层神经网络+识别手写体编程)...
  9. 浅谈各种连接池中连接数量的设置
  10. ci源码解析之CodeIgniter.php
  11. 307.区域和检索-数组可修改
  12. MSDEV.EXE-应用程序错误解决办法
  13. 英雄无敌服务器维护,3月18日 维护更新公告
  14. Spring系列8:bean的作用域
  15. 官宣 | iPayLinks与Shopyy达成战略合作
  16. shell命令进制转换
  17. 华硕笔记本很久没用开机后无法进入系统自动跳转bios界面的解决方法
  18. java 动态表头_java如何生成可变表头的excel
  19. python中的dic.items(), dic.keys(), dic.values()
  20. 图片公式提取至文档word

热门文章

  1. 《C++ Primer》第14章 14.3节习题答案
  2. 计算机组成原理实训重要吗,计算机组成原理实训_报告.doc
  3. 基于STM32单片机采集数据数据上云
  4. 一键使 WIN 10进入休眠、睡眠、关机的命令
  5. 大数据学习相关内容总结
  6. 免费在线使用微软文字转语音工具(附详细转换步骤)
  7. 关于鸿蒙的网名,华为徐直军:“鸿蒙”这个名字是媒体取的
  8. sublime text 编译时提示[WinError 2] 系统找不到指定的文件。
  9. DCD、DTR、DSR、RTS及CTS等五个状态指示分别代表什么意思?
  10. 黄金连分数(python)