基于深度学习的垃圾分类系统

2024-04-12 09:02王林芝WANGLinzhi石珏德SHIYude董梁苗DONGLiangmiao许敏XUMin
价值工程 2024年8期
关键词:残差垃圾分类

王林芝WANG Lin-zhi;石珏德SHI Yu-de;董梁苗DONG Liang-miao;许敏XU Min

(无锡职业技术学院物联网技术学院,无锡 214121)

0 引言

近年来,经济水平和物质生活发展迅速,垃圾的数量与种类呈现指数级增长,人们开始重视垃圾带来的环境和社会问题。日常生活中的垃圾主要包括有害垃圾、厨余垃圾、可回收垃圾以及其他垃圾这四类,对不同类别的垃圾应采取不同处理方法,若投放不当,可能会导致各种环境污染问题。现有的垃圾分类方式主要分为两种,一种是通过桶身颜色来区分垃圾的种类,但不同的颜色没有明确对应的垃圾桶种类,分类的方式没有达到共识;另一种是通过垃圾桶表面的标志来区分,这种方式通常只给一个宽泛的类别,没有明确指出分类细节。利用图像识别功能,合理的垃圾分类是有效进行垃圾处理、减少环境污染,并进行资源再利用的关键举措,也是目前最合适最有效的科学管理方式。利用现有的生产水平将日常垃圾按类别处理,填埋无用垃圾。这样既能够提高垃圾资源处理效率,又能缓解环境污染问题。

为了实现全自动垃圾分类,提高垃圾识别准确率,课题组设计了一种智能垃圾分类系统,其特点如下:①采用OpenCV 视觉模块进行图像识别,准确度较高。②用Flask框架作为后端调用前端,易于构建原型并且代码库利用率高。③基于深度学习(卷积神经网络)算法,使用tensorflow算法对图像进行特征提取,卷积神经网络通过学习大量数据集,训练模型,提取图片的特征,从而实现分类。④充分利用css 和js 的样式,应用到前端,美化用户界面,提高用户的体验感。

1 功能设计

整个系统是由知识介绍、用户交流以及智能识别三个模块组成。如图1 所示。

图1 系统功能模块图

1.1 知识介绍 这个部分包含了3 个部分,分别是环保资讯、分类知识和废旧利用三个模块。环保资讯模块提供了关于环保新闻和动态的信息,使用户能够及时了解环保领域的最新发展和趋势。分类知识模块则通过文字和图片的形式,介绍了不同种类垃圾的正确分类和处理方法,帮助用户提高垃圾分类的知识水平。废旧利用模块则展示了如何合理利用废弃物品,既减少了垃圾的产生,又节约了资源。

1.2 用户交流 主要为用户提供垃圾分类相关知识的测试。查询资料,选取垃圾分类测试题错误率最高的前十题,作为用户测试的题目。用户答题后,点击提交按钮,会显示用户的答题情况。增加用户使用系统的体验感。

1.3 垃圾智能识别 系统可以通过建立特定的垃圾识别模型进行常见垃圾类型的识别训练,达到较高的垃圾识别准确率。点击上传图片,实现垃圾的智能识别。垃圾的智能识别不仅摆脱了传统人工识别的繁琐流程,且识别可靠性较高。

2 算法介绍

2.1 图像处理 将一张图像(可以是本地图像,也可以是网络图像)进行预处理,然后裁剪成多个小图像,并对这些小图像进行数据增强。这个过程被称为数据预处理,通常在深度学习模型的训练过程中使用,以提高模型的性能。在程序设计部分定义了两个函数:preprocess_img 和preprocess_img_from_Url。这两个函数的主要区别在于获取图像的方式不同,一个是从本地路径获取图像,另一个是从网络URL 获取图像。

函数的主要步骤如下:①打开图像文件(本地或网络)。②将图像调整为指定的大小(在这里是256×256 像素)。③将图像转换为RGB 格式。④将图像转换为NumPy数组。⑤对图像进行数据增强,具体来说,是从图像的随机位置裁剪出224×224 像素的小图像,然后对这些小图像进行数据增强。将处理后的小图像存储在一个列表中,并返回这个列表。

