1.摘要
垃圾分类作为资源回收利用的重要环节之一, 可以有效地提高资源回收利用效率, 进一步减轻环境污染带来的危害. 随着现代工业逐步智能化, 传统的图像分类算法已经不能满足垃圾分拣设备的要求. 本文提出一种基于卷积神经网络的垃圾图像分类模型 (Garbage Classification Network, GCN). 实验结果证明, GCN 在垃圾分类数据集上取得了优异的结果, 能够有效地提高垃圾识别精度。最后,本文基于训练好的GCN模型实现一个垃圾分类系统,该系统旨在向用户提供垃圾分类的知识,介绍不同类型的垃圾,并提供一个实用的界面,使用深度学习模型对垃圾图片进行分类。
2.基于卷积神经网络的垃圾分类模型实现与训练
垃圾数据集统计如下:(大家可以自己基于该数据集添加更多的类别)
************************************************************
Total Images per class
************************************************************
* cardboard => 403 images
* glass => 501 images
* metal => 410 images
* paper => 594 images
* plastic => 482 images
具体数据展示为:
-
加载和预处理数据:
# Load and preprocess the data train_datagen = ImageDataGenerator(horizontal_flip=True, rescale=1./255, zoom_range=0.2, validation_split=0.2) train_generator = train_datagen.flow_from_directory( "./dataset/", target_size=(128, 128), batch_size=100, class_mode='categorical', subset='training' ) validation_generator = train_datagen.flow_from_directory( "./dataset/", target_size=(128, 128), batch_size=100, class_mode='categorical', subset='validation' )
使用
ImageDataGenerator
加载和预处理训练数据和验证数据。在这里,数据进行了水平翻转、像素值缩放和缩放范围设置,并划分了验证集。 -
模型架构:创建了一个卷积神经网络(Convolutional Neural Network, CNN)模型,并依次添加了两个卷积层、池化层、Flatten层以及三个全连接层。卷积层用于提取图像特征,池化层用于降维,全连接层用于分类。
model = Sequential()
model.add(Conv2D(32, (3,3), input_shape=(128, 128, 3), activation='relu', padding='same'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Conv2D(32, (3,3), activation='relu', padding='same'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Flatten())
model.add(Dense(300, activation='relu'))
model.add(Dense(150, activation='relu'))
model.add(Dense(5, activation='softmax'))
使用Conv2D函数添加一个卷积层,参数包括:32个滤波器(filters):表示该层输出的特征图数量。卷积核大小为(3, 3)。输入形状为(128, 128, 3),表示输入图像的尺寸为128x128,通道数为3(RGB)。激活函数为ReLU。padding设置为'same',表示对输入图像进行边界填充,保持输出与输入尺寸相同。使用MaxPooling2D函数添加一个最大池化层,参数为池化核大小为(2, 2),用于降低特征图的空间维度。再次添加一个相同参数的卷积层和池化层,用于进一步提取图像特征并降维。使用Flatten函数添加一个Flatten层,用于将多维数据压扁成一维数据,以便连接到全连接层。添加两个全连接层,分别包含300个和150个神经元,使用ReLU激活函数。添加一个输出层,包含5个神经元,对应5个类别(假设是5类问题),使用softmax激活函数进行多类别分类。
3. 训练模型:
最终,准确率可以训练达到90%左右。并使用save
方法保存训练好的模型到文件中。
3.基于深度学习的垃圾分类系统实现
将训练好的模型集成到 Flask 应用程序中:在 Flask 应用程序的代码中,添加模型的加载和预测函数。确保模型可以正确加载并对上传的图片进行预测。在服务器上部署 Flask 应用程序:将整个 Flask 应用程序上传到服务器,并确保服务器上已经安装了 Flask 和其他必要的依赖项。然后通过命令行运行 Flask 应用程序,使其在服务器上监听指定的端口。确保可以通过浏览器访问:在浏览器中输入服务器的 IP 地址或域名,加上相应的端口号(默认为 5000),即可访问部署好的 Flask 应用程序。本文将要实现的垃圾分类系统包含以下功能:
1.上传图片进行预测:用户可以通过网页界面上传垃圾图片。上传的图片会经过预处理,并使用预先训练好的深度学习模型进行分类预测。
2.预测结果展示:系统会将分类预测结果显示在网页上,告知用户该垃圾属于哪一类别。结果展示以图文结合的方式呈现,包括图片和分类标签。
3.多类别分类:模型可以对多种类别的垃圾进行分类,例如纸张、玻璃、金属、塑料等。
每个类别都有对应的图片和说明,用户可以通过预测结果了解垃圾的分类情况。
4.响应式界面设计:界面设计采用了响应式布局,适配不同大小的屏幕,提供良好的用户体验。
5.关于本项目页面:提供了关于本项目的介绍,说明了垃圾分类的重要性以及项目的解决方案。
6.展示了几种常见垃圾的图片和说明,增加了用户对垃圾分类的认识。
7.轮播图片展示:在页面顶部设置了轮播图片,通过动态展示图片和配文吸引用户关注。
在项目文件夹中创建一个名为 templates 的文件夹,然后在其中创建 HTML 文件,设计上传图片的界面(例如 index.html)和显示预测结果的界面(例如 result.html)。最后设计实现的界面如下:
开始进行垃圾图像预测:
上传图像:
预测:
4.总结
本文主要研究了基于深度学习和 Flask 的垃圾分类系统的设计与实现过程。首先,提出一种基于卷积神经网络的垃圾图像分类模型 (Garbage Classification Network, GCN),实验结果证明, GCN在垃圾分类数据集上取得了优异的结果, 能够有效地提高垃圾识别精度。其次,是Flask 应用程序开发部分,将深度学习模型应用于垃圾分类系统中。这个系统可以让用户上传垃圾图片,然后通过深度学习模型进行分类预测,最终展示预测结果给用户。
本文代码基于python3.7.0配置numpy==1.19.5、Flask==1.0.2、Keras==2.2.4、tensorflow等
完整代码下载链接:
https://download.csdn.net/download/weixin_40651515/89183885