当前位置:首页 期刊杂志

改进的SSD生活垃圾检测算法

时间:2024-07-28

李博威,侯 明,李 擎,徐文龙

(北京信息科技大学自动化学院,北京 100192)

1 引言

随着我国的经济快速发展,人民的生活水平有了极大的提升,但同时伴随着生活垃圾快速增长,2016年中国城市固体垃圾产生量达到了2.34亿吨,与1996年相比增幅为88%[1]。与此同时,垃圾中也富含着丰富的资源,在当前资源匮乏的时代,如果生活垃圾的有用物质可以得到有效利用,将对循环经济的发展有着重大作用[2],故如何对垃圾进行有效的检测与分拣已经成为垃圾资源化处理的前提。垃圾本身形态各异、种类繁多;其分类是一种复杂度高、强度大、环境恶劣的工作,采用人工分拣是当前的主要形式,避免不了对工作人员造成损伤。采用先进设备代替人类从事恶劣、复杂、高强度的工作,是当前AI与机器人技术的重要应用,这里主要研究垃圾检测的问题。

目前的目标检测算法分为两类:传统的特征提取方法、基于深度学习的方法。传统方法是通过图像特征即SIFT[3]、HOG[4]等,与SVM[5]等分类器组成,但由于传统的方法对于图像特征的提取人为干预过多,在明显的物体与简单背景的情形下,有很好的检测效果。对于垃圾这种形状不规则、尺寸变化范围大、混叠遮挡严重、种类繁多的复杂应用场合,传统的目标检测算法对于兴趣目标的检测性能低,鲁棒性差,不能满足实时要求。近些年来,随着深度学习领域的研究与发展,基于深度学习的目标检测算法广泛地应用在遥感图像[6]、无人驾驶[7]等领域中。基于深度学习的目标检测算法在人工智能方面应用的越来越多,其具有结构灵活、特征自动提取、检测精度高、检测速度快等优点,目前分为两大类,两步算法与一步算法。

以Faster R-CNN[8]为代表的两步检测算法,利用区域提取的方法,在每张图像上提取约两千多个候选区域,然后对候选区域进行分类以及位置回归,虽然这种算法检测精度高,但是存在运行效率低的问题,为了实现垃圾检测算法在实际生活中应用,算法需要满足实时检测要求,故此类算法不能高效的完成垃圾分类工作。

以SSD[9](Single Shot Multibox Detector)为代表一步检测算法,相比于两步的检测算法少了RPN(Region Proposal Network)这一步,并采用了两步法中Faster R-CNN的Anchor思想,即对于每一点上选取一系列不同长宽比的矩形边框,直接在输出层回归边界框极其类别,且在不同尺寸的特征图上进行预测,在检测结果上可以媲美两步法,同时检测速率高,可以满足实时要求,因此选择SSD算法处理垃圾检测问题。

2 改进网络模型

2.1 SSD网络模型

SSD是经典的一步检测算法,如图1所示。以VGG16为基础提取网络层,并用卷积层Conv6 与Conv7 分别替代了原FC6 和FC7,增加了4 个深度卷积层,最终在Conv4_3,Conv7,Conv8_2,Conv9_2,Conv10_2,Conv11_2 这一组特征层上进行分类预测与边框回归。

图1 SSD检测结构Fig.1 SSD Detection Model

SSD目标检测算法的优势在于,使用了回归思想与候选框方法,通过设计特征金字塔形式,添加4个深度卷积层,用于高级语义信息的提取,从不同尺度的特征图下面来预测目标分类与位置。在保证检测速度的情况下使得检测精度与两阶段算法相当。

