刘敬宇 裴悦琨 常志远 柴 智 曹佩佩
(1.大连大学辽宁省北斗高精度位置服务技术工程实验室,辽宁 大连 116622;2.大连大学大连市环境感知与智能控制重点实验室,辽宁 大连 116622)
果品分级一直是果蔬产品销售中的一个重要环节,并且随着电商行业的日渐壮大,果品能够在全球实现流通销售。如果想要占有较大的市场份额,实现工业化果品分级尤为重要[1]。利用图像视觉和神经网络算法对水果进行缺陷及分级检测是目前的研究热点,国内外许多学者对此进行了大量工作[2-10]。但是,在樱桃分级的实际应用中,由于环境复杂、缺陷不明显、正负样本不均衡等因素极易影响检测效率和精度。因此,如何提高樱桃分级的检测精度和检测速度是应用的关键。
研究拟通过改进多特征融合模块[11]和损失函数[12],提出一种基于改进YOLOX[13]的樱桃缺陷检测方法。结合注意力机制CBAM[14],用于加强关键特征信息的学习,提高对樱桃大小和成熟度分级的精度,并与现有的樱桃分级算法进行对比,验证试验算法在樱桃分级检测中的可行性,旨在为后期实现自动化樱桃缺陷及分级检测提供理论基础和技术支持。
公开的樱桃数据集缺少不同缺陷、大小和颜色的樱桃图像,仅仅依靠公开数据集难以获取合适的数据。为了解决这个问题,在辽宁省大连市金州区当地樱桃果园进行采集,并通过实验室设备进行拍摄和标注完成数据集。
将采集到的樱桃放置于实验室滚轮上,转动滚轮将样本各个角度进行拍摄,每张图片中有1~10个樱桃,图像分辨率为 2 046像素×1 080 像素,图像均为 JPG 格式。共采集10 000张图片,其中,缺陷果可以分为鼻尖裂口、裂口、病变、刺激生长、腐烂、干疤、畸形、霉变、双生9类[15](见图1),完好果根据其成熟度和樱桃颜色分为大果成熟、大果半熟、中果成熟、中果半熟、小果成熟、小果半熟6类(见图2)。使用LabelImg 软件对图像进行标注,并将标注信息PASCAL VOC的格式保存为XML文件。
依次为鼻尖裂口、裂口、病变、刺激生长、腐烂、干疤、畸形、霉变、双生、完好
依次为大果成熟、大果半熟、中果成熟、中果半熟、小果成熟、小果半熟
实验室硬件设备主要由图像采集设备和计算机处理单元两部分组成(见图3)。其中图像采集设备主要是由工业摄像机CMOS 摄像机(acA2000-50g型)、镜头(M1614-MP29(CH)3 型)、频闪控制器组成的红外触发器,通过频闪控制器和红外触发器触发相机拍照,以及LED光源漫光片和梯台型光源罩,保障照片质量。
1.电脑 2.同步光源控制器 3.激光接近传感器 4.滚轮 5.传送齿轮 6.相机 7.遮光罩 8.光源
计算机处理单元主要是GeForce GTX 3080 显卡,运行内存为16 G并配置POE千兆网卡;Inter(R)Core(TM)i9-10900K 处理器,32 G 内存,频率 DDR43000。
樱桃缺陷及分级检测主要根据樱桃是否有缺陷、果体大小和成熟度3个标准。在实际需求中,首先需要对缺陷樱桃进行剔除,保留完好的樱桃,然后对完好樱桃进行分级。所以对于樱桃缺陷及分级检测系统来说,主要由两部分组成,第1部分进行樱桃缺陷检测,第2部分根据樱桃的大小和颜色对樱桃进行分级。系统流程图如图4 所示。
图4 系统流程图
试验提出一种基于改进YOLOX的樱桃缺陷及分级检测算法,以实现对樱桃的实时分级。YOLOX网络主要分为3个部分:CSPDarknet、FPN[16]以及Yolo Head,结构图如图5所示。
图5 YOLOX结构图
2.2.1 特征提取网络 特征提取网络是目标检测中的骨干网络,决定了检测模型的速度和准确性,通过主干特征提取网络会生成3个有效特征层。YOLOX的主干特征提取网络为CSPDarknet,每输入一张樱桃图片会先对其进行resize,将其大小变为640×640,然后通过Focus网络结构对其进行特征提取,之后使用卷积标准化和激活函数对其通道数进行调整,然后通过4次Resblock body结构进行特征提取。Resblock body结构首先会利用一个3×3的卷积进行高和宽的压缩,并调整其通道数,然后使用CSPLayer结构进行特征提取。在第4个Resblock body结构中加入了SPP结构,该结构使用不同池化核的最大池化进行特征提取,将池化后的结果堆叠,再利用卷积来调整通道数。
2.2.2 FPN FPN算法主要是为了解决物体在检测过程中的多尺度问题,通过简单的网络连接改变,大幅度提升了小物体检测的性能。由于低层的特征语义信息比较少,但是目标位置准确,高层的特征语义信息比较丰富,但是目标位置较模糊,所以将顶层特征通过上采样和低层特征进行融合,而且每层都是独立预测的[17]。
2.2.3 Yolo Head 在YOLOX算法中,Yolo Head被分为两部分,最后预测时才整合在一起,Yolo Head结构如图6所示。获得的Cls.是用来判断每一个特征点所包含的物体种类,Reg.用于判断每一个特征点的回归参数,回归参数调整后可以获得预测框,Obj.用于判断每一个特征点是否包含物体。
图6 Yolo Head结构图
在樱桃缺陷检测中,首先需要将缺陷樱桃剔除。对于樱桃的缺陷种类来说,一般可以分为两类,第1类缺陷果可以分为鼻尖裂口、裂口、病变、刺激生长、干疤、畸形、双生,这类缺陷果可以作为次品果进行降价销售;第2类缺陷果包括腐烂和霉变,这类缺陷果需要及时与其他樱桃分开,避免造成更大的损失[15]。
3.1.1 樱桃缺陷检测算法改进
(1)使用融合因子配置FPN:对于缺陷不明显的樱桃检测的难点主要是目标自身尺度小,信息量少,细节特征不够多。FPN作为多尺度检测的手段,适合处理小目标检测的算法[18],影响小目标检测的FPN性能有两个主要因素:下采样因子和相邻特征层之间的耦合度。对于下采样因子,下采样比率越低,特征图越大,越适合小目标检测,但是计算较为复杂。
FPN特征融合方式如图7所示,可以用式(1)表示:
图7 FPN结构图
(1)
式中:
finner——通道匹配的 1×1 卷积运算;
fupsample——分辨率匹配的2×上采样运算;
flayer——特征处理的3×3卷积运算;
α——融合因子。
P5=flayer5[finner5(C5)],
(2)
(3)
(4)
(5)
经过一系列试验发现,通过调整融合因子可以对弱小目标检测的性能产生影响,由于默认α为1,通过调整α的值,对试验结果平均检测精度的值产生影响。由图8可知,当α为0.5时,试验结果得到了明显提升。
图8 融合因子变化对试验结果的影响
(2)Focal Loss集成到损失函数中:在目标检测算法中,对于每输入一张图像,可能会生成许许多多的预选框(region proposal),但是其中只有很少一部分包含真实目标,这就造成了类别不均衡问题。YOLOX属于one-stage方法,相比于two-stage来说,其未生成候选框,直接对anchor box进行分类,所以速度较快,但是精度会降低。
由于正负样本之间不平衡可能会严重降低检测的准确性,这种不平衡是不可避免的,实际操作中,完好的樱桃图像数量会多于缺陷樱桃的数量,同时也会有许多不明显的缺陷样本。为了解决正负样本间的不平衡,提高对训练样本的关注,提出一种新的交叉熵损失函数即Focal Loss。新的损失函数通过使用一个可调整的因子来动态调整,自动降低容易样本分类的检测,主要集中在难分类样本上。
Loss为各个训练样本交叉熵的直接求和,即各个样本的权重公式相同。
(6)
式中:
pt——预测样本属于1的概率。
当yt=1时,说明第t个样本属于该类物体;当yt=0时,说明第t个样本不属于该类物体。此时会存在样本不平衡造成损失函数倾斜,因此,用如下函数来改进原始损失函数。
(7)
(8)
式中:
γ——一个可以调整的参数,γ≥0;
(1-pt)γ——调制系数(通过减少易分类样本的权重,使得模型在训练时更专注于难分类的样本)。
3.1.2 结果与分析 为了更全面探究试验算法对检测精度和速度的影响,通过对樱桃缺陷数据集采用多种策略进行实验验证。由表1可知,对樱桃缺陷系统进行改进后,其对所有类别的检测结果均有促进作用,对于每一类别都有较大提升,平均检测精度(mAP)达97.59%,效果显著。其主要原因是通过对网络的改进,提高了不明显特征的检测能力。
表1 测试集上不同改进策略对比
针对FPN检测器提出融合因子,用来描述特征金字塔中相邻层的耦合程度。其中,自上而下和侧向连接的特征融合机制有助于检测器得到更好的特征表达,分层匹配机制将不同大小的目标对应到不同分辨率的特征层上学习,不同分辨率的特征层可以更专注于适合当前特征层的分辨率大小目标的学习。由表1可知,加入融合因子后,其对病变和腐烂的改善效果得到了明显提升,检测精度(AP)值分别提高了4.89%和4.27%,模型整体平均检测精度(mAP)值提高了2.72%。
在上述改进的基础上,进一步改进交叉熵损失函数,该函数通过减少易分类样本的权重,使得模型在训练时更专注于难分类的样本,缓解样本间不平衡。在保证原网络速度的优势下,进一步提高了检测精度。由图9可知,真实值与预测值差别越大,Loss越大,损失函数越小,模型的处理速度越快且精度越高,改进前后的模型损失函数如图10所示。
图9 不同优化策略模型Eval mAP图
图10 模型损失对比图
为了验证所提改进YOLOX算法对樱桃缺陷检测精度和效率的有效性和先进性,在保证模型参数一致的前提下,对比目前目标检测算法研究中性能较优的YOLOv4算法[19]、Faster R-CNN算法[20]及SSD算法[21],使用测试集对各算法的试验结果进行测试。由表2 可知,与Faster R-CNN算法、SSD算法及YOLOv4算法相比,试验所提算法在AP值和mAP值上都具有更高的检测精度,效果显著。在检测速度上,试验所提算法检测速度(FPS)可达33.8帧/s,相比于其他3种算法有大幅提升。
表2 樱桃测试集上不同算法对比
3.2.1 樱桃分级检测算法改进 在实际检测系统中,下方轨道是黑色,当樱桃颜色较深时,目标与周围背景较为相似,会造成漏检。注意力机制是聚焦于局部信息的机制,随着任务的变化,注意力区域往往会发生变化,因此通过注意力机制能够有效地找到最有用的消息。在樱桃分级检测网络中,加入注意力机制,使得网络只关注樱桃的大小和颜色。试验算法引入CBAM模块,进一步增强特征表达能力,模块结构如图11所示。
图11 CBAM模块结构
卷积层输出的结果会先通过一个通道注意力模块,得到加权结果后,再经过一个空间注意力模块,最终进行加权得到结果,其数学表达式为:
F′=Mc(F)⊗F,
F″=MS(F′)⊗F′,
(9)
式中:
⊗——元素相乘;
F——输入的特征图;
MC(F)——通道注意力模块的输出;
MS(F′)——空间注意模块的输出;
F″——CBAM输出的特征图。
当一个特征图的每个通道被考虑作为特征探测器,通道注意力被用来关注哪些特征是有意义的。为了有效地计算通道的注意力,将输入特征图的空间维数进行压缩。为了聚焦空间信息,同时使用平均池化和最大池化。通道注意模块结构如图12所示。
图12 通道注意模块结构
首先将输入的特征图分别经过平均池化和最大池化操作,然后传入一个具有共享权重的多层感知器(MLP)。MLP包含一个隐藏层,相当于两个全连接层。最后通过一个Sigmoid激活函数获得通道注意力图。数学表达式为:
(10)
式中:
σ——Sigmoid激活函数;
W0、W1——MLP的权重,W0∈RC/r×C,W1∈RC×C/r。
与通道注意力不同的是,空间注意力被用来关注有意义的特征来自哪里,这是对通道注意力的补充。空间注意模块结构如图13所示。
图13 空间注意模块结构
首先在每一个特征点的通道上取最大池化和平均池化,将这两个结果进行一个堆叠,生成一个通道数为2的特征图。再通过7×7的卷积将通道数减少为1,最后通过一个Sigmoid激活函数得到一个空间注意力图。其数学表达式为:
(11)
式中:
7×7——卷积核的大小。
3.2.2 结果与分析 注意力机制是一个即插即用的模块,由于放置在主干会导致网络的预训练权重无法使用,所以在YOLOX主干网络提取出来的3个有效特征层上增加注意力机制,同时在上采样模块后增加注意力机制。
通过在网络中加入注意力机制模块,最后获得经过重标定的特征,即强调重要特征,压缩不重要特征。由表3 可知,在保证分级检测速度近似不变的基础上,mAP得到了明显提升。对樱桃分级检测系统进行改进后,其对6类樱桃的AP值均有提升,且各类之间检测准确率较为平均,mAP达95.92%。
表3 测试集上系统改进前后对比
由图14可知,YOLOX损失在迭代30轮次时才逐渐降低至0.4,最终稳定在0.34左右;引入CBAM模块后,网络损失值降低且收敛速度加快,最终稳定在0.19左右,说明试验提出的改进算法达到了较好的效果。
图14 损失函数曲线
提出了一种基于YOLOX的樱桃缺陷及分级检测模型。结果表明,对于缺陷检测网络,使用融合因子配置FPN,提高了不明显缺陷樱桃的检测能力,并且将Focal loss集成到损失函数中,改善了各类间样本不平衡的问题。改进后的网络平均检测精度值达到了97.59%,相比原始网络提高了5.75%。对于樱桃分级检测网络,采取融合注意力机制的方法指引模型关注方向,平均检测精度达到了95.92%,相比原始网络提升了6.99%。因此,基于YOLOX算法的樱桃缺陷及分级检测算法的准确度得到了明显提升。虽然YOLOX算法的检测速度相比于现有的主流算法得到了明显提升,但是改进前后的YOLOX算法检测速度基本不变,今后将继续研究此项工作。