文章目录
- 0 简介
- 1 背景意义
- 2 数据集
- 3 数据探索
- 4 数据增广(数据集补充)
- 5 垃圾图像分类
-
- 5.1 迁移学习
-
- 5.1.1 什么是迁移学习/li>
- 5.1.2 为什么要迁移学习/li>
- 5.2 模型选择
- 5.3 训练环境
-
- 5.3.1 硬件配置
- 5.3.2 软件配置
- 5.4 训练过程
- 5.5 模型分类效果(PC端)
- 6 构建垃圾分类小程序
-
- 6.1 小程序功能
- 6.2 分类测试
- 6.3 垃圾分类小提示
- 6.4 答题模块
- 7 关键代码
- 8 最后
0 简介
今天学长向大家介绍一个机器视觉项目
深度学习卷积神经 络垃圾分类系统
1 背景意义
近年来,随着我国经济的快速发展,国家各项建设都蒸蒸日上,成绩显著。但与此同时,也让资源与环境受到了严重破坏。这种现象与垃圾分类投放时的不合理直接相关,而人们对于环境污染问题反映强烈却束手无策,这两者间的矛盾日益尖锐。人们日常生活中的垃圾主要包括有害垃圾、厨余垃圾、可回收垃圾以及其他垃圾这四类,对不同类别的垃圾应采取不同分类方法,如果投放不当,可能会导致各种环境污染问题。合理地进行垃圾分类是有效进行垃圾处理、减少环境污染与资源再利用中的关键举措,也是目前最合适最有效的科学管理方式,利用现有的生产水平将日常垃圾按类别处理、利用有效物质和能量、填埋无用垃圾等。这样既能够提高垃圾资源处理效率,又能缓解环境污染问题。
2 数据集
数据集采用了中国发布的垃圾分类标准,该标准将人们日常生活中常见的垃圾分为了四大类。其中,将废弃的玻璃、织物、家具以及电器电子产品等适合回收同时可循环利用的废弃物归为可回收垃圾。将剩菜剩饭、果皮果壳、花卉绿植以及其他餐厨垃圾等容易腐烂的废弃物归为厨余垃圾。将废电池、废药品、废灯管等对人们身体健康和自然环境有害而且应当门处理的废弃物归为有害垃圾。除以上三类垃圾之外的废弃物都归为其他垃圾。
该数据集是图片数据,分为训练集85%(Train)和测试集15%(Test)。其中O代表Organic(有机垃圾),R代表Recycle(可回收)
3 数据探索
我们先简单的大致看看数据的情况
所得的垃圾图片数据集中有40个二级类别,图片数量合计 14802张。由图3-1可以看出,各个垃圾类别的图像数据量不均衡,其中图片数据量较少的类别有:类别0(一次性快餐盒)、类别3(牙签)、类别20(快递纸袋);数据量较多的类别是:类别11(菜叶根)、类别21(插头电线)、类别25(毛绒玩具)。
根据流程图可以看到,爬虫的流程与用户浏览 页的过程相似,首先输入目标URL地址,向服务器发送请求,接着服务器端会返回包含大量链接的HTML文件,然后提取这些链接将其组成URL列表,通过串行或并行方式从服务器端中下载数据。
由于基础数据集中类别数量不均衡,所以本设计使用 络爬虫方式从百度图库对数量较少的类别进行数据扩充,首先输入想要爬取的图片名称关键字,然后输入想要爬取图片的数量以及存放的文件夹之后,进行图片爬取。
5 垃圾图像分类
5.1 迁移学习
5.1.1 什么是迁移学习/h3>
迁移学习是指在一个数据集上,重新利用之前已经训练过的卷积神经 络,并将其迁移到另外的数据集上。
5.1.2 为什么要迁移学习/h3>
卷积神经 络前面的层提取的是图像的纹理、色彩等特征,而越靠近 络后端,提取的特征就会越高级、抽象。所以常用的微调方法是,保持 络中其他参数不变,只修改预训练 络的最后几层,最后几层的参数在新数据集上重新训练得到。其他层的参数保持不变,作为特征提取器,之后再使用较小的学习率训练整个 络。因为从零开始训练整个卷积 络是非常困难的,而且要花费大量的时间以及计算资源,所以采取迁移学习的方式是一种有效策略。
通常在非常大的数据集上对ConvNet进行预训练,然后将ConvNet用作初始化或者是固定特征提取器,以下是两个主要的迁移学习方法:
1.微调卷积 络。使用预训练的 络来初始化 络而不使用随机初始化,比较常用的方法是使用在ImageNet数据集上训练好的模型参数进行初始化,然后训练自己的数据集。
2.将卷积 络作为固定特征提取器。冻结除了全连接层外的所有其他层的权重,将最后的那个全连接层替换为具有随机权重的层,然后只对该层进行训练。
要使用深度学习方法来解决垃圾图像识别分类问题,就需要大量的垃圾图片数据集,因为当数据集太小时,一旦加深模型结构,就很可能出现过拟合的情况,训练出的模型泛化能力不足,识别准确率不高。而基于迁移学习的方法,预训练模型已经具备了提取图像基本特征基的能力,这就能在一定程度上减缓过拟合发生的可能性,将预模型迁移到垃圾图像数据集上进行微调训练,提高识别准确率。
5.2 模型选择
采用迁移学习的方式导入预训练模型,冻结特征提取层,进行微调训练,选取了SeNet154、Se_ResNet50、Se_ResNext101、ResNext101_32x16d_WSL四种模型进行对比实验,选取结果较好的模型进行调优。其中,ResNext101_32x16d_WS预训练模型是由FaceBook在2019年开源的
SeNet154结构
采用ResNext101_32x16d_WSL 络作为基本的 络结构进行迁移学习,将CBAM注意力机制模块添加在首层卷积层,来增强图像特征表征能力,关注图像的重要特征抑制不必要的特征,固定除全连接层之外的其他层的权重。为降低过拟合,在模型全连接层添加了Dropout层,损失函数采用交叉熵损失函数(CrossEntropyLoss),优化函数对比了SGD和Adam,Adam在起始收敛速度快,但最终SGD精度高,所以采用了SGD。
5.3 训练环境
5.3.1 硬件配置
5.4 训练过程
构建好模型结构后,设置数据集加载路径,在搭建好的环境中进行模型训练,将训练过程中每轮迭代的Train Loss、Valid Loss、Train Acc、Valid Acc等数据保存到log日志文件中,然后使用matplotlib库绘制在训练集和测试集上的Accuracy跟Loss的变化曲线。
目前模型训练集准确度83.8%,测试集准确度67.5%,仍有待提高。。
6 构建垃圾分类小程序
学长设计的垃圾分类系统的核心功能是从本地相册上传照片或拍照上传照片进行识别分类,除此之外,还引入了语音识别功能、文字搜索功能、垃圾分类答题功能等满足用户的不同需求。系统的模块设计如下图所示。
·
首先选择用户所在城市,然后选择使用的搜索方式,当通过三种搜索方式搜索不到相应垃圾类别时,可以通过反馈功能将未识别的垃圾名称向后台反馈信息,以便进一步完善系统。系统核心功能为拍照识别功能,拍照识别功能即调用在前面已经部署在华为云Model Arts平台上的垃圾分类识别模型,对用户从手机端提交的垃圾图片进行在线识别分类并返回识别结果,调用过程中用到了小程序的云函数功能。
6.2 分类测试
6.3 垃圾分类小提示
指南模块实现的功能是根据用户所选择的城市,将云数据库中的数据展示给用户,介绍目前不同城市发布的垃圾分类规则及投放的要求,如下图所示:
7 关键代码
import tensorflow as tfimport linecacheimport cv2import numpy as npimport osfrom select_object import pretreatment_imagetrain_images_path = 'D:/WorkSpace/Python/trash_classify_dataset/dataset/'train_labels_path = 'D:/WorkSpace/Python/trash_classify_dataset/train_label.txt'test_images_path = 'D:/WorkSpace/Python/trash_classify_dataset/dataset/'test_labels_path = 'D:/WorkSpace/Python/trash_classify_dataset/test_label.txt'classify_num = 50train_images_num = 29081test_images_num = 3232def load_train_dataset(index): # 从1开始 if index > train_images_num:if index % train_images_num == 0: index = train_images_numelse: index %= train_images_num line_str = linecache.getline(train_labels_path, index) image_name, image_label = line_str.split(' ') image = cv2.imread(train_images_path + image_name) # cv2.imshow('pic',image) image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) image = cv2.resize(image, (224, 224)) return image, image_labeldef combine_train_dataset(count, siz
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!