这种思路可以提高对大目标定位与分类的准确性,但作为垃圾检测算法不能达到预期效果,首先SSD算法中的基础提取网络VGG16相对于目前所提出的网络,其网络层数浅、参数量大,对于特征层之间的信息交流少;其次由于大目标在图片中的占比大,包含信息更多,通过多尺度预测能够达到预期效果,但是对于低分辨率的小目标来说,所包含的有效信息较少,即使用分辨率大的浅层特征图来检测,也无法很好的完成分类与回归的预测;最后SSD网络使用的回归损失与网络的评估标准不等价,存在局限性,不能更好的完成边界框回归。因此为了提高垃圾检测的准确率,并保证检测速率,现对该算法进行如下改进。

(1)使用DenseNet[10]网络替换原SSD 中的VGG16 网络。与原网络相比,该结构能够保证检测速率,从特征复用的角度上提高了网络性能,不仅减少了参数量,并且将网络加深,同时减轻了梯度消失的现象,实现密集连接。

(2)借鉴FPN(Feature Pyramid Network)的思想改善SSD 在小目标检测精度不明确的问题,对不同尺寸的特征图进行融合,利用浅层网络分辨率高的特点,学习图片的细节特征;利用深层网络分辨率低特点,学习语义特征。

(3)使用GIoU(Generalized IoU)损失函数作为本网络的回归损失,用于解决回归损失与网络评估时的不等价问题,并且可以较好的表现边框重叠程度。

2.2 改进SSD结构

针对SSD算法中基础特征提取网络中网络层数浅、参数量大的问题,选用DenseNet替换原网络中的VGG16。DenseNet网络结构,如图2所示。该网络由多个Dense Block和Transition Layer组成。

图2 DenseNet 检测模型Fig.2 DenseNet Detection Model

核心在于每一个Dense Block是由多个Dense Layer组成,每一层的输入是由前面所有层的输出通过通道拼接的形式结合所形成的。每一层的输入计算公式,如式(1)所示,此处不同于ResNet中的相加的操作,如式(2)所示。

DenseNet是通过通道合并的方式将特征图进行合并,如图3所示。避免直接相加对信息造成的损失,且只需要保证特征图大小相同,通道数则不受限制,即描述图像本身的特征增加了,而每一层下的信息量没有增加,从特征复用的角度上获得更优的性能,缓解梯度消失现象。

图3 叠加模块Fig.3 Concat Module

由于拼接操作大量占用显存,对Dense Block做出简化,只对相邻的两个Dense Layer进行拼接操作。Dense Block通过采用通道叠加的方式,以及Dense Layer中1*1卷积的存在,可以有效解决VGG16网络中网络层数少、参数量大、特征层间信息交流少的问题。选用Dense Block2、Dense Block3、Dense Block4,与原网络保留的最后三个特征图一起用于多尺度预测。输出的特征图大小为{37*37、18*18、9*9、5*5、3*3、1*1},如表1所示。

表1 输出特征图Tab.1 Output Feature Map

2.3 特征融合方法

针对SSD算法对于小目标检测性能差的问题,采用特征融合方式强化算法对小目标的识别。FPN用来解决在目标检测算法中对于不同尺度目标的检测问题,通过简单更改网络布局,最大化提升网络对于小物体的检测能力,如图4所示。首先通过输入图像通过卷积操作得到特征图,然后将最高层特征图与前一层获得的相同大小的特征图进行逐元素相加,从而加强每一层特征图语义特征,并且在处理信息时,都有作为高层的信息作为输入。

图4 FPNFig.4 FPN

通过借鉴FPN算法,通过将高分辨率的浅层特征图进行反卷积,映射为高分辨率特征图,进行元素相加,如图5所示。首先对高层特征图进行上采样,然后与通过1*1卷积层降维后的前一层特征图相加,最后通过一个3*3的卷积层去除混叠效应。

图5 这里的检测模型Fig.5 The Detection Model in This Paper

2.4 边界框回归损失

原网络通过预测框与真实框之间的smoothL1损失,本质上是使L1损失函数在0点附近更加平滑,如式(3)~式(4)所示。

