基于深度学习的垃圾分类系统设计与实现

时间:2024-05-23 10:58:20

1.研究背景与意义

近年来,随着我国经济的快速发展,国家各项建设都蒸蒸日上,成绩显著。但与此同时,也让资源与环境受到了严重破坏。这种现象与垃圾分类投放时的不合理直接相关,而人们对于环境污染问题反映强烈却束手无策,这两者间的矛盾日益尖锐。人们日常生活中的垃圾主要包括有害垃圾、厨余垃圾、可回收垃圾以及其他垃圾这四类,对不同类别的垃圾应采取不同分类方法,如果投放不当,可能会导致各种环境污染问题。合理地进行垃圾分类是有效进行垃圾处理、减少环境污染与资源再利用中的关键举措,也是目前最合适最有效的科学管理方式,利用现有的生产水平将日常垃圾按类别处理、利用有效物质和能量、填埋无用垃圾等。这样既能够提高垃圾资源处理效率,又能缓解环境污染问题。

而对垃圾的分类首先是在图像识别的基础上的,因此本文想通过使用近几年来发展迅速的深度学习方法设计一个垃圾分类系统,从而实现对日常生活中常见垃圾进行智能识别分类,提高人们垃圾分类投放意识,同时避免人们错误投放而产生的环境污染。

2.实验数据

2.1数据来源

本设计采用的基础实验数据是华为技术有限公司云人工智能大赛提供的生活中常见的40种垃圾图片数据集,该数据集均为真实的、高质量的数据资源,数据下载链接如下:https://modelarts.competitions.obs.cn.north1.myhuaweicloud.com/garbageclassify/dataset/garbage_classify.zip

该数据集采用了深圳市发布的垃圾分类标准,该标准将人们日常生活中常见的垃圾分为了四大类。其中,将废弃的玻璃、织物、家具以及电器电子产品等适合回收同时可循环利用的废弃物归为可回收垃圾。将剩菜剩饭、果皮果壳、花卉绿植以及其他餐厨垃圾等容易腐烂的废弃物归为厨余垃圾。将废电池、废药品、废灯管等对人们身体健康和自然环境有害而且应当门处理的废弃物归为有害垃圾。除以上三类垃圾之外的废弃物都归为其他垃圾。

2.2数据分析

所得的垃圾图片数据集中有40个二级类别,图片数量合计 14802张。由图3-1可以看出,各个垃圾类别的图像数据量不均衡,其中图片数据量较少的类别有:类别0(一次性快餐盒)、类别3(牙签)、类别20(快递纸袋);数据量较多的类别是:类别11(菜叶根)、类别21(插头电线)、类别25(毛绒玩具)。

基于深度学习的垃圾分类系统设计与实现

2.3数据增广

数据增广就是对基础数据集进行扩充,避免因为数据集太少导致在模型训练过程可能出现的过拟合现象,以此来提高模型泛化能力,达到更好的效果。根据扩充数据集的来源可分为两类:内部数据增广是对基础数据集进行水平翻转、垂直翻转、高斯噪声以及高斯模糊等变换操作,来产生新的特征;而外部数据增广是引入新的高质量外部数据来扩充数据集,包括数据爬取与数据筛选两个步骤。

数据爬取是通过网络爬虫技术来实现的,爬虫的流程是,首先向远程服务器端发送请求,获取目标网页的HTML文件;然后跟踪这个链接文件,获取文件数据。各种搜索引擎就是通过爬虫技术来实现网页数据更新,爬取的效率直接决定了搜索的效果。

                         基于深度学习的垃圾分类系统设计与实现

 

根据流程图可以看到,爬虫的流程与用户浏览网页的过程相似,首先输入目标URL地址,向服务器发送请求,接着服务器端会返回包含大量链接的HTML文件,然后提取这些链接将其组成URL列表,通过串行或并行方式从服务器端中下载数据。

由于基础数据集中类别数量不均衡,所以本设计使用网络爬虫方式从百度图库对数量较少的类别进行数据扩充,首先输入想要爬取的图片名称关键字,然后输入想要爬取图片的数量以及存放的文件夹之后,进行图片爬取。

基于深度学习的垃圾分类系统设计与实现

基于深度学习的垃圾分类系统设计与实现

3基于迁移学习的垃圾图像分类

3.1迁移学习

