耿丽婷,阿里甫·库尔班,米娜瓦尔·阿不拉,丁 培,蒋润熙新疆大学 软件学院,乌鲁木齐 830046
随着我国经济生活的进步,人们生活质量大幅提升,垃圾产量迅猛增加。伴随着2019年7月1日上海市《上海市生活垃圾管理条例》的实施,垃圾分类也逐渐进入大家的视野[1]。然而如今我国垃圾的再利用主要依靠人工分拣的方式,造成人力资源浪费、分拣效率低下、资源利用率低等问题。因此,本文提出利用深度学习技术检测可回收垃圾,提高资源利用率,促进生态文明建设。
近年来,深度学习的飞速发展,目标检测技术也取得了瞩目成就。目前主流的检测方法,主要分为两类[2]。一类是基于候选框的两阶检测算法,将检测分为两步,先产生候选框,再对候选框分类。常见的算法有R-CNN[3]、SPPNet[4]、Fast R-CNN[5]、Faster R-CNN[6]等。另一类是基于回归的一阶检测算法,该方法不需要产生候选框,直接将目标框定位问题转化为回归问题处理,虽然精度会有所损失,但是检测速度一般比两阶算法更快。常见的算法有SSD[7]和YOLO[8-9]系列。
深度学习技术在垃圾检测方面也取得了较大进展。Liu等人[10]提出采用MobileNet-YOLOv2[11]的轻量化的神经网络与物联网技术相结合,将卷积神经网络应用于嵌入式端,降低工业检测成本。刘恩乾[12]提出采用CBAM注意力机制和SSD算法相结合用于检测和分类生活垃圾。宁凯等人[13]提出采用改进的YOLOv2算法嵌入到机器人中用于检测和分类垃圾,实现了智能扫地机器人。Cui等人[14]采用YOLOv3算法检测街道的生活垃圾、装修垃圾以及大型垃圾,在GTX1080Ti上检测速度可以达到60 ms。虽然以上研究为垃圾检测任务做出了一定贡献,但是在精度或者检测速度等方面仍有较大的改进空间。SSD算法作为经典的目标检测算法之一,具有检测速度快的优势,便于实时检测。但是在实际应用中,需要考虑占用硬件的内存空间、检测速度以及检测精度等问题。而原始SSD以VGG16作为骨干网络,存在模型参数量大的问题,难以应用于算力低的嵌入式设备中,同时随着深度学习的不断发展,VGG16-SSD算法的精度已经远达不到实际需求。
因此本文主要针对可回收垃圾检测实时性和精度的需求,以SSD算法为基础进行改进,提出基于轻量化高精度卷积神经网络。采用轻量的RepVGG作为骨干网络,通过结构重参数化方式大幅减少计算量,满足实时性要求。对SSD算法的辅助卷积层提出改进的同时引入SK模块,动态调整感受野尺寸,提高网络空间信息的聚合能力,提高检测精度。实验表明,该方法在可回收垃圾检测任务中具有良好的检测性能,可以更好地应用于工业。
SSD模型的网络结构如图1所示,该结构由两部分组成。SSD模型在特征提取部分中采用VGG16[15]结构,通过深度卷积提取多个尺度的特征图。另一部分为辅助卷积层,通过不同尺度的卷积层输出进行特征融合。
图1 SSD模型图Fig.1 SSD model diagram
SSD使用VGGNet作为骨干网络时,使用了VGGNet的前13个网络层,其中Conv4_3作为提取特征的特征图。为了获取更多的特征信息,在VGGNet后增加了几层卷积结构,即组成了SSD算法的辅助卷积层。使用Conv6、Conv7取代原始VGGNet中的全连接层。Conv6中使用扩张率为6的空洞卷积,使用该结构可以在增加感受野的同时保持参数量不变。由骨干网络和辅助卷积层生成的6个不同尺度的特征图,如图1中所示的Conv4_3生成大小为38×38的特征图,Conv7至Conv11依次输出大小为19×19、10×10、5×5、3×3和1×1的特征图。其中浅层的特征图用于检测小物体,深层的特征图用于检测大物体。
6个特征图分别对应人工设置的PriorBox,分别为4、6、6、6、4、4。将其与标签边框匹配,筛选出正负样本,并计算损失。通过分类网络和回归网络预测不同大小目标的位置和分类。
由于SSD算法采用多层特征图进行预测,且为一阶网络,因此在速度和精度上都有较好的效果。尤其是在速度方面可以很好地应用于工业中,可满足可回收垃圾检测任务的速度要求。
本文试图采用轻量级的网络结构在保证精度的情况下,以解决由VGG16网络造成的参数量大、内存占有率高等问题。同时对SSD算法的辅助卷积层进行改进,对比了多种卷积结构,最终选用由不对称卷积组成的RepVGG式结构与ReLU相结合的方式作为SSD的辅助卷积层。为进一步降低参数量和计算量,采用结构重参数化提高模型的推理速度。同时对可回收垃圾数据进行研究,发现其尺寸变化大的问题,因此引入了SK模块旨在提高网络结构的检测准确率。算法的具体网络结构如图2所示。
图2 实验模型图Fig.2 Experimental model diagram
2021年Ding等人[16]提出了RepVGG网络,组建了一个由3×3卷积、1×1卷积分支和identity的残差分支结合的结构。同时该网络中采用了结构重参数化方式,将训练阶段和推理阶段分割开。训练阶段的模型可以更好地提取特征,更方便优化,得到更好的训练结果,获取更多的特征信息。在训练阶段选用组合的残差结构以提高检测精度,同时在推理阶段转化为类VGG的架构,极大地提高了推理速度,方便模型部署和加速。
类VGG式的结构有诸多优势。首先在GPU中3×3的卷积结构相较于1×1卷积甚至是5×5卷积而言计算密度更大,因此使用3×3的卷积结构在GPU运行上速度更快。其次,VGG结构采用单路架构,具有较高的并行度更加节省内存。
因此,RepVGG网络采用结构重参数化的方式后,具有以下几个优点:
(1)采用结构重参数化的方式,可将分支结构转变为简单的3×3卷积、ReLU堆叠的方式,提高模型的推理速度,方便模型高效部署。
(2)推理后的模型为单路结构,速度快且并行度高,节省内存。同时单路结构灵活性更好,方便模型剪枝。
为满足检测模型实时性和精度的需求,本文使用RepVGG作为骨干网络用于特征提取。在训练阶段中引入1×1卷积分支,形成不对称卷积结构,提高模型的特征分辨能力,获取更多特征信息;采用identity的残差结构使模型更易收敛,避免出现梯度消失问题。而推理阶段的模型更方便部署,大幅减少计算量,提高检测速度。RepVGG结构在训练阶段和推理阶段的模型结构,如图3所示。
图3 RepVGG网络在训练和推理时的结构图Fig.3 Structure diagram of RepVGG network in training and inference
本文采用的RepVGG网络为RepVGG-A0结构,该网络结构在RepVGG网络系列中是最轻量的网络,同时RepVGG-A0不仅具有更少的参数量,拥有更快的推理速度,在获取特征信息方面也有较好的性能。因此本文考虑到可回收垃圾检测任务需要部署于工业应用,采用RepVGG-A0作为骨干网络。
整个RepVGG网络共分为5个Stage,本文未改变原始SSD算法的输出特征图大小,将RepVGG作为骨干网络时输出的特征图为38×38、19×19、10×10,分别由Stage2、Stage3和Stage4生成。其中Stage3设置层数为14,可获取更多信息。RepVGG的网络结构设置如表1所示。
表1 RepVGG网络结构Table 1 RepVGG network structure
结构重参数化这一思想是指在训练阶段和推理阶段采用不同的网络结构和模型参数,将训练阶段产生的模型通过结构和参数变化得到推理模型。推理阶段的模型所表达的模型功能在数学推理上是等价的,因此采用该方法可以大幅降低参数量,方便模型高效部署。
Ding于ICCV2019中提出的ACNet[17]和ICCV2021中提出的RepVGG网络将结构重参数化这一思想贯彻到底。为提高模型的推理速度,在结构重参数化思想中主要采用数学推导的方式,并经过实验验证了该思想的有效性,而本文主要采用了其中的Conv-BN合并、分支合并的思路,以下将对这两个思路进行分析,从而验证该方法。
2.2.1 Conv-BN合并
在神经网络中,BN(batch normalization)层的加入,可以快速收敛加速网络,有效解决梯度消失和梯度爆炸问题。虽然BN结构有诸多优势,但是BN层在网络前向推理是会占用更多的内存和显存,影响模型性能。为减少模型在前向推理时的耗时,本文采用Conv层和BN层融合的方式。公式推导如下所示:
卷积层计算的公式,如公式(1)所示,其中ω为权重,b为偏置:
BN层的计算如公式(2)所示,其中γ和β是学习参数,u是样本均值,σ是方差,ε表示一个很小的数(防止分母为0):
将公式(1)代入公式(2)中,卷积和BN合并得到公式(3):
将公式(3)拆分后即可得到公式(4),如下所示:
根据卷积的齐次性,合并BN层的过程是线性运算,该过程相当于对卷积核进行修改,而卷积仍不变。因此根据推理得知,采用卷积层和BN层合并可以提升模型前向推理的速度。
2.2.2 分支合并
在RepVGG结构中有1×1卷积核identity两种分支结构。对1×1卷积而言可以将1×1卷积padding为3×3卷积,在该3×3卷积中,除了卷积核中心位置,其他位置都为0,即将卷积核移动至3×3卷积核中心。而对identity而言可利用权重等于1的卷积核,将identity结构构造为一个1×1的卷积,同时该卷积的权重值为1。通过设置一个3×3的卷积核,对输入特征映射相乘后,identity前后值不变。此时1×1卷积和identity均可转变为3×3卷积,而根据卷积的加法特性,卷积核在形状一致的情况下,可以满足可加性。因此三个卷积分支可以融合,具体过程如图4所示。
图4 分支合并过程Fig.4 Branch merge process
在CVPR2019中Li等人[18]提出selective kernel networks(SKNet),该网络是对squeeze-and-excitation networks(SENet)[19]提出的改进网络。SKNet可以根据不同的图像得到具有不同重要性信息的卷积核,相较于Inception[20]结构而言,SKNet更具灵活性。Inception结构的参数是固定的,而SKNet可以根据卷积核的权重值,针对不同尺度的图像自适应生成卷积参数。图5是本文采用的数据集样本分布图,可见该数据样本尺度存在不均衡的情况。因此引入SK模块以适应本文图像尺度变化大的问题。
图5 样本分布图Fig.5 Sample distribution
SK模块主要由Split、Fuse和Select三部分组成,图6展示了SK模块的结构。其中,Split部分是对输入向量进行不同卷积核大小的卷积操作的过程,该部分可根据输入的特征图自适应产生多个分支结构。Fuse部分对特征进行融合,根据聚合多个分支的信息以计算每个卷积核的权重。Select部分是根据不同卷积核的权重信息计算后得到新的特征图的过程。研究发现,SK模块可以自适应地调整结构,以获取不同感受野信息。
图6 SK模块图Fig.6 SK module structure diagram
原始SSD算法采用普通卷积结构、空洞卷积、池化操作和ReLU相结合的思路。该结构采用了大量的池化操作,该方式会丢失大量的信息,同时普通卷积相较于本文的RepVGG式结构而言,有诸多弊端,因此为进一步降低模型参数量,本文延续RepVGG中结构重参数化的思路,采用3×3卷积、1×1卷积分支和ReLU相结合的方式,结构Block如图7所示。
图7 Block结构Fig.7 Block structure
将SSD辅助卷积层结构重置,改用Block结构,减小了卷积层数,同时采用步长为2的方式改变输出特征图的大小。
改进后的SSD的辅助卷积结构如表2所示,其中输出大小为5×5、3×3和1×1的特征图作为检测层。最后同样采用结构重参数化法在推理阶段将Block的残差结构转化为普通卷积结构,极大地提高了模型的推理速度。
表2 RepVGG网络结构Table 2 RepVGG network structure
本文所采用的数据集主要来源于Kaggle网站中的Waste Classification data数据集(https://www.kaggle.com/techsash/wasteclassification-data),由于该数据集分为有机废物和可回收废物两类,并未对可回收垃圾的类别分类,因此本文选取了部分Waste Classification data数据,并通过网络爬虫、相机拍摄的方式,获得1 650张数据,部分样本如图8所示。数据共分为三类:纸板(cardboard)、玻璃(glass)、塑料(plastic)。采用LabeLImg软件对数据集进行人工标注,数据集为PASCAL_VOC格式。将原始数据集划分70%作为训练数据,20%作为测试数据,10%作为验证集。后采用数据扩充的方式,经过随机旋转30°、270°、330°,将原始数据集扩充3倍后,得到新数据集共4 950张数据。
图8 部分数据集内容Fig.8 Partial dataset content
实验在CPU E5 2450 2.10 GHz,16 GB内存,Ubuntu 16.04系统下搭建的Pytorch环境下进行,显卡为GeForce GTX1080Ti。
为验证本文改进的SSD算法在可回收垃圾检测任务上的有效性,本文设计了4组实验。第一组实验是验证RepVGG作为骨干网络时的性能,对比了原始SSD算法与RepVGG-SSD算法;第二组实验是验证本文所提出的SSD辅助卷积层结构,对比了普通卷积结构、Mobile-Netv2中的深度可分离结构以及本文所采用的RepVGG式的Block结构;第三组实验是为了验证结构重参数化的效果,对比了使用结构重参数化时和未使用时的效果;第四组实验是加入SK模块后,与目前主流的网络在可回收垃圾检测任务上的性能进行比较,以验证本文所提出的网络的优势。
训练时输入图像设置为300×300,采用SGD作为优化函数对模型进行训练。初始学习率为1E-4,学习率在60 000时降低为1E-5,至90 000停止训练,本实验采用与原始SSD相同的图像增强方法。
本文采用的评判标准有:mAP(mean average precision)、每秒传输帧数(frames per second,FPS)、浮点运算数量(giga floating-point operations per second,GFLOPs)、乘加运算次数(MAdds)、参数量(parameters,Params)、内存占有量(Memory)、读入和写入时的内存量(MemR+W)。其中Memory反应运行时占用的内存量,GFLOPs用来衡量模型或算法的复杂度,Params表示模型的大小。通常GFLOPs和Params越小,代表模型所需要的算力越小,对硬件的性能要求越低,越容易搭建于低端设备中。
实验一比较了以VGG16和RepVGG作为SSD的骨干网络时的效果,如表3所示。验证发现采用RepVGG作为骨干网络时精度提升1.7个百分点,同时GFLOPs大幅降低,提高了检测速度。
表3 RepVGG性能比较Table 3 Performance comparison of RepVGG
为进一步减小模型的计算量,本文更换了SSD的辅助卷积层。实验二对比了更换为深度可分离结构的卷积层和RepVGG结构时的卷积层,效果如表4所示。采用RepVGG结构时相较于深度可分离结构提升了1.63个百分点,相较于原始SSD结构精度提升了0.93个百分点。同时,采用该结构时的浮点数最小为5.82,参数量虽然相较于深度可分离结构有小幅提升,但是在精度方面展现的效果更好。
表4 SSD辅助卷积层比较Table 4 Comparison of SSD auxiliary convolution layer
由于可回收垃圾检测通常应用于工业中,为满足轻量化的要求,方便日后的模型部署于移动端和嵌入式端,本文采用BN层和卷积层融合,分支结构合并的思路,减小模型前向推理的时间,提高检测速度。主要通过结构重参数化的方式,为验证该方式的有效性,本文设计了实验三。表5对使用结构重参数化和未使用时进行了比较。由实验可见,内存占有量降低了43.65×106,读入写入时的内存也下降了近一半。因此该方式可大幅减小参数量和计算量,加快模型推理。
表5 结构重参数化性能比较Table 5 Comparison of performance of structural re-parameterization
本文加入了SK模块,用于自适应调整感受野尺寸,所提出的网络为RepVGG-SK-SSD。为进一步验证所提算法的有效性,本文比对了VGG16-SSD、MobileNet-YOLOv3、CBAM+SSD、YOLOv3、MobilNet-SSDLite、RepVGG-SSD、RFBNet[21]等网络结构的性能,如表6所示。由实验可得,本文所提算法在可回收垃圾检测任务上可达到95.23%的精度。相较于原始SSD算法,共提升了4.33个百分点。同时,该算法的参数量和计算量较小,浮点数只有5.16,参数量也只有10.33×106。相较于原始SSD的浮点数为60.29以及22.94×106的参数量而言,本文所提算法做出了更大的改进,且拥有更好的性能。虽然MobileNet-YOLOv3的精度相对本文所提算法高了0.47个百分点,但是其浮点数以及参数量远大于本文算法。同时验证该算法在单个GTX1080TI显卡下可达64 FPS,可满足在移动端和嵌入式端部署的需求。
表6 不同算法测试结果对比Table 6 Comparison of detection results of different algorithms
本文将RepVGG网络与SK模块融合,选用新的辅助卷积层,实验也验证了该算法的有效性,图9展示了本文所提算法的检测效果。
图9 检测效果图Fig.9 Inspection effect picture
本文提出了一个实时高效的基于SSD算法的可回收垃圾检测器。针对VGG16模型过大、运行内存量过高,无法用于工业部署问题。提出采用轻量化的网络RepVGG作为骨干网络,使用结构重参数化的方式减少参数量和计算量,提高模型的推理速度,实现实时检测。同时为进一步减少参数量,提高模型的检测速度,修改了SSD的辅助卷积层。针对图像尺度变化大的问题,提出采用SK模块,自适应调节感受野尺寸,提高检测精度。实验表明,本模型具有良好的检测精度和实时性,可以更好地应用于可回收垃圾检测任务。