原网络使用smoothL1计算位置回归损失,但在评估时则用IoU判断是否检测到目标,故会发生损失相同的情况下,IoU效果不一定相同,如图6所示。因此为了更好的完成边界框回归,可选用IoU作为损失函数。

图6 相同损失下不同IoUFig.6 Same Loss but Different IoU

但IoU 作为损失函数会有两个局限:(1)当IoU 为0时,没有梯度,无法进行训练;(2)IoU不能反映预测框与真实框的重叠程度,即IoU结果相同,但回归的效果不同。

GIoU可以解决上面两个问题,如图7所示。通过找出包含目标框(A)和预测框(B)的最小图形(C),假设预测框和真实框的坐标分别用,得到的IoU值、GIoU值、最终损失函数,如式(5)~式(7)所示。

图7 GIoU原理Fig.7 GIoU Principle

式中:Ap-预测框的面积;At-真实框的面积;I-重叠面积;Ac-包含真实框与预测框的最小面积。

由上述计算得出,当IoU值为0时,GIoU为1,可以解决局限一;当IoU值相同时,求得的最小包含面积不同,所以GIoU可以反应重叠程度,解决局限二。故选用GIoU作为回归损失函数。

3 实验与分析

这里的实验环境均在云服务器搭建,训练环境为Linux系统Ubuntu16.04LT,深度学习框架为Pytorch,GPU为Titan RTX 24G。

在训练过程中,这里的算法与SSD算法设置学习率为0.001,动量为0.9,衰减因子为0.00005。在输入尺度为(300×300)时,batch_size设置为32,输入尺度为(512×512)时,batch size设置为16。VOC数据集分别在70000,90000次时调整学习率为原来的十分之一,迭代100000次;生活垃圾检测数据集在50000此时调节学习率为原来的十分之一,迭代60000次。

3.1 PASCAL VOC数据集实验分析

为验证算法的性能,在PASCAL VOC 数据集上进行算法的训练与评估的对比实验。在PASCAL VOC数据集中采取联合训练的方式,训练集由PASCAL VOC2007的训练集部分与PASCAL VOC2012的训练集部分组成。测试集由PASCAL VOC2007的测试集部分组成。

在VOC2007的测试集上所得到的结果,如表2所示。SSD算法与这里的算法使用了不同的初始尺度进行训练,Faster R-CNN采用了不同网络结构进行训练。这里的算法300 的mAP 为79.0%,检测精度较原SSD300 提高了1.7%;这里的算法512 的mAP为81.4%,检测精度较SSD512提高了1.9%。

表2 VOC2007测试集检测结果对比Tab.2 Comparison of Test Results of VOC2007 Test Set

为了进一步验证算法对各个目标的检测能力,通过对比这里的算法300与SSD300算法在VOC2007测试集中20类目标的检测精度,如表3所示。这里的算法对小目标‘Bottle’,‘Pottedplant’,‘Sheep’,‘Tvmonitor’上的检测精度相比原SSD 算法分别提升了3.7%,5.4%,5.6%,3.1%。通过对比可知,这里的算法能够通过提升网络对检测小目标的检测能力,进而提升算法整体的性能。

表3 VOC2007 各类目标检测结果对比Tab.3 Various Target Detection Results in VOC2007

3.2 生活垃圾检测数据集实验分析

由于目前网络上没有公开的生活垃圾检测数据集,故采用爬虫技术与相机拍摄共采集图片13880张图片,共37类分别为可回收垃圾:充电宝、废旧包、洗护用品、塑料玩具、玻璃器皿、插头、塑料器皿、易拉罐、废旧枕头、塑料衣架、快递纸袋、废旧衣服、毛绒玩具、废旧鞋、砧板、纸箱、调料瓶、酒瓶、金属食品罐、锅、食用油桶、饮料瓶。厨余垃圾:剩饭菜、大骨头、鱼骨、果皮、菜帮菜叶、茶叶渣、蛋壳。有害垃圾:干电池、药物软膏、过期药品。其他垃圾:陶瓷器皿、烟蒂、筷子、塑料袋、快餐盒。通过Labelimg软件对采集的图片进行标注,并转化为VOC格式,其中训练集分为11104张图片,测试集图片分为2776张图片。

