基于YOLOv3与ResNet50算法的智能垃圾分类系统

2021-11-14 04:20王朔郭凤娜
传感器世界 2021年9期
关键词:开发板残差垃圾

王朔 郭凤娜

1. 北京信息科技大学自动化学院,北京 100192;2. 华北电力大学(北京)控制与计算机工程学院,北京 102208

0 前言

随着我国社会经济发展,居民生活垃圾的产生急剧增加,对于可回收垃圾,如果处理不当会造成资源的浪费,而对于有害垃圾,如果未及时处理甚至会对环境产生影响。针对如此情况,国家相关部门在2019年4月26日发布了《关于在全国地级及以上城市全面开展生活垃圾分类工作的通知》,这标志着我国垃圾分类处理已经进入了一个全新的政策化时期。2020年,在新冠疫情期间,因为居家隔离政策以及医疗负担的增加,导致生活垃圾、医疗垃圾均大幅增加,这部分增加的垃圾中很多都可能与新冠患者有着密切接触,比如隔离产生的生活垃圾,废弃的口罩、防护服等。这部分垃圾如果得不到正确处理,还是采用原有的人工垃圾分类,不仅会耗费大量人力、物力、时间,甚至会大大增加二次感染的风险,所以,迫切需要一款智能设备来改变现状。目前,垃圾分类难度大的原因就是群众对于垃圾的所属类别不明确,随着人工智能技术,尤其是深度学习中的卷积神经网络在图像处理方面的飞速发展,再结合相关硬件,使解决这一问题变成了可能。

近年来,基于深度学习的目标检测与识别方法取得了较为理想的效果,相比较传统方法好很多,鲁棒性更强。这一系列检测算法基本可以分为两大类:第一类为二阶段检测器,此算法将检测问题划分为两个阶段,需要先通过算法产生目标候选框,包含目标大致的位置信息,然后再针对算法产生的目标候选框进行 分 类 与 回 归。SPP-Net、R-CNN、Fast R-CNN、Faster R-CNN等都属于此类目标检测算法的典型算法,这类算法准确率较高但是速度较慢;第二类为一阶段检测器,这类算法不需要region proposal阶段,其仅仅使用一个卷积神经网络CNN直接预测不同目标的类别与位置,之后只需经过一次检测就可以得到最终的检测结果,检测速度更快,比较典型的算法如SSD、YOLO、YOLOv2、YOLOv3等[1]。YOLO第一代算法性能虽然不如SSD算法[2],但是YOLOv3算法在速度和准确性上均优于SSD 算法。YOLOv3算法相比较YOLOv2[3]也有了很大提升。首先,由于YOLOv3算法采用的是3种尺度多采样特征图方法,在小目标的检测上也具有很高的准确率,另外,YOLOv3算法的网络由YOLOv2使用的Darknet-19网络换成了更深的Darknet-53网络,检测结果与RetinaNet网络[4]的准确性接近,并且具有更快的速度。综上所述,YOLOv3满足了垃圾分类检测中的快速性要求,也在小目标检测效果上得到较大的提升。同时,深度残差网络(Residual Network,ResNet)等深度学习经典图像检测模型的出现[5]也能使垃圾分类的效果显著提升。

1 软件模块设计

1.1 YOLOv3算法

1.1.1 YOLOv3算法概述

经过前代YOLOv1算法和YOLOv2算法的广泛应用,为了满足更高的要求,YOLOv3算法应运而生。YOLO算法模型较为简单,虽然在速度上满足实时检测的要求,但因为对网络划分进行预测,因此对于小目标检测效果较差。YOLOv3使用了新的网络结构Darknet-53,同时借鉴了FPN的思想,采用多尺度特征融合,从不同尺度提取特征,使YOLOv3相比较YOLOv2和YOLOv1在小目标检测上效果进一步提升。预测分类中,Softmax loss被多个Logistic loss取代,多标签分类取代单标签分类。在检测精度上得到了进一步的提升,同时也保持了检测速度上的优势。进行垃圾检测时,YOLOv3使用包含垃圾的图片作为深度学习网络的输入,直接在输出层回归预选框所属的垃圾的类别及其位置,使用一个神经网络就可以实现端到端的目标检测,这种思想将目标检测任务作为一个回归问题来处理。

1.1.2 Darknet-53网络框架

在进行特征检测的过程当中,没有继续沿用YOLOv2算法的Darknet-19网络,而用Darknet-53网络代替。YOLOv3算法为了提高网络检测的效率,参考了残差网络的思路,在某些层设置了快捷链路[6]。YOLOv3算法采用的Darknet-53网络相对于YOLOv2采用的Darknet-19 网络,在处理速度并没有明显降低的情况下,平均准确率有着较大的提升,同时,经过对比Darknet-19网络和Darknet-53网络,后者可以实现更高的测试浮点运算,使其在运算中更好地利用GPU,预测的效率也会相应提高。

