1. 引言
随着人们生活水平的不断提高,对食品质量的标准也日益提升。经研究表明,石榴具有丰富的维生素C,还具有健脾提神、增强食欲的作用[1] [2]。如今石榴已是我国需求量较大的一种水果,它的品质和产量受到广泛关注。由于石榴在生长、采摘和运输过程中会出现各种类型的缺陷,会严重影响石榴的品质,进而影响销售,造成较大的经济损失。目前对石榴缺陷的识别还主要依赖于人工检测,通过肉眼观测石榴颜色和表面完整度进行判断的方式过于低效且准确率不高,受人为因素影响较大,不利于石榴产业提速增效。
目前,石榴品质的影响研究主要集中在生长条件对品质方面的影响[3]-[5]。近年来,计算机视觉在水果缺陷方面的应用广泛。马博等基于机器视觉设计了番茄分选系统,采用缺陷检测方法,对番茄的缺陷进行识别和分级[6]。吴建清等基于机器视觉对芒果进行检测与分级,首先对芒果图像进行预处理,取五个缺陷参数并进行归一化,利用GMM、MLP、SVM和KNN 4种分类器,平均准确率可达92.5%、93.75%、98.75%和98% [7]。申飘基于图像处理与机器学习对柑橘表面缺陷进行检测研究,其中IAO-SVM具有更好的分类性能,分类准确率可达95.83% [8]。罗山等基于机器视觉对石榴品质进行分级,以缺陷面积与总面积之比和缺陷数目作为划分依据,分级准确率可达92.9%,但其不能识别出具体的石榴缺陷类型[9]。Manisha Bhange等基于图像处理检测石榴病害,使用k均值算法进行聚类,SVM用于分类,识别石榴病害的准确率为82%,不能识别出具体的缺陷类型[10]。巨志勇等基于自适应阈值Prewitt算子对石榴病斑进行检测,识别黑腐病和疥疮病两种石榴缺陷,识别的正确率可达98.24% [11]。
由于石榴缺陷的检测研究较少,本文基于YOLOv5模型和Mask R-CNN模型分别对石榴五种缺陷进行检测,识别并标注出石榴的缺陷类型,并对比两个模型的缺陷检测精度。
2. 图像采集
我们选用Intel RealSense D435i型号的相机拍摄石榴表面缺陷,从正反侧面以及花萼、果梗共四个方向拍摄。为了保证石榴缺陷数据的准确性与广泛性,符合“LY/T2135—2013石榴质量等级”的分级标准,采集石榴五种不同的缺陷类型,分别为鸟啄(brid damage)、裂果(fruit cracking)、腐烂(rot)、锈斑(rust)和日灼(sunburn)。采集的石榴缺陷类型除了质量等级的几种常见类型之外,还增加了腐烂缺陷类型,大大增加了检测的全面性和准确性。
3. 图像预处理
Table 1. Training and testing sets for different defect types
表1. 不同缺陷类型训练集和测试集
|
Bird damage |
Fruit cracking |
Rot |
Rust |
Sunburn |
Total |
Training set |
250 |
250 |
250 |
250 |
250 |
1250 |
Test set |
62 |
62 |
62 |
62 |
62 |
310 |
由于样本图像携带较多噪声,采用pycharm软件处理样本数据,将图像亮度增强,使石榴背景干净减少噪声。同时,为了增加样本数量,通过旋转、翻转、增亮、变暗、沿X及Y轴分别增大、对比度增强、锐度变化、随机颜色九种变换将数据集扩充,原数据为156张,扩增后为1560张,采用欠采样和过采样的方式处理数据集中存在类别不平衡问题,优化处理数据。YOLOv5模型采用labelimg软件对石榴缺陷的位置打标并保存,Mask R-CNN模型采用via软件打标并保存,按照8:2的比例随机划分训练集和测试集。不同缺陷类型的训练集和测试集情况见表1。
4. YOLOv5模型
4.1. YOLOv5缺陷检测架构
本文采用了YOLOv5中的YOLOv5s版本,YOLOv5s是一个轻量级的目标检测模型。YOLOv5s采用了FPN + PAN结构,这种金字塔模型能够使上下层语义互通,提高检测的准确性。YOLOv5s是YOLOv5系列中深度最小、特征图宽度最小的网络模型,具有尺寸小、速度快、轻量化等优点。YOLOv5s的网络结构见图1。
Figure 1. Network structure of YOLOv5s
图1. YOLOv5s的网络结构
YOLOv5s网络结构由Backbone、Neck和Head组成。由Backbone提取特征信息后,再由Neck进行特征融合,最后通过Head模块的三个检测层分别对应得到3种不同尺寸的特征图,每个网格上预设了3个不同宽高比的Anchor,用来预测和回归目标。
4.2. YOLOv5模型训练
YOLOv5模型的主要性能指标包括损失函数、精确率、召回率和P-R曲线。损失函数包含分类损失(cls_loss),定位损失(box_loss)和置信度损失(obj_loss)。损失越小,模型训练效果越好。P和R表示精确率和召回率,它们的值越高效果越好。P-R曲线是以召回率为横轴,精确率为纵轴的曲线,展示了不同召回率下精确率的变化。MAP的值是精确率和召回率所围成的面积,MAP越接近1模型预测精度越高,性能越好。MAP@0.5:0.95 (MAP@[0.5:0.95])表示在不同IoU阈值(从0.5到0.95,步长0.05)下的平均MAP。训练性能各指标结果见表2,损失函数见图2,P-R曲线见图3。
Table 2. Training results of each index
表2. 各指标训练结果
Class |
P |
R |
MAP50 |
MAP50-95 |
All |
0.922 |
0.944 |
0.936 |
0.52 |
Bird damage |
1 |
1 |
0.995 |
0.669 |
Fruit cracking |
0.926 |
0.952 |
0.95 |
0.437 |
Rot |
0.899 |
0.901 |
0.907 |
0.509 |
Sunburn |
0.913 |
0.938 |
0.91 |
0.503 |
Rust |
0.87 |
0.93 |
0.918 |
0.482 |
Figure 2. Training results of loss function
图2. 损失函数训练结果
Figure 3. P-R curve
图3. P-R曲线
由表2可知,此模型训练的平均检测准确率为93.6%,模型训练结果较精确。由图2可知,损失函数随着训练次数的增多而逐渐减小,模型准确率越来越高。从图3中P-R曲线观测出不同召回率下精确率的变化,曲线期望接近(1,1)模型性能好,P-R曲线下面积为0.936,由此可见,模型训练效果整体良好。
5. Mask R-CNN模型
5.1. Mask R-CNN缺陷检测架构
Mask R-CNN属于实例分割与YOLOv5模型的目标检测分割不同,实例分割要求检测出目标位置同时对目标进行检测,所以需要结合目标检测(Faster R-CNN) [12]和语义分割(FCN)方法,见图4。
Figure 4. Network structure for Mask R-CNN
图4. Mask R-CNN的网络结构
主要框架使用的是Faster R-CNN,但Mask R-CNN模型将Faster R-CNN的主干特征提取网络vgg-16更换成了resnet101 + FPN结构,得到若干个不同尺度的特征图,根据不同尺度特征图生成若干不同大小的预设框。
将预设框通过RPN网络进行筛选(前景或者背景),得到筛选后的预设框。
将预设框分为两条线路:Faster R-CNN和Mask,Faster-RCNN线路主要输出对于预设框类别和回归的信息,而Mask主要输出对于proposal的值。在训练时,输入Mask分支的是由RPN提供的并与Faster R-CNN经过对比后的正样本预设框,测试时输入的是经过NMS处理以后的目标。
5.2. Mask R-CNN模型训练
Mask R-CNN是实例分割模型,在训练期间,将在每个采样后的RoI上的多任务损失函数定义为L = Lcls + Lbox + Lmask。分类损失(Lcls)和检测框损失(Lbox)与Faster R-CNN中定义的相同。掩码分支对于每个RoI的输出维度为Km2等即K个分辨率为m × m的二进制掩码,每个类别一个,K表示类别数量。我们为每个像素应用Sigmoid函数,并将Lmask定义为平均二进制交叉熵损失。对于真实类别为k的RoI,仅在第k个掩码上计算Lmask (其他掩码输出不计入损失)。Mask R-CNN模型训练后的各性能指标参数见表3,损失函数值见图5,MAP值见图6。
Table 3. Training results of each index
表3. 各指标参数训练结果
|
Sunburn |
Rust |
Rot |
Fruit cracking |
Bird damage |
All |
MAP50 |
0.95 |
0.9 |
0.82 |
0.77 |
0.91 |
0.88 |
MAP50-95 |
0.83 |
0.38 |
0.55 |
0.52 |
0.46 |
0.62 |
Figure 5. Loss function of training based on Mask R-CNN
图5. Mask R-CNN模型训练损失函数
Figure 6. MAP results based on Mask R-CNN model
图6. Mask R-CNN模型训练的MAP结果
6. YOLOv5和Mask R-CNN性能对比
6.1. 性能指标对比
通过图2和图5对比两个模型的损失函数,可以知道两个模型的损失函数值都是逐渐减小的,每次训练之后对两个模型改进都越来越优化。根据损失函数值可以知道模型预测值与真实值的差距,根据每次训练出的损失函数值可以评估和求解模型,最小化损失函数,进而优化两个模型。通过表2和表3对比可知,YOLOv5模型的精度值可达93.6%,Mask R-CNN模型的精度只能达到88%。可见,YOLOv5模型的精度更高,检测效果更准确。
6.2. YOLOv5可视化缺陷显示
在designer软件设置一个可视化的窗口,在vs2010软件配置PySide6环境,设置文件为可读文件,编写代码,调用训练最好的模型,显示可视化窗口,显示情况见图7,五种缺陷类型的检测见图8。
Figure 7. Defect detection based on YOLOv5
图7. YOLOv5缺陷检测结果
Figure 8. Test results for five defect types based on YOLOv5
图8. 基于YOLOv5的五种缺陷类型检测结果
6.3. Mask R-CNN可视化缺陷显示
Figure 9. Defect detection based on Mask R-CNN
图9. Mask R-CNN 缺陷检测结果
Figure 10. Test results for five defect types based on Mask R-CNN
图10. 基于Mask R-CNN的五种缺陷类型检测结果
通过Mask R-CNN模型对数据集进行训练,得到最优模型。在pycharm预测模块调用训练得到的最优模型,输入需要检测的图片路径,利用plt.show函数和plot_img.save函数对检测结果进行显示并保存。输入原图片直接显示检测结果见图9,五种缺陷类型的检测见图10。
7. 结论
Mask R-CNN和YOLOv5模型区别和联系:(1) Mask R-CNN是两阶段目标检测,而YOLOv5是单阶段目标检测。(2) 两者都使用锚框,但YOLOv5基于维度簇(Dimension Clusters),而Mask R-CNN是手工挑选(hand-picked)。(3) 两者都使用author-IOU标签方案。
本文分别用YOLOv5和Mask R-CNN网络结构训练模型进行预测分析。因为Mask R-CNN是自下而上和自上而下的双通道处理,所以要比YOLOv5的单一归一化的特征提取的效果要好。但是通过对比可知,Mask R-CNN的MAP值低于YOLOv5的MAP值。所以就模型的精度来说,YOLOv5模型精度更高,但就特征提取效果来说,Mask R-CNN模型的检测效果更好。根据实验结果,可以选择YOLOv5模型来实现高精度检测石榴缺陷。
基金项目
2023年吉林农业大学本科生科技创新基金项目。