基于改进SSD的食物浪费行为识别方法
2023-09-13杨永闯王新良
杨永闯,王 昊,王新良
(河南理工大学 物理与电子信息学院,河南 焦作 454003)
0 引 言
传统上,对于食物浪费的评估[1-4]往往需要依靠人工采集。Martins等[5]利用目测和称重两种人工采集方式在学生食堂对学生浪费情况进行了评估,并对两种采集方式在准确度上进行了比较。虽然传统的人工采集方式结果比较直观,但采集周期长,且人工效率低。因此,利用技术手段削减和抑制餐桌上的浪费迫在眉睫。
随着机器学习的发展,人们逐渐开始采用机器视觉技术对食物浪费进行评估。Ciocca等[6]利用霍夫变换和K-NN方法提出了一种基于机器视觉的饮食自动检测系统来评估食物的浪费,一定程度上解决了人工采集的弊端。在传统机器视觉中需要手动组合特征提取方法,消耗了大量时间。深度学习解决了端到端的问题,算法能从每个特定类别的对象中自主学习特征。深度学习中目标检测算法按照阶段数可分为以R-CNN系列(R-CNN[7]、Faste R-CNN[8]、Faster R-CNN[9])为代表的双阶段目标检测算法和以YOLO[10]、SSD[11](single shot multi-box detector)为代表的单阶段目标检测算法。双阶段目标检测算法通过选择性搜索方法(selective search)可以对候选区域(region propo-sal)进行初次筛选。多次的筛选使得双阶段检测算法有较高的准确率,但候选区域生成慢、检测时间长、难以满足实时性的要求。单阶段目标检测算法采用回归的方法,简化了目标提取过程,具有检测速度快、训练阶段少的特点。随着不断改进,其检测精度也能媲美双阶段检测算法。
在食品检测方面,深度学习逐渐被广泛应用。代爱妮等[12,13]提出了一种基于BP神经网络的粮食的干燥程度检测算法;李衡霞等[14]研究了一种基于Faster-rnn的粮食害虫检测方法;Harsh Agarwal等[15]研究了一种基于YOLOv3的浪费食物检测方法,能够动态评估浪费情况。
本文利用SSD算法在多尺度目标检测上的优势,针对浪费行为人工检测效率复杂低下,且目标相互遮挡容易漏检的问题。以SSD算法的网络结构为基础,通过对主干特征提取网络进行替换,提升骨干网络对图片的特征提取能力;对多尺度识别的网络结构采用高层与低层相结合的BiFPN实现特征融合,提高不同特征的特征表达能力;在SSD算法的结构基础上添加SE模块,对位置特征信息的重要性进行筛选。最终实现对食品浪费行为的检测。
1 SSD算法模型
SSD是一种单阶段、多预测层、特征多尺度的目标检测算法。SSD的网络结构可以分为两部分,首先是采用VGG16结构,提取目标的多尺度特征信息。其次,通过利用辅助卷积层构建深层次目标输出层。图1是SSD的网络结构。
图1 SSD网络结构
如图SSD通过构建的全卷积网络结构能支持不同大小的图片输入。通过添加额外的卷积层构建的多尺度检测层来获取图片38*38、19*19、10*10、5*5、3*3、1*1这6种不同尺度的特征信息,形成多尺度无融合的特征提取网络结构。并在不同特征信息上设置先验框(PrioBox)与标签真实框(GT)相匹配,筛选正负样本,计算回归和分类损失,预测目标的位置和类别信息。
2 改进的SSD算法模型
针对食物浪费行为数据集中由于不同拍摄角度导致的图片中目标会有明显大小尺度变化的问题。对SSD进行改进:将VGG16特征提取层替换为Resnet网络结构,并通过更换激活函数,添加归一化加快收敛速度,提取浪费行为中多目标的特征提取能力;构建BiFPN特征融合结构,提升对遮挡和尺寸较小的目标的提取能力;引入SE模块,对浪费行为的多目标特征位置进行强调,抑制背景和其它目标的干扰信息。
2.1 更换特征提取网络
SSD网络使用VGG16特征提取层,利用其中的conv4作为第一个低层次输出,并采用最大池化进行下采样,降低特征图尺寸。不同层次的特征输出对应不同的目标大小,低层次特征图更适应小尺寸。在食物浪费行为数据集上由于拍摄角度的不同,数据集中存在小尺寸、重叠、遮挡的餐具目标。而低层次特征图卷积层数少,检测小尺寸时存在特征提取不补充的问题;同时最大池化在进行下采样时,提取目标特征图中最显著的特征,丢失了不显著的遮挡目标的特征信息。综上原因导致了SSD算法对小尺寸和遮挡目标不能做出准确预测,造成检测目标丢失。
经过分析可知,现有的特征提取网络特征提取能力差,对重叠、小尺度的餐具识别不健壮。因此,为了提升模型的泛化能力,可以通过提高网络的深度,构建一个深层次的骨干特征提取网络。但随着网络层数的加深,容易出现过拟合的现象,这是因为在网络加深后,深层网络进行训练过程中loss进行梯度反向传播时不断变小直至消失,出现了梯度消失的现象,梯度消失使得非线性的网络线性化,阻碍网络收敛,降低了精度。
残差网络中的残差结构能增强网络的特征解决梯度消失的问题,如图2(a)所示。
图2 残差块
如图在残差网络中,当输入特征为H(x) 时,输出特征为x,经过卷积的特征为f(x), 输出特征为计算如式(1)
H(x)=f(x)+x
(1)
使用的残差网络如图2(b)所示,在原有基础上将Relu激活函数替换为Leaky_relu激活函数。在网络训练过程中当输入特征小于等于零时,Relu激活函数将输出特征以零输出,导致了对应权重不能进行更新。而Leaky_relu函数在相同情况下,存在非零输出的泄露量,能对权重更新学习。添加BN的效果是对特征图进行归一化处理,能加快网络的收敛速度。
2.2 构建特征融合结构
在食品浪费行为数据集中,由于拍摄角度的不确定性和餐具摆放的不确定性,遮挡、重叠问题突出,网络需要依靠更多的边缘目标信息。原始的SSD网络是多尺度检测,尺度之间无融合的结构,网络结构如图3(a)所示。为了利用不同尺度的特征信息,对原SSD网络机构进行尺度之间的特征融合。
图3 特征融合结构
随着网络层数不断加深,特征的信息也从低级的细节信息逐渐向高维的语义信息发展。在特征提取过程中,每一层的特征仅由上一阶段的特征卷积得出,因此每层网络都会在原有的基础上丧失一定的特征信息,为了丰富每一层的特征信息,可以建立不同尺度特征层之间的联系,使网络识别目标更加准确。构造特征金字塔[16](feature pyramid networks,FPN)能通过对不同特征层的提取的特征进行融合,以达到增强各层间联系的目的,具体方式是通过对特征提取网络中不同层次的特征进行通道数改变并经过上下采样,进行从低维到高维的多特征之间的相互融合达到融合细节和语义信息的目的。特征金字塔构如图3(b)所示。
FPN的提出证明了特征融合在目标检测中有效性,但是其结构简单,关注的是相邻特征层之间的特征关系。BiFPN是采用残差跳层和PANet[17]的思想构造的一种具有双向融合和残差边的特征融合金字塔。其结构图如图3(c)所示。首先对主干特征提取网络中不同大小的特征层经过卷积统一通道数,在同一层的特征提取网络中增加一条残差通道,一定程度上解决因多次卷积后导致的特征信息丢失的情况。
2.3 Senet通道注意力模块
在食品浪费行为数据集存在互相遮挡的目标中,对目标的边界进行区分,能更好地对每一个目标进行识别。这就需要网络在特征提取过程中更加关注边界位置,区分背景与目标、目标与目标之间的差异。SE模块[18]根据在卷积过程中每个通道在目标检测时重要性不同,对每个通道进行动态的调节,能对图像中需要关注的位置进行注意力增强,提高识别的准确率。
SE的作用机制是通过反向传播不断调整每个通道数的权重,对每个通道进行动态的调节。通过对每个通道权重的调整,强化关键信息的重要性,抑制无用信息的干扰。是一种即插即用的模块,在不影响原有网络模型的情况下,增强卷积过程中通道的重要性,主要通过压缩(Squeeze)、激励(Excitation)、回溯(Scale)这3部分,其工作原理的如图4所示。
图4 通道注意力
其中U∈F(C*H*W), 是需要给予通道注意力的原始特征图,x~∈F(C*H*W)是经过通道权重调整后的注意力特征图。其主要过程是:将传入的原始特征图U经过全局平局池化(global average pooling)在空间方向对特征图进行压缩(Squeeze)生成一个U~∈F(C*1*1)的特征图。作用是沿空间方向的特征生成一个平均值,使得F(1*1)具有F(H*W)的感受野。其计算公式如式(2)所示
U~=FSqueeze(U)=1H*W∑Hi=1∑Wj=1u(i,j)
(2)
其中,H,W为特征图的宽和高,u(i,j) 为空间方向特征图中的特征点。
对U~进行激励(Excitation)操作,由两个全连接层(full connected layers,FC)以及sigmoid激活函数生成一个固定在[0,1]的通道注意力权重,其中,使用c/r(r为减少率)的全连接层对通道数进行降维,并用ReLU激活函数对权重参数进行非线性变换,增强通道的表达能力。使用c的全连接层还原通道维度,便于将权重回溯到原始特征图中得到具有注意力权重的X∈F(C*1*1), 其计算如式(3)所示
X=Fexcitation(U~,W)=σ(W2(R(W1(U~))))=
σ(W2(X1))=σ(X2)∈FC*1*1
(3)
其中,W1∈LinearCr×C,W2∈LinearC×Cr,r为降维系数,σ为hard_sigmoid激活函数,R为ReLU激活函数,X1∈FCr*1*1、X2∈FC*1*1为经过全连接层后的特征向量。
将所得的通道注意力权重通过扩充(scale)操作,将权重沿通道方向加权到原特征图中,完成对在通道维度上对原特征图的重新标定。其计算如式(4)所示
x~=FScale(U,X)=U×X
(4)
2.4 改进的SSD网络结构
将SSD的基础特征提取网络VGG16替换成Resnet50,并将原始SSD特征网络VGG16中全连接层FC6,FC7用Resnet残差结构替换。保持SSD中主干提取网络,多尺度检测网络的网络结构,并在此基础上添加增加多尺度融合层BiFPN。原SSD中网络结构是伴随着卷积过程逐渐递进的,层与层之间只存在递进关系,图片的有效信息不可避免地伴随着卷积过程逐渐丧失,为了增加层间之间的联系,提出了一种增加特征融合的检测层,并依据SE通道注意力机制提取重要通道的信息,其改进后的结构如图5所示。
图5 融合后的SSD网络架构
如图5所示,为了方便特征提取过程中的上下采样,将输入图片的尺寸改为320*320,网络的检测层输入的特征图尺寸变为 [40,20,10,5,3,1]。 将原卷积层中FC7特征更换为ResE_block特征层,并作为第二个特征融合输入层,其输入尺寸为20*20。将第三个将ResE_block作为第三个特征输入层,其输入尺寸为10*10。将SSD中原本存在的3个特征层作为附加特征提取层进行保留,并选取输入尺寸为5*5,3*3作为特征融合输入层。采用BiFPN特征融合网络将得到的特征输入层采用自上而下(up-bottom)和自下而上(bottom-up)两个双向融合。首先将输入的特征图采用卷积核为1的卷积调整通道数,将输入层中的特征图统一到一个相同大小的通道数,减少在up-bottom和bottom-up过程中的参数量。其次,BiFPN相比较其它的特征金字塔的不同在于将原始特征进行特征复用。
在特征输入层中,将输入尺寸为40*40的特征图经过两次卷积分为成为下采样的输入特征和中间下采样的输入特征,经过一条残差边作为上采样输入特征。在输入尺寸为20*20的特征图中一方面将特征图经过1*1卷积调整通道数与40*40的特征图相加,丰富层间特征信息,形成加强层间联系的层间融合层(layers fusion,LF),另一方面与40*40特征图一样进行卷积得到下采样和同层残差输入。输入尺寸为10*10,5*5的特征图同样进行上述操作,得到了具有不同卷积层的特征。将输入尺寸为3*3的特征图融合了4个卷积层的LF层作为up-bottom的最终融合层,并作为bottom-up过程的起始特征层。Mid下采样过程如同up-bottom一样,作为up-bottom的补充特征层,为up-bottom过程中补充下采样过程中的遗失的重要特征信息。特征尺寸为3*3的特征图作为bottom-up的起始层,融合Mid下采样过程中的特征信息,成为bottom-up过程所需的最终检测层输入层。检测输入层融合了深层卷积的语义特征以及不同层次的浅层卷积的边缘信息和残差边的同层次信息,进一步加强了特征图包含的特征信息量。随后将检测输入层在通道注意力模块下调整通道注意力权重,剔除掉无效特征信息,抑制不重要的特征信息,最终得到一个具有通道注意力的检测输入层。
2.5 默认框尺寸
SSD中使用的默认锚框尺寸是依据Pascal Voc数据集的目标尺寸预先设定,不能很好适应不同数据集中目标尺寸的变化。采用K-means聚类方法对自制数据集进行默认锚框聚类得到适合的锚框尺寸。K-means聚类方法,通过给定聚类中心点的数量K,将数据集中的GT(ground truth)通过给定K划分为K个簇,使得给定的聚类中心点即确定的anchor boxes能够跟给定的GT有更大的交并比(intersection over union,IOU),更小的位置距离。
Anchor boxes的个数是通过对数据集聚类得到,anchor boxes的数量越多,预测框与真实框越贴近,但数量过多会增加过多的参数导致速度变慢,同时还存在预测框重叠、密集的问题。因此在检测精度和速度上做出平衡,选择一个聚类中心点K就显得尤为重要。在YOLOV3中,聚类分析有一个度量指标Avg IOU(平均重叠度),其计算如式(5)所示
F=argmax∑ki=1∑nkj=1Iiou(B,C)n
(5)
式中:n表示样本的总量,k表示种类数,nk表示以k为中心点的样本数,Iiou(B,C) 表示默认框与真实框的交并比。选取k为1至9,分别对样本进行聚类,分析k选值不同对Avg IOU的关系。
根据图6可知随着k的增长,默认框和真实框的平均重叠度随之增长,但随着k点达到7时的Avg IOU取值逐渐趋于平缓,在到达重叠率达到80时Avg IOU的趋势已经趋于平缓。选取7个点坐标通过k-means构建坐标质点,聚类的结果如图7所示。
图6 锚框聚类和平均重叠率
图7 K-means聚类结果
如图自制数据集尺寸都集中在(50~250)部分,对SSD锚框尺寸更改都集中在大尺寸默认框,以适应在中大目标上的IOU占比率最大的特点,把SSD的锚框尺寸改为 [30,60,111,168,211,282,315]。
3 实验结果及分析
3.1 实验数据
3.2 训练环境及评价指标
实验采用ubuntu18.04系统,tensorflow/keras深度学习框架,硬件配置为Intel(R)Xeon(R)CPU E5-2680 v4 @ 2.40 GHz处理器,10 G运行内存,NVIDIA GeForce GTX 3080显卡。
实验训练使用具有通道注意力的Resnet残差网络,将图像输入尺度设置为320×320。模型训练Batch size设为16,初始学习率lr共分为两个阶段,第一阶段是网络预热阶段此时学习策略为冻结网络的特征提取层,训练网络检测层,学习率设为5e-5,采用学习率衰减策略,lr的衰减因子gamma为0.0005,策略为lr=lr×gamma,当训练过程中经历3个epoch对数据集的损失没有进步,利用学习率衰减策略对lr进行衰减策略生成新的学习率;第二阶段是网络解冻阶段,解冻网络的特征提取层进行参数更新,学习率设为0.0001,采用相同的学习率策略,当训练过程中经历10个epoch没有进步,即利用学习率衰减策略生成新的lr对参数进行更新。模型优化算法为自适应矩估计(Adam)。模型损失收敛曲线如图8所示。模型在训练80个epoch之前,损失呈现逐步下降的趋势,在80个epoch之后尽管存在波动,但损失趋于平缓,在达到100个epoch时已经达到收敛的效果,无较大波动。
图8 模型训练损失曲线
在深度学习中,虽然应用场景具有复杂性,但评价指标根据要求可以分为目标检测精度(AP)、检测检测目标的速度(FPS)、定位的准确度等。在实际应用中往往侧重于检测的精度和速度。
目标检测的精度AP(average precision)代表着对某一类目标检测的准确度指标,是同时衡量精度(Precision)和召回率(Recall)的指标。具体的计算方式是通过积分P-R曲线的面积,计算方法如式(6)。预测种类大于一类时采用mAP(mean average precision)多类别的平均准确率其中,TP(true positive)代表分类器检测正样本且结果正确,FP(false positive)代表分类器检测负样本但结果不正确,FN(false negative)代表分类器检测负样本但结果正确。改进后的SSD算法检测后的P-R曲线如图9所示。
图9 各种类P-R曲线
P=TPTP+FPR=TPTP+FN
AP=∫10PdRmAP=APN
(6)
3.3 实验结果
为了验证本文方法在现实生活中采集的食物浪费行为数据集的有效性,将本文改进后的SSD算法与深度学习中单阶段网络中较优的YOLOv4,YOLOV4-tiny和双阶段网络Faster-rcnn相比较。网络模型在不同类别下的目标检测精度上的比较结果见表1。
表1 算法比较
从检测精度的比较的结果来看,相较于原SSD网络,本文提出的模型对于每种类别的检测精度相比有所提高。其中,碗空提升了6.91%,碗剩余提升了0.24%,盘空提升了12.33%,盘剩余提升了0.92%。得益于Resnet网络具有深层次特征提取网络和残差边对特征信息进行补充,避免了VGG16对于卷积过程中由于卷积层数过多,容易出现梯度消失和梯度爆炸的情况。其次,利用BiFPN的多次融合高层特征图的语义信息和低层特征图的边缘信息来提高类别的辨识度,最后,利用通道注意力网络增强通道信息重要性,增强了特征信息。在检测速度上,YOLOV4-tiny得益于对网络结构在轻量化上的优化,其检测速度最快,但在精度上做出了牺牲,精度最低。从以上实验结果可以看出,本文在SSD上的改进牺牲了一部分的检测速度,但仍在实时性的条件下,对模型在精度上得到了提升。从而验证了改进的合理性和有效性。
为了对改进的模型有直观的分析,随机选取3幅有不同的拍摄角度a,c,e测试图像,将其在原SSD算法和改进后的SSD算法上进行预测,并对比其结果,得出的检测结果的对比如图10所示。
图10 传统SSD算法与本文算法各尺寸检测
由图中原始图10(a)与原SSD的检测效果图10(b)和改进后的SSD检测效果图10(c)之间的效果对比可以看出图a存在部分遮挡的情况,原算法中由于卷积层间没有联系,层与层之间相互独立,不同尺寸的检测层之间没有联系容易出现相邻目标之间存在重复标注的情况,影响了识别的效果;对于图c所示的物体之间存在高度重合,且互相遮挡的情况,原SSD算法只能对视野较近且边缘清晰的目标进行识别,对于重叠严重且物体较小的部分漏检较多,并且检测效果不理想,置信度低;对于图e所示边缘清晰,且没有相互遮挡的目标,在算法改进前后都有较好检测效果,但改进后的算法对清晰的物体识别准确度更高。实验结果表明改进后的算法更适应多餐具中出现的遮挡现象,在一定程度上解决了在浪费行为数据集中由于拍摄角度的变化出现的餐具之间相互遮挡导致的目标漏检和检测精度低的问题。
4 结束语
针对浪费行为数据集中存在的目标相互遮挡造成的识别不准确以及精度低的情况。为了进一步提高图片中多目标遮挡的检测效果,通过在原SSD算法的基础上提出了更换特征提取网络Resnet以增强特征提取能力、引入FPN算法BiFPN对高层语义和底层特征进行特征融合,进一步增强层间特征联系;利用通道注意力模块增强每层特征图中通道信息,最终提高餐具的识别准确性;利用Avg IOU和K-means算法结合的方式对SSD中的默认框进行修改。最后,将该模型与主流的目标检测网络相印证,实验结果表明该模型在测试集上的mAP得分为88.49%,相比于原网络模型提升了5.09%,改进后的SSD算法模型能够更好适应浪费行为数据集中单图片多目标相互遮挡的情况。