1. 引言
新时代下人们对饮食健康的要求越来越高,而水果的腐烂度判别是水果生产、运输和消费过程中不可忽视的问题。为此合理划分水果新鲜程度等级,对水果的腐烂度做出检测,无论是在水果产业或是家用场景,都具有重要意义。
在对水果腐烂度进行检测时,若使用人工进行评判,会受检测人的经验水平影响,其受主观性较大,难以保证结果准确度。深度学习能提取目标的全局特征和局部特征,且能从大量数据中提取特征,在数据处理方面优势明显,在目标检测识别领域深受欢迎。深度学习的特性在水果检测和病虫害识别等方面受到了广泛关注。
随着近年来我国水果产业的快速发展,水果腐烂度识别开始进入研究人员的视野。为满足大规模、高效率的水果识别的需求,研究人员开始利用不同算法进行水果图像的识别研究[1]。
从以往的文献中可以发现,传统的水果图像识别系统主要集中在对水果种类的识别上[2]。文献[3]提出的基于多元特征的低成本水果分拣系统,能够实现完成物品分类和分级融合分拣。文献[4]通过仿真研究改进了农业水果采摘中图像识别技术,提高了水果采摘的成功率,并设计了一款基于STM32的水果采摘机器人,实现水果采摘机器人的手动模式采摘和自动模式采摘。文献[5]设计了一种图像识别水果病虫害的巡逻车,用于识别检测危害水果的严重病虫害。文献[6]通过基于TensorFlow搭建的卷积神经网络模型完成水果识别,从而实现水果的自动称重计价播报。而对水果腐烂度进行识别的算法十分稀缺,并且传统的水果种类图像识别系统主要工作集中在图像预处理和特征提取阶段,过程较为复杂,在实际操作中不宜推广。
神经网络模型的选取对系统的识别精度和速度有很大影响,简单的神经网络模型无法满足所需精度,但复杂的模型存在识别速度缓慢的问题。因此需要选取合适的神经网络模型来保证水果图像识别的精度和速度[7]。
2. 系统设计方案及原理分析
2.1. 系统设计方案
基于机器视觉的水果腐烂度检测系统由处理器模块、温湿度传感器模块、AD转换模块、摄像头模块和机械结构组成硬件结构,由上位机、云端服务器、微信小程序等组成软件系统。系统整体框图如图1所示。
Figure 1. Overall system block diagram
图1. 系统总体框图
2.2. 系统硬件设计
基于机器视觉的水果腐烂度检测系统的硬件部分主要由工业派、摄像头、温湿度传感器模块、SIM800C模块、WIFI模块、PC上位机模块以及机械结构组成。硬件结构总体框图如图2所示。
Figure 2. Overall hardware structure diagram
图2. 硬件结构总体框图
工业派作为整个系统控制的核心,通过高清摄像头采集图像进行水果腐烂度识别;通过STM32获取温湿度传感器采集的储存环境温湿度数据;通过WIFI模块与云端数据库对接并上传水果库存及储存环境信息;通过PC上位机与用户进行现场交互;通过SIM800C同用户进行远程交互。
工业派支持丰富的软件开发生态体系,提供SDK支持,可支持Linux和RTOS两个版本;支持Ubuntu操作系统;支持深度学习架构-TIDL;支持Caffe、TensorFlow-slim和YOLO框架训练的模型,满足基于机器视觉的水果腐烂度检测系统的功能要求。工业派功能框图如图3所示。
Figure 3. IndustriPi function block diagram
图3. 工业派功能框图
2.3. 系统软件设计
2.3.1. 上位机程序设计
上位机软件开发环境如图4所示。程序主要可分为与STM32交互子程序、与云端服务器交互子程序、摄像头采集子程序、水果图像识别子程序等,主程序按照系统逻辑对各子程序进行调用。
Figure 4. Upper computer development environment
图4. 上位机开发环境
2.3.2. 微信小程序设计
本文微信小程序的设计满足用户远程查看的需求,方便实时了解水果库存状态。微信小程序功能框图如图5所示。
Figure 5. WeChat mini program function block diagram
图5. 微信小程序功能框图
用户可通过个人中心登录微信小程序,注册自己的账号,通过登录自己的账号后,进入首页。
微信小程序可在库存页面实时提供数据库中由上位机生成并返回的信息,信息包括水果序号、水果种类以及腐烂度等信息。
3. 水果腐烂度检测系统网络模型
根据对常见目标检测算法的比较,针对二阶段目标检测算法普遍存在的运算速度慢的缺点,一阶段目标检测算法将物体分类和物体定位在一个步骤中完成[8]。其中YOLO可实现45帧每秒的运算速度,完全能满足实时性要求。为了满足水果腐烂度检测系统的快速准确的识别需求,选择YOLO系列中性能出色的YOLOv5作为本系统的深度学习网络模型。
YOLO算法是一种端到端的目标检测方法。YOLO目标检测算法能在保证更快检测速度的情况下具备较高的检测准确率,从而实现了目标的实时性检测。
图6展示了YOLOv5s目标检测算法的整体网络结构图。对于一个目标检测算法而言,我们通常可以将其划分为4个通用的模块,具体包括:Input输入端、Backbone主干网络、Neck (外加模块)网络与Head输出端(Prediction检测模块),对应于下图中的4个模块。YOLOv5算法具有4个版本,具体包括:YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x四种,本文采用YOLOv5s,其它的版本都在该版本的基础上对网络进行加深与加宽。
输入端:输入端表示输入的图片。该网络的输入图像大小为640 × 640,该阶段通常包含一个图像预处理阶段,即将输入图像缩放到网络的输入大小,并进行归一化等操作。
Backbone网络:是YOLOv5的主干特征提取网络,形成对电弧图像特征的卷积神经网络,主要结构包含Focus (焦点层)、CBS模块、C3模块和SPPF模块。其中,Focus结构对图片进行切片操作,通过
Figure 6. YOLOv5 network architecture
图6. YOLOv5网络结构
Concat层将其进行通道数的合并,增加电弧图像的特征数,CBS模块中封装了卷积、批量归一化以及SiLU激活函数,该模块相较于普通卷积能够实现更加快速高效的特征提取。C3模块的构建灵感来源于CSPNet,是CSPNet的具体实现。采用CSPNet思想搭建的C3模块保证了主干网络对图像特征的有效提取,同时还遏制了网络中梯度爆炸的问题。SPPF模块是SPP模块的快速实现版,其通过采取3个类似串联的最大池化层对输入的特征进行最大池化,之后通过特征拼接达到多尺度特征融合的目的。
Neck网络:Neck网络通常位于Backbone网络和Head网络的中间位置,利用它可以进一步提升特征的多样性及鲁棒性。Neck网络通过结合FPN结构和PAN结构来提高网络的特征融合能力。FPN结构的基本思想是将在主干网络中经过多次卷积下采样操作生成的输出特征图进行上采样,生成多个不同尺度的特征图,以检测不同尺度的目标。FPN的特征融合过程是自顶向下的。在此基础上,通过结合PAN结构重新引入一种自底向上的特征融合路径,进一步提高了网络模型对不同尺度目标的准确性。
Head输出层:Head主要用于对目标对象的位置和类别的判定。针对不同的检测算法,输出端的分支个数不尽相同,通常包含一个分类分支和一个回归分支。YOLOv5利用GIOULoss代替Smooth L1 Loss函数来估算边界框的位置损失[9],从而进一步提升算法的检测精度。该模块包含3个尺度分别为20 × 20、40 × 40、80 × 80的检测头来分别检测大小不同的目标。
由于水果腐烂度检测任务具有实时性的需求,YOLO系列模型检测速度快,符合任务需求。相比于其他的YOLO系列模型,YOLOv5网络模型轻量且检测速度快,适合部署到嵌入式设备。
4. 基于深度学习的水果腐烂度检测实验
4.1. 数据集构建
本文在制作数据集时选取了十种水果(苹果、香蕉、猕猴桃、火龙果、黑布林、芒果、菠萝、桃子、梨、橙子)在不同光照条件下从多个不同角度对水果进行采集,总共获得了5000张带标注的水果图像,每种水果包含500张图像,采用空间变换的手段来增加数据集的数量。
4.2. 实验环境和评价指标
本文的实验过程在Ubuntu18.04操作系统上基于深度学习框架Caffe实现,搭建YOLOv5环境,并配置GPU环境,所采用的GPU为NVIDIA GTX3060,模型配置文件选择yolov5s.ymal。
利用已经搭建好的实验环境,在深度学习框架上搭建YOLOv5目标检测算法模型,具体的实验参数如表1所示。
Table 1. YOLOv5 network model parameters
表1. YOLOv5网络模型参数
参数 |
冻结训练 |
解冻训练 |
迭代次数 |
150 |
150 |
批量大小 |
16 |
8 |
学习率 |
0.0001 |
0.0001 |
输入图片尺寸 |
640 × 640 |
训练集:验证集 |
9:1 |
本文使用准确率P (Precision)、召回率R (Recall)、置信度为0.5的平均精度均值mAP (mean Average Precision)、帧率FPS (frames per second)作为模型的评价指标。
YOLOv5默认使用CIoU来计算边界框损失。CIoU是在DIoU的基础上,进一步考虑了边界框的宽高比。其中DIoU将预测框和真实框之间的距离,重叠率以及尺度等因素都考虑了进去,使得目标框回归变得更加稳定。它的损失计算公式为:
(1)
(2)
其中b和
分别表示预测框和真实框的中心点,
表示两个中心点之间的欧式距离,c表示预测框和真实框的最小闭包区域的对角线距离。
CIoU是在DIoU的惩罚项基础上添加了一个影响因子
,这个因子将预测框的宽高比和真实框的宽高比考虑进去,即CIoU的惩罚项为:
(3)
其中
是权重参数,它的表达式为:
(4)
v是用来衡量宽高比的一致性,它的表达式为:
(5)
所以CIoU的损失计算公式为:
(6)
4.3. 实验结果分析
YOLOv5网络模型的训练情况如图7所示。左图为损失函数随训练轮次的变化曲线,模型训练100轮次,损失函数数值收敛在0.05~0.08。右图为mAP随训练轮次的变化曲线,模型训练100轮次左右,mAP波动较小,然后稳定在90%左右。这表明模型已达到相对平衡状态,可认为模型已基本收敛。
Figure 7. YOLOv5 training curve
图7. YOLOv5训练曲线
在测试环节分为多个水果测试、不同种类水果测试和不同腐烂度水果的测试,分别测试系统识别的准确率。
多个水果测试效果如图8所示。分别选择苹果、香蕉和橘子进行测试,可以准确快速的识别水果种类,识别准确率如表2所示。
Figure 8. Test results of multiple fruits of the same type
图8. 同种类多个水果测试效果
Table 2. Accuracy of testing multiple fruits of the same type
表2. 同种类多个水果测试准确率
水果名称 |
准确率(%) |
苹果 |
95.33 |
香蕉 |
94.52 |
橘子 |
95.64 |
不同种类水果测试效果如图9所示。分别选择苹果、香蕉和橘子进行测试,可以准确快速的识别水果种类,识别准确率如表3所示。
Figure 9. Test results of different types of fruits
图9. 不同种类水果测试效果
Table 3. Accuracy of testing fruits of different types
表3. 不同种类水果测试准确率
水果名称 |
准确率(%) |
苹果 |
93.37 |
香蕉 |
93.55 |
橘子 |
92.62 |
不同腐烂度水果的测试效果如图10所示。分别在称台上放置橘子、苹果和香蕉三种水果进行测试。可以准确快速的识别水果腐烂度,识别准确率如表4所示。
Figure 10. Different degrees of decay testing results
图10. 不同腐烂度水果测试效果
Table 4. Accuracy of testing fruits with different degrees of decay
表4. 不同腐烂度水果测试准确率
水果名称 |
准确率(%) |
新鲜苹果 |
93.31 |
少许腐烂苹果 |
96.50 |
极其腐烂苹果 |
98.13 |
新鲜香蕉 |
98.35 |
腐烂香蕉 |
97.09 |
新鲜橘子 |
97.64 |
腐烂橘子 |
99.25 |
5. 总结
本文将深度学习技术应用于水果腐烂度检测,通过目标检测的手段对水果的腐烂度进行判别。基于机器视觉的水果腐烂度检测系统采用YOLOv5目标检测算法,通过训练神经网络模型,可以自动识别水果的种类和腐烂度,并给出相应的评分。实验表明,水果腐烂度检测系统各项功能实现效果良好,通过对大量的水果数据集进行训练,YOLOv5模型可以准确地识别不同种类的水果,并判断腐烂度,综合检测准确率高达90%以上。YOLOv5目标检测算法具有高效的特点,能够在短时间内实现水果的检测和分类,使得水果腐烂度检测系统具有较高的效率和实时性。另外,本检测系统还具有较高的扩展性,可以添加新的水果种类或调整腐烂评分标准,以满足不同场景下的需求。在未来的工作中,研究将侧重于改进YOLOv5目标检测算法,通过优化特征提取网络、网络轻量化等方式来提升检测的准确率和时效性,以及拓展更广泛的使用场景等。
NOTES
*通讯作者。