2.2 训练模型 这个部分使用ResNet50 模型,是一种深度卷积神经网络(CNN) 模型,具有50 个残差块(Residual Block),广泛应用于图像识别和计算机视觉任务。以下是ResNet50 模型整个过程的详细介绍。

2.2.1 残差网络 残差网络(ResNet,Residual Network)是一种深度卷积神经网络。其引入跳跃连接(skip connection)机制,形成残差连接,实现了更有效的信息传递和更深的网络结构。

残差网络要包括两部分:残差块(Residual block)和跳跃连接(skip connection)。残差块是残差网络的基本构建单元,其核心思想是引入跳跃连接,将输入数据直接和卷积层的输出数据相加,以实现更有效的信息传递。残差网络公式为:H(x)=F(x)+x

其中,H(x)是输出结果,F(x)是残差函数,x 是输入数据。残差网络示意图可见图2。

图2 残差网络示意图

在图2 中,ResNet 网络是“跳跃连接”(skip)的方式。输出结果H(x)计算公式为:H(x)=F(x)+x。当F(x)=0 时,H(x)=x,即所谓的恒等映射。因此,ResNet 网络的学习目标发生了改变,它不再是学习一个完整的输出,而是学习目标值H(x)与x 的差值,即残差F(x)=H(x)-x。训练过程中的目标就是使残差结果尽可能接近0,从而在网络深度增加时,准确率得以保持不下降。

2.2.2 ResNet 网络结构 ResNet 网络的构建始于一个7×7 的卷积层,该层负责提取输入数据的初级特征。随后,一个3×3 的最大池化层用于对特征进行下采样,减小数据尺寸。接下来,网络进入残差结构部分。这一部分的ResNet 层依次递进,深度逐渐增加,有助于提取更高级别的特征。在残差结构之后,网络再次进行平均池化下采样,进一步减小数据尺寸。最后,全连接层和softmax 输出层用于将学到的特征映射到类别概率,从而实现分类任务。

2.3 预测模型 在这个部分使用了Adam 优化器和分类交叉熵损失函数(categorical crossentropy)。

Adam 是一种基于梯度下降算法的自适应学习率优化器。在训练过程中,Adam 会根据每个参数的历史梯度和更新情况,自适应地调整每个参数的学习率,以实现更快的训练收敛和更好的泛化性能。Adam 优化器的核心思想是在每个时间步骤中计算移动平均梯度和移动平均平方梯度,并利用它们来更新模型参数。有效地近似计算梯度的无偏估计值和梯度平方的无偏估计值,从而得到更加准确的参数更新方向。

在机器学习中,交叉熵函数是一种重要的损失函数,用于评估模型的预测结果与真实标签之间的差异。交叉熵函数起源于信息论领域,用于衡量两个概率分布之间的差异。对于分类问题,通常使用交叉熵函数作为损失函数,以优化模型的参数,使模型的预测结果尽可能接近真实标签的分布。通过最小化交叉熵函数,可以提高模型的准确性和泛化能力。在实际应用中,通过计算模型在测试集上的交叉熵函数值来评估模型的准确性。交叉熵函数值越小,表示模型的预测结果与真实标签的分布越接近,模型的性能越好。

2.4 服务端运行 服务端运行使用Flask 作为后端框架,Flask 是一个用Python 编写的轻量级web 应用程序框架,对接tensorflow,把tensorflow 训练好的模型加载成用户可以使用的api 接口。flask_sever.py 为flask 框架所写的后端代码,对接前端,呈现用户所使用的界面。主要功能是接收用户上传的图片,使用预先训练好的神经网络模型对图片进行分类预测,并返回预测结果。

创建Flask 应用程序对象:使用Flask 类创建一个名为app 的应用程序对象。定义一个函数allowed_file,它接受一个文件名作为输入,检查该文件名是否包含一个扩展名,并且该扩展名是否在允许的扩展名集合中。定义一个路由'/predict',该路由可以通过POST 或GET 方法访问。

定义其他几个路由,分别对应主页和网站中其他几个页面。每个路由都关联一个函数,这些函数只是简单地渲染相应的HTML 模板。在代码的最后,有一个条件语句,检查这个脚本是否作为主程序运行。如果是,将启动Flask应用程序,监听地址为'127.0.0.1'的本地主机的连接。运行flask_sever.py 文件的时候,在终端会显示相对应的网址,点击即可进入对应的系统界面。

