南航金城学院机电工程与自动化学院 李朝宇 田 莉 刘伟康 闫文龙 吴家润
随着人们的生活水平越来越高,生活垃圾的处理变成了社会的一大难题,为解决居民日常生活中的垃圾分类问题,提出了基于图像识别的垃圾分类系统。将卷积神经网络部署在服务器里,并通过API接口移植到树莓派主控板中,实现前后端分离的设计,设计了垃圾分类器的机械结构,最终实现了垃圾自动分类功能,系统具有较高识别率,维护成本低,方便实用的特点,为实现智慧城市,提高居民宜居感,提高资源利用率提供一种解决方案。
目前城市里每天会产生2.55万t左右的生活垃圾,人均每天产生1.1kg,而且数量还在上涨,如此多的垃圾,如果不对其进行垃圾分类,将会造成资源的大量浪费以及对环境的巨大破坏。目前多个城市已经强制推行垃圾分类,但是由于配套设施的不完善和人们的垃圾分类意识不足,垃圾分类的成效不太理想。本文通过搭建云服务器,设计并不断优化卷积神经网络、对生活垃圾中的可回收垃圾、有害垃圾、厨余垃圾、其他垃圾进行了高效智能识别,设计出可自动进行垃圾分类的智能垃圾桶,为构建生态文明城市提供一种智能化解决方案。
本系统的硬件设计采用树莓派作为控制器,垃圾桶的桶体为圆柱形,等分为4个分类桶,分类桶的桶盖向内凹陷成锥形槽,在垃圾桶左方架设一个支撑架用于支撑人工操作显示屏,并且在锥形槽正上方安装摄像头及灯泡,调整角度使其能够最大范围内识别垃圾,架设四个舵机拨片操作云台,通过树莓派发出指令,使对应的舵机箱盖打开,对各种垃圾进行精确的分类处理。机械装置的3D示意图如图1所示。
图1 垃圾桶硬件平台3D模型
整体的系统设计如图2所示,是摄像头对停驻层上的垃圾进行数据采集,并将图像信息传入OpenCV计算机视觉库,经由图像处理后交由云端的Tensorflow中进行整合训练,最终结果返回给树莓派,树莓派主控应用Electron控制flask进行页面交互和舵机控制,服务器端负责管理数据并利用卷积神经网络训练模型,提供应用API接口,由flask进行调用,形成了前后端分离的设计。
图2 垃圾分类系统总体设计图
卷积神经网络(CNN)有较好的非线性形变稳定性,即当我们将垃圾位置进行平移后,仍能得到同样的检测结果。卷积神经网络结构可分为卷积层、最大池化层和全连接层,其结构如图3所示。
图3 卷积网络结构图
卷积层:卷积层的作用是对输入数据进行卷积运算。卷积神经网络中每个卷积层需要使用激活函数。激活函数是对卷积层的数据结果运用激活函数进行非线性映射,本文使用ReLU作为激活函数,其函数定义为:
即输入<0,输出=0。输入>0,输出=输入。
与其他函数相比,ReLU激活函数的优点是收敛快,梯度运算简单。ReLU激活函数的函数图像如图4所示:
图4 ReLU激活函数
池化层:池化层的主要作用是通过对上一层输出做降维处理,即取特征图的最大值使其降低维度,如图5所示。
图5 最大池化层示意图
全连接层:将二维特征图转换为一维的向量,该层执行最后一个矩阵乘法器以计算输出。
图6 全连接网络图
图6所示是一个简单的全连接网络图,表示全连接层上的每个节点都与上层的节点连接,其中x1、x2、x3为全连接层的输入数据,a1、a2、a3为输出数据,全连接层的计算公式如下:
本文采用神经网络ResNet50预训练模型,该模型利用残差学习来解决退化问题。
Resnet的拟合方程是,如下的公式:
其中H(x)为当前网络中拟合的残差映射,F(x)和x分别是一个block层的输出和输入,本文采用三层block结构,如图7所示,可以有效提高模型运算速度。
图7 ResNet50网络结构
数据集是神经网络训练的基础,系统目标是将可回收材料从居民的日常垃圾中区别出来,所以根据居民垃圾的可回收分类标准,本项目从网上收集了17350张开源照片,对图片进行人工标注并将图片分为可回收垃圾、有害垃圾、厨余垃圾和其他垃圾。可把数据集分为训练集和测试集用于神经训练,分别得到各自的损失值和精度值,将训练集上的损失值和精度值用于更新参数,而测试集用于评估模型。
2.4.1 训练环境
训练环境搭建在服务器中,选择Tensorflow1.6作为深度学习的框架,代码的实现环境是Python3.6,Keras2.3.1作为代码的深度学习库,Keras是基于Python编写的高级神经网络,它能够以Tensoflow作为后端运行。
2.4.2 模型训练
首先导入需要的包和库,并定义神经网络参数,如学习效率λ=0.0001,防过拟合参数dropout=0.5,加载数据集,并对其进行预处理,将图片统一设置成(224,224,3)的三通道RGB图片,对图片随机剪切、翻转和旋转等操作,最后引入Resnet50预训练模型。定义卷积层,设置卷积核大小,步幅strides=1,对图像进行低级特征提取,边界填充=0,激活函数选用Relu,加入卷积核权重weight decay=0.0001和偏置送入激活函数中。定义最大池化层,对输入特征降维缩小最后全连接节点个数,定义全连接层,dropout层与Relu激活函数能有效降低过拟合概率,提高数据训练时间,使用SVM支持向量机对输出进行分类,将垃圾分为可回收垃圾、有害垃圾、厨余垃圾和其他垃圾。
2.4.3 模型优化
Tensorflow的模型在运行时,需要优化参数,使损失函数达到最小,故需引入Adam优化器,优化器的任务是在每一个Epoch中计算损失函数的梯度,并更新参数。本系统设置学习率,矩估计指数衰减率,步长。
将Tensorflow训练中的数据保存,并可视化之后,发现损失函数值最低为0.78,识别精度最高为95.52%。如图8所示。
图8 损失函数变化图
用测试集中的图片,对其在PC端的识别精度进行测试,如表1所示,模型在PC端运行良好,能基本区分测试图片,测试准确率最高可达到95%。如图9所示。
图9 识别精度变化图
表1 神经网络模型在PC端的识别率数据表
将神经网络模型部署在服务器端上后,使用测试图片进行识别测试,获得识别准确率,如表2所示,部署后的卷积神经网络识别准确率与在PC端上运行时准确率一致,移植效果较好。
表2 神经网络模型在服务器端的识别率数据表
树莓派是基于Linux开发的,我们需要开发一个能在Linux环境下稳定运行的桌面应用。ELECTRON-VUE相当于一个浏览器的外壳,可以把网页程序嵌入到硬件程序里面,可以运行在桌面上的一个程序,可以把网页打包成一个在桌面运行的程序,通俗来说就是软件,一个可以构建跨平台桌面程序。
图10 人机交互界面设计图
在人机交互软件上,除自动运行方式外,还可让用户在软件上手动选择垃圾种类,启动分类装置动作。如图10所示。
本系统针对垃圾分类问题,提出了通过搭建云服务器,设计并不断优化卷积神经网络,可对生活垃圾中的可回收垃圾、有害垃圾、厨余垃圾、其他垃圾进行智能识别。垃圾识别精度达到了95.52%,满足设计的应用需求,具有良好的应用前景。