一、写在前面
在运行该程序之前可以参考我的另一篇博客《深度学习关于环境配置踩过的坑》或者查询其他博主的文章,了解如何新建虚拟环境、在Pycharm中配置、查询本机支持的cuda版本、如何下载对应的pytorch和torchvision版本的一些解决方法。
近年来,垃圾问题成为全球面临的重要挑战之一。垃圾的不正确处理会给环境和人类健康带来严重影响。正确分类垃圾是解决这一问题的基本环节,它可以促进垃圾的有效回收利用,减少对资源的浪费,同时降低对环境的污染。然而,传统的垃圾分类方法往往需要大量的人力和时间成本,且容易出错。为了提高垃圾分类的效率和准确度,深度学习技术的应用吸引了越来越多的研究者和实践者的关注。
深度学习是一种基于人工神经网络的机器学习方法,它通过对大规模数据的训练和学习,能够自动提取和表示复杂的数据特征,并实现高效准确的模式识别和分类。近年来,深度学习在计算机视觉任务中取得了巨大的突破,如图像分类、目标检测和语义分割等。在垃圾分类领域,深度学习方法也取得了显著的成果。
本研究基于PyTorch框架,设计和实现了一个基于深度学习的垃圾分类识别程序。我选择了ResNet-18作为基础模型,这是一个经典的卷积神经网络模型,具有相对较浅的网络结构。通过数据预处理将大规模的垃圾图像数据集转换为可以输入到ResNet-18模型的合适尺寸,并进行数据增强操作以增加模型的泛化能力。为了训练模型,我选择了SGD优化器和交叉熵损失函数,通过在训练集上进行多个epoch的训练,逐渐优化模型的参数和权重。
实验结果表明,该垃圾分类识别程序在测试集上实现了85%以上的分类准确率。这意味着我们的程序能够高效地将输入的垃圾图像分为可回收垃圾、厨余垃圾、有害垃圾和其他垃圾四个类别。比传统方法,该程序具有更高的准确性和工作效率。这对于解决垃圾分类问题具有重要的实用价值和应用潜力。
Resnet18结构:
二、具体实现
1.数据预处理
首先,数据集包含可回收物、有害垃圾、厨余垃圾、其他垃圾四大类40个小类。
其中其他垃圾有6种、厨余垃圾8种、有害垃圾3种、可回收物23种。每种包含大约400张图片,共1.7万多张图片
将图像数据进行预处理,包括随机裁剪,随机翻转,随机旋转,颜色变换等处理方式,以便更好地用于模型训练。
2.构建模型
构建虚拟环境python==3.6,安装CUDA11.0版本,在虚拟环境中安装依赖包torch==cu110,torchvision==cu110,使用GPU进行训练。在PyTorch中,我们可以轻松地构建ResNet-18模型,包括加载预训练权重,并根据我们的垃圾分类任务进行微调。编写并使用get_models函数加载具有特定输入大小、类数量和宽度乘数的ResNet18模型。然后将模型移动到GPU。
定义损失函数和优化器:考虑到本项目是典型的分类问题,即目标变量是离散的,我选择CrossEntropyLoss交叉熵损失函数,来衡量模型的输出与真实标签之间的差距。然后,我选择随机梯度下降(SGD)优化器,来更新模型的权重。
3.模型训练
在训练过程中,将数据馈送给模型,计算损失,并通过反向传播来更新模型参数。同时我定义了几个回调函数,分别是准确率回调函数(acc_record)、loss回调函数(loss_record)等,便于使用工具Tensorboard对训练过程进行可视化。
部分回调函数展示:
三、UI设计
使用PyQt5,通过QtDesigner进行页面设计生成.ui文件后,执行命令将其转化为python语言后编写函数逻辑调用界面。
程序入口:在main.py文件中设置了程序入口,实现界面函数的初始化。其中定义了一个MyMainForm类,入口参数为Login_MainWindow与登录界面有关,具有窗口的动画开始、动画关闭、窗口居中显示、鼠标消息接收和处理登录的方法;定义了一个Use_MyMainForm类,入口参数为Ui_MainWindow与主界面有关,具有鼠标消息接收等方法;定义了一个Identify_MyMainForm类,入口参数为Identify_MainWindow与上传本地图片识别有关。
识别入口:在identify_window.py文件中具体实现上传图片识别过程。将“上传图片”按钮与openImage函数关联,将选取的本地图片路径设置为全局变量,通过文件路径获取图片,并将图片设置为控件label框的长与宽,之后在控件上显示图片与图片路径,并将该图片保存入data/dataset/Imgs文件夹中,便于之后使用。
四、最终效果
上传本地图片后,将图片传入已经训练好的模型,识别出垃圾分类结果以及预测准确度
写在最后
欢迎大家一起交流讨论!需要源码可以给我留评论或者私我。