1.1.3 YOLOv3边界框预测

YOLOv1算法的预测框坐标(x,y,w,h)是直接预测出来的,坐标即使发生微小的变化,其映射到实际图片中会造成很大变化,从而导致预测失败。YOLOv3针对这一问题进行了改进。YOLOv3边界框的预测采用维度聚类设定模板框,通过网络预测相关变量(tx,ty,tw,th),则边界框中心点坐标与边界框的宽与高分别为:

其中,(cx, cy) ——网格偏移图片左上角的位置坐标;

pw, ph——模板框的宽与高,如图1所示。

边界框预测在训练期间采用平方和误差损失进行监督训练,输出边界框后,采用Logistic回归对框内部分目标进行打分,根据分值选取得分最高的模板框进行预测,节省计算时间[7]。YOLOv3的边框回归计算方式能够有效防止YOLOv1中因偏移过大带来预测结果失败等问题。

1.2 ResNet模型架构

随着统计学习方法的不断出现与改进,促进了深度学习领域的快速发展,最近几年,深度卷积神经网络在图像识别领域也取得了较为理想的效果。深度卷积网络随着网络层数的增加,能够学习到的图像的信息增加,但是随着网络层数的增加,会出现梯度消失和梯度爆炸问题,进而出现网络模型退化问题,导致系统不能收敛,并且会使模型训练的难度增加。HE K等人[5]在原始DCNN网络结构中加入快捷连接,构成基本的残差元 (residual block,RB),如图2所示,添加快捷连接能够在一定程度上解决深度卷积神经网络模型退化问题[8]。

ResNet34和ResNet50是各领域常用的两种网络结构[8],是由不同的残差元堆叠而成。H(x)表示深度卷积神经网络中的原映射,添加快捷连接后,H(x)变为H(x)=F(x)+x,其中,F(x)=H(x)-x表示ResNet网络的映射,称F(x)为残差,对应的网络结构就是残差网络,F(x)相对于H(x)来说更容易拟合,因此,ResNet网络提升了深度卷积神经网络的性能[8]。

残差元RB定义为:

其中,x——残差元RB的输入;

H——残差元RB的输出;

F(x,{W}) ——ResNet50网络的残差映射,并且x和F(x,{W})的维数必须相等,若x和F(x,{W})的维数不等时,需要在快捷连接上补加ws线性投影[8]:

基于YOLOv3完成垃圾检测后,需要进行垃圾识别,确定目标垃圾类别,构建 ResNet50模型,完成垃圾的分类识别。

2 硬件模块设计

2.1 硬件选择

在本次设计中,硬件部分选择了Arm公司的EAIDK-310开发板、罗技C270摄像头以及液晶显示器。EAIDK-310开发板预装嵌入式深度学习框架Tengine,支持Caffe/TensorFlow/Pytorch/MxNet/ONNX/Darknet等训练框架模型直接部署,支持层融合、量化等网络性能优化策略,提供统一API(C/Python/JNI)接口,提供扩展接口自定义算子,解决了深度神经网络模型在端侧设备上进行推理的问题,满足在本次设计中进行图像分类处理等AI决策的需求。罗技C270作为本次的图像采集装置,最高可支持720 p、30 fps的图像高速传输,也满足本次图像采集的需求。

2.2 硬件电路接口

本次设计的硬件电路采用的是EAIDK-310开发板,通过电路板的接口外接了摄像头图像采集模块和液晶显示屏,硬件电路接口如图3所示。硬件整体实拍图如图4所示。

3 实验过程及结果分析

3.1 实验配置

首先,需要配置开发板所需的环境,登录EAIDK-310预装Fedora 28及轻量级桌面系统LXDE;然后,在Linux系统下对该开发板的主机固件进行烧写,配备相关的环境变量添加源与安装RPM包,在开发板相关环境配备完成后进行具体的实验设计。总体来说分为两个部分:一是搭建基于Tensorflow的深度学习框架和CUDA并行计算库进行垃圾分类模型的开发训练;二是模型导入开发板后配置调用摄像头模块对实际垃圾进行分类识别。

3.2 数据集的获取和处理