迁移学习是指在一个数据集上,重新利用之前已经训练过的卷积神经网络,并将其迁移到另外的数据集上。卷积神经网络前面的层提取的是图像的纹理、色彩等特征,而越靠近网络后端,提取的特征就会越高级、抽象。所以常用的微调方法是,保持网络中其他参数不变,只修改预训练网络的最后几层,最后几层的参数在新数据集上重新训练得到。其他层的参数保持不变,作为特征提取器,之后再使用较小的学习率训练整个网络。因为从零开始训练整个卷积网络是非常困难的,而且要花费大量的时间以及计算资源,所以采取迁移学习的方式是一种有效策略。

通常在非常大的数据集上对ConvNet进行预训练,然后将ConvNet用作初始化或者是固定特征提取器,以下是两个主要的迁移学习方法:

1.微调卷积网络。使用预训练的网络来初始化网络而不使用随机初始化,比较常用的方法是使用在ImageNet数据集上训练好的模型参数进行初始化,然后训练自己的数据集。

2.将卷积网络作为固定特征提取器。冻结除了全连接层外的所有其他层的权重,将最后的那个全连接层替换为具有随机权重的层,然后只对该层进行训练。

要使用深度学习方法来解决垃圾图像识别分类问题,就需要大量的垃圾图片数据集,因为当数据集太小时,一旦加深模型结构,就很可能出现过拟合的情况,训练出的模型泛化能力不足,识别准确率不高。而基于迁移学习的方法,预训练模型已经具备了提取图像基本特征基的能力,这就能在一定程度上减缓过拟合发生的可能性,将预模型迁移到垃圾图像数据集上进行微调训练,提高识别准确率。

3.2模型选择

采用迁移学习的方式导入预训练模型,冻结特征提取层,进行微调训练,选取了SeNet154、Se_ResNet50、Se_ResNext101、ResNext101_32x16d_WSL四种模型进行对比实验,选取结果较好的模型进行调优。其中,ResNext101_32x16d_WS预训练模型是由FaceBook在2019年开源的,其下载地址为:https://download.pytorch.org/models/ig_resnext101_32x16-c6f796b0.pth

而SeNet154、Se_ResNet50、Se_ResNext101预训练模型下载地址均为:

https://data.lip6.fr/cadene/pretrainedmodels/

模型部分参数设置情况如下表所示:

模型
学习率
批大小
迭代次数
优化函数
SeNet154
1e-4
32
30
SGD
Se_ResNet50
1e-4
32
30
SGD
Se_ResNext101
1e-4
32
30
SGD
ResNext101_32x16d_WSL
1e-4
16
30
SGD

为准确客观地对四种预训练模型在垃圾图片数据上的迁移学习进行评价,采用在训练集、测试集上的Accuracy与Loss随迭代次数变化的曲线图进行对比分析;在训练完成后,将四种模型随迭代次数变化的Train_Accuracy、Val_Accuracy、Train_Loss、Val_Loss值制作成数据可视化图。

                           基于深度学习的垃圾分类系统设计与实现

                          基于深度学习的垃圾分类系统设计与实现

                          基于深度学习的垃圾分类系统设计与实现

                         基于深度学习的垃圾分类系统设计与实现

 

从上图中可以看出,ResNext101_32x16d_WSL预训练模型在测试集上的预测效果较好,因此本设计选用该模型作为预训练模型进行迁移学习。

3.3模型改进

采用ResNext101_32x16d_WSL网络作为基本的网络结构进行迁移学习,将CBAM注意力机制模块添加在首层卷积层,来增强图像特征表征能力,关注图像的重要特征抑制不必要的特征,固定除全连接层之外的其他层的权重。为降低过拟合,在模型全连接层添加了Dropout层,损失函数采用交叉熵损失函数(CrossEntropyLoss),优化函数对比了SGD和Adam,Adam在起始收敛速度快,但最终SGD精度高,所以采用了SGD。最终模型结构如下图所示:

基于深度学习的垃圾分类系统设计与实现

3.4实验结果

3.4.1实验环境

实验环境包括硬件配置、软件环境,依次由下图所示:

                                                                                      硬件配置

配置项

说明

CPU

Intel 40核E5 2670处理器

GPU

GTX 1080 Ti

11G显存

内存

64G

硬盘

220GB SSD

                                                                                              软件环境

配置项

说明

操作系统

Windows 10

CUDA

10.0

Python版本

3.7

Python IDE

Pycharm 2019.3

Python库

numpy

pandas

sklearn

torchvision

scikit-image

3.4.2模型训练