测试集上的检测结果,如表4所示。所设计的网络与原网络相比,在输入尺度为300 和512 时,检测精度分别提升了2.1%、3%。损失曲线图,如图8、图9所示。可以看出这里的算法在训练起始阶段损失低于SSD算法,并且随着训练逐渐趋于稳定。

表4 生活垃圾测试集检测结果对比Tab.4 Comparison of Test Results of Domestic Garbage Test Set

图8 SSD损失曲线Fig.8 SSD Diagram

图9 这里的算法损失曲线Fig.9 Loss Diagram of the Algorithm in This Paper

这里的算法512与SSD512的各类目标准确率结果,如表5所示。这里的算法在烟蒂、插头的小目标物体较原算法分别有6.4%,5.9%的提升,并且对于果皮、菜叶、大骨头较难识别的厨余垃圾也有4.6%、4.5%、2.9%的提升,特别是对于酒瓶的检测,有了10%左右的提升。

表5 各类生活垃圾检测结果对比Tab.5 Various Target Detection Results in Domestic Garbage

为了检验算法的实时性效果,在生活垃圾的测试集上进行测试,如表6 所示。这里的算法300 和算法512 的FPS 分别为17、23,SSD算法的FPS分别为16、26,在精度提升的情况下,保证了检测速度,可以满足实时要求。

表6 不同算法的检测速度对比Tab.6 Comparison of Different Algorithm Detection Speeds

进一步验证算法的可靠性,这里进行了两组可视化检测实验,第一组为特征图可视化实验,如图10所示。对SSD网络与这里的网络的前两个预测特征图进行可视化,可以发现,这里的网络可以有效的增强底层特征图的信息,提高对小目标的识别能力,其中输入尺度为512时第一层与第二层的预测特征图,如图10(a)、图10(b)所示。

图10 这里的算法(左)与SSD算法(右)特征图对比Fig.10 Comparison of Feature Map Between the Algorithm in This Paper(Left)and SSD(Right)

第二组为检测结果可视化实验,如图11所示。

图11 这里的算法(左)与SSD算法(右)检测结果对比Fig.11 Comparison of Detection Results Between the Algorithm in The(Left)and SSD(Right)

SSD算法对于小目标的检测能力差,容易出现漏检、错检、定位不准的现象。这里的算法极大改善了这一性能算法则可以在多目标的情况下进行有效预测,抗干扰能力强,可以获得更优的检测效果。

4 结语

针对生活垃圾的检测工作,提出了改进的SSD 垃圾检测算法,通过研究SSD网络及相关的理论基础,并分析了SSD算法所存在的问题,用简化的DenseNet 替换原网络中的基础网络VGG16,实现了网络结构的密集连接,在保证特征的传递与特征重用的基础上,从一定程度上减轻了梯度消失问题;引用FPN结构,大幅度提升了小物体检测的性能;使用GIoU损失作为回归损失,获得更好的检测性能。

最后通过实验分析,所提出的算法在VOC数据集上相比于SSD300 和SSD512 分别有1.7%和1.9%的提升,在生活垃圾检测数据集上分别有2.1%和3%的提升,实验表明,所设计算法能够提升检测精度,提高鲁棒性,相比于原算法在小目标的检测精度上有了显著的提升,同时保证了检测速率,满足实时垃圾检测的需求。由于所设计的网络结构,通道叠加操作过多,数据需要多次的复制并传递到下一层,需要开辟过多的显存,导致检测速度提升不大,在下一步的研究工作中,我们将对网络结构做进一步的优化,在保证精度的同时提高检测速度。

免责声明

我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!