本次设计参照北京市人大常委会最新修订的《北京市生活垃圾管理条例》,《条例》中将生活垃圾分为4类:有害垃圾、厨余垃圾、其他垃圾、可回收垃圾。在每一种类别中选择一种具体垃圾作为类别代表,分别是杀虫剂(有害垃圾),烂苹果(厨余垃圾),废弃耳塞(其他垃圾)以及废旧报纸(可回收垃圾)。每种类型垃圾的数据集图片约有250张,总共的数据集约1,000张,其中,选择100张作为测试集,剩余900张作为训练集进行训练。

接下来需要对数据集进行预处理,首先设置好读取图片的批次大小和训练需要图片大小。数据集分类保存为4个文件,读取时遍历4个文件,对每一个文件的下的数据集进行像素转换、归一化等一系列处理并打上标签,进而得到标准数据集。

3.3 配置调用摄像头模块对实际垃圾进行分类识别

本次设计在硬件上采用的处理模块是EAIDK-310自带的Tengine(python),编写摄像头调用程序获取采集图像,结合OpenCV对图片进行读取、预处理,并结合已经导入到开发板上的训练好的模型,使用Tengine python接口进行分类,最终将图像和分类结果实时显示在液晶显示屏上。首先进行相关的环境配置和库的安装,安装Protobuf、python3-devel、numpy数据处理库和pytengine。根据转换之后的tmfile模型文件,通过调用Tengine的Python API进行模型的读取、图的创建,并获取最终数据。图5是具体实现对垃圾检测和分类的流程。

3.4 算法实现与结果

算法的设计采用的是YOLOv3预训练模型,加载YOLOv3初始化权重,将学习到的不同种类垃圾特征用于对垃圾进行检测,然后将检测出来的垃圾放入ResNet预训练网络中,进行垃圾类别的训练。

完成垃圾检测和识别模型的搭建后,在训练集样本上进行训练。使用YOLOv3进行垃圾检测,可以很好地检测出各种类型的垃圾,使用训练好的模型对测试集中4类各100张垃圾图片进行检测,其平均识别准确率达到95%以上,在对实际生活中的日常垃圾进行实际检测时,平均检出率为91.3%。对测试集检测的部分结果如图6、图7所示,其中,测试集对应的标签为Hazardous_waste_shachongji(有害垃圾—杀虫剂)、Kitchen_waste_apple(厨余垃圾—烂苹果)、Otherwaste_waste_ersai(其他垃圾—废旧耳塞)、Recyclable_waste_newspaper(可回收垃圾—旧报纸)。从图6、图7可以看出,本设计能对垃圾进行有效的分类。图8、图9是液晶显示屏实时采集图像并对其定位框选,输出垃圾类型,在图9中对于一旁的书柜并没有进行框选,说明本次设计对垃圾有很好的检测效果,精度也较为理想。更为具体的训练结果如表1所示,展示了在训练完算法模型后其在测试集上的识别准确率表现;表2展示的是对实际日常生活中垃圾分类检测的检出率结果。表1和表2更为直观的展示了本次设计对垃圾检测的效果。

表1 算法模型在测试集中的验证结果

表2 算法模型在实际生活中对垃圾的检出率

与传统方法相比,本设计在垃圾检测中鲁棒性较高,稳定性好,能够自动提取垃圾特征,并且检测准确率远高于传统方法,能够完成在各种环境下的垃圾检测分类[9]。

4 总结

生态文明建设是当今社会不可避免的话题之一,垃圾分类作为我国生态文明建设中的重要部分也提升到了国家政策的高度。垃圾分类与我们每个人都息息相关,在疫情期间更是对现有的垃圾分类制度提出了新的挑战。本设计利用YOLOv3和ResNet50进行垃圾分类模型的训练,该模型可以实现对常见垃圾的自动定位与识别分类,并实时地将识别分类结果展示在显示屏上。最终经过实验,其平均检出率可达到91.3%,相比传统方法,鲁棒性更好,准确率更高,具有一定的实用价值。该系统也存在一定的不足之处:一是目前数据集种类及数量偏少,识别分类能力有限;二是碍于硬件限制,识别的实时性做的不够好,识别较摄像头采集画面存在一定的延迟。在后续研究中,将增加垃圾数据集的种类及数量,提高识别的准确率,同时采用性能更强的硬件,进一步提高分类识别的实时性。

猜你喜欢
开发板残差垃圾
基于双向GRU与残差拟合的车辆跟驰建模
垃圾去哪了
基于残差学习的自适应无人机目标跟踪算法
那一双“分拣垃圾”的手
基于递归残差网络的图像超分辨率重建
倒垃圾
浅析单片机开发板的设计与制作
ARM宣布mbed Enabled Freescale FRDM—K64F开发板通过微软认证
平稳自相关过程的残差累积和控制图
Mouser为您呈上开发关键之STMicroelectronics Nucleo开发板