构建好模型结构后,设置数据集加载路径,在搭建好的环境中进行模型训练,将训练过程中每轮迭代的Train LossValid LossTrain AccValid Acc等数据保存到log日志文件中,然后使用matplotlib库绘制在训练集和测试集上的AccuracyLoss的变化曲线。

                             基于深度学习的垃圾分类系统设计与实现

                              基于深度学习的垃圾分类系统设计与实现

3.4.3模型部署

为解决本地加载模型显存不够的问题,将训练好的模型部署在由华为云支持的Model Arts平台上,实现在线预测,Model Arts平台帮助开发者进行快速创建和部署模型,省去了复杂的环境配置,让开发更加方便快捷

基于深度学习的垃圾分类系统设计与实现

Postman软件上进行接口测试,输入参数为input_img,从本地图库选取一张“一次性快餐盒”类别图片上传进行在线识别,返回参数为result,从图中可以看到接口测试正常

基于深度学习的垃圾分类系统设计与实现

4系统可视化

4.1系统需求分析

作为垃圾分类可视化系统,让用户能够方便快捷地了解垃圾所对应的种类以实现分类投放是其基本功能,为了满足用户的实际需求,选用多种方式进行分类,如文字搜索、语音识别、拍照识别等;同时,要对日常生活中常见的垃圾种类以及投放要求做一些科普也是十分必要的,让用户能够学习到垃圾分类的规定,提高分类意识;最后,在学到一些垃圾分类知识后,用户可以通过答题功能来检测一下自己对垃圾分类知识了解的程度。考虑到以上需求,选用微信小程序平台进行开发,微信小程序依赖微信而生,微信用户只需要通过微信扫一扫或搜一下,便可以查找并使用相关的服务,充分体现了“用完即走”的理念,用户不需要担心手机软件安装过多而占用手机内存,同时,它还提供了一套丰富实用的API方便开发者快速开发应用。

4.2系统功能与实现

本垃圾分类系统的核心功能是从本地相册上传照片或拍照上传照片进行识别分类,除此之外,还引入了语音识别功能、文字搜索功能、垃圾分类答题功能等满足用户的不同需求。系统的模块设计如下图所示。

基于深度学习的垃圾分类系统设计与实现

 

其中识别模块是用户选择识别功能,包含拍照/相册识别,语音识别、文字搜索等功能,根据所选城市的不同展示相应的垃圾类别;指南功能模块是根据所选城市的不同介绍各种垃圾的种类以及投放要求;答题模块实现垃圾种类的选择答题功能。

1.识别模块的功能包括文字搜索、语音识别、拍照识别等,该模块界面设计如图所示:

基于深度学习的垃圾分类系统设计与实现

 

首先选择用户所在城市,然后选择使用的搜索方式,当通过三种搜索方式搜索不到相应垃圾类别时,可以通过反馈功能将未识别的垃圾名称向后台反馈信息,以便进一步完善系统。系统核心功能为拍照识别功能,拍照识别功能即调用在前面已经部署在华为云Model Arts平台上的垃圾分类识别模型,对用户从手机端提交的垃圾图片进行在线识别分类并返回识别结果,调用过程中用到了小程序的云函数功能。

                             基于深度学习的垃圾分类系统设计与实现 基于深度学习的垃圾分类系统设计与实现

2.指南模块实现的功能是根据用户所选择的城市,将云数据库中的数据展示给用户,介绍目前不同城市发布的垃圾分类规则及投放的要求,如下图所示:

基于深度学习的垃圾分类系统设计与实现基于深度学习的垃圾分类系统设计与实现基于深度学习的垃圾分类系统设计与实现

3.答题模块也是根据用户所选城市的不同,测评用户对其所在城市垃圾分类规则了解的程度,以此来科普垃圾分类知识以及增强人们垃圾分类的意识,该界面如下图所示,在答完题后显示分数以及正确答案。

基于深度学习的垃圾分类系统设计与实现基于深度学习的垃圾分类系统设计与实现

5总结

本次实验训练了一个用于垃圾图片分类识别的模型,采用迁移学习的方法选取性能较好的模型进行调优改进,最终的模型识别准确率在93%以上(30个epoch);然后将训练好的模型部署在华为云上,生成API接口进行调用;最后设计了一个可视化程序调用API接口来进行展示,方便用户使用。有需要深度学习源码跟微信小程序源码的可以加我微信tiankongdecheng1。完结撒花...