3 系统设计和实现

3.1 首页模块 在垃圾分类系统当中有5 个页面,分别是首页、环保资讯、分类知识、废旧利用、趣味测试和垃圾识别。在首页当中使用一个长图作为标题的背景图片,在标题之下增加了图片大标题,左右按钮可以滑动查看添加的4 个图片。为了对首页的导航栏了解更加透彻,进行分栏,分别是对四个方面的具体拓展。之后增加鼠标悬停效果,将鼠标放在图片上方,显示其具体的分类。增加图片的轮播效果。并且当鼠标放在图片上面,随之对应的图片缩小,轮播效果暂时暂停。效果图可见图3。

图3 首页效果图

3.2 环保资讯,分类知识,废旧利用模块 鉴于页面整体协调性,在这3 个模块,运用一致的css 和js 格式文件。在导航栏处,增加相对应的二级标题,在页面的底端增加宣传垃圾分类的标语。根据每个模块的具体内容,适时地在页面添加一些相关的图片。相关效果可见图4 分类知识效果图。

3.3 趣味测试模块 用户在主页面点击“趣味测试“进入垃圾分类测试的界面,在这个界面当中,选取了垃圾分类测试题错误率最高前十题作为趣味测试的测试题。每道题都有四个不同类别的答案。用户答完题之后,点击下面提交答案的按钮,系统会显示您回答正确的题目数量。如果用户希望再次回答题目,可以在原先的基础上,重新进行答题,具体效果可见图5。

图5 趣味测试效果图

3.4 垃圾识别模块 获取一个名为"imageFile"的文件输入元素,并获取用户选择的第一个文件。将创建一个名为"formData" 的新对象。然后将选定的文件添加到FormData 中。接下来,创建一个新的XMLHttpRequest 对象,用于与服务器进行通信。XHR 的"open()"方法用于设置请求的类型和URL。使用"POST"方法将文件发送到服务器上的"/predict"端点。将从服务器接收到的响应解析为JSON 格式,并提取分类结果。然后,将分类结果显示在页面上的一个元素(ID 为"classificationResult")中。如果请求失败或出现其他错误,将显示一条错误消息。同时在发送请求之前,显示提示信息。“上传图片进行垃圾分类识别”选择文件按钮选择本地的图片或者是选择拍照识别,点击识别按钮之后,在最下面的模块会显示相关的垃圾类别。效果图可见图6。

图6 垃圾分类识别效果图

4 结论

本文介绍了一种基于深度学习的垃圾分类识别系统,旨在解决垃圾处理问题,提高垃圾回收效率。通过多种垃圾类型的数据集,使用预处理技术整理和扩充数据,提高模型的泛化能力。采用卷积神经网络作为基础模型,提高分类精度。在模型训练方面,采用随机梯度下降作为优化算法,实现快速收敛和优化。

系统包含一个垃圾分类识别的前端,使 用CSS和JavaScript,并包含了环保资讯、分类知识、废旧利用、趣味测试和垃圾识别五个模块。采用响应式设计,确保了各模块在不同设备上的显示效果。在数据结果上,通过数据可视化的方式,将垃圾分类的结果直观地展示给用户。

然而,该系统仍存在一些不足,如对于部分垃圾类型,尤其是文字信息不明确的垃圾,分类效果可能不佳。未来可以考虑引入OCR 技术,提高分类精度。

总的来说,基于深度学习的垃圾分类识别系统具有较高的分类精度和实用价值,但仍存在一些不足,需要进一步改进。未来可以提高系统的实时性,拓展垃圾类型覆盖范围,推动智能垃圾分类技术的发展。

猜你喜欢
残差垃圾分类
基于双向GRU与残差拟合的车辆跟驰建模
垃圾去哪了
分类算一算
基于残差学习的自适应无人机目标跟踪算法
那一双“分拣垃圾”的手
基于递归残差网络的图像超分辨率重建
分类讨论求坐标
数据分析中的分类讨论
倒垃圾
教你一招:数的分类