基于卷积神经网络的垃圾图像分类系统研究与实现

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

具体数据展示为:

  1. 加载和预处理数据

    # 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加载和预处理训练数据和验证数据。在这里,数据进行了水平翻转、像素值缩放和缩放范围设置,并划分了验证集。

  2. 模型架构:创建了一个卷积神经网络(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

最近更新

  1. TCP协议是安全的吗?

    2024-04-27 18:42:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-27 18:42:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-27 18:42:03       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-27 18:42:03       20 阅读

热门阅读

  1. 【C++例】虚函数—代码实例

    2024-04-27 18:42:03       12 阅读
  2. jQuery

    jQuery

    2024-04-27 18:42:03      10 阅读
  3. c++ 计算引物退火温度

    2024-04-27 18:42:03       13 阅读
  4. 【48天笔试强训】day13

    2024-04-27 18:42:03       20 阅读