基于机器视觉和YOLOv4的破损鸡蛋在线检测研究

2022-03-11 00:56赵祚喜罗阳帆黄杏彪曹阳阳
现代农业装备 2022年1期
关键词:正确率裂纹鸡蛋

赵祚喜,罗阳帆,黄杏彪,袁 凯,黄 渊,曹阳阳

(1.华南农业大学工程学院,广东 广州 510642;2.广州广兴牧业设备集团有限公司,广东 广州 510540)

0 引言

据调研,破损蛋大约占蛋厂总产量的6%。破损蛋会出现漏液的情况,对生产线的整洁性和稳定性造成很大影响,而且沾污漏液的完好鸡蛋会给进一步裂纹检测带来很大的噪声干扰。近年来,机器视觉技术已经成为农产品加工分级检测的常用方法[1-4],且随着计算机运算能力的不断提升,深度学习技术在图像数据处理、目标检测中的优越性越发凸显[5-7],机器视觉技术也因深度学习的发展而变得更加成熟可靠[8-10]。

国内外学者在机器视觉鸡蛋自动化检测方面进行了大量研究[11]。OMID 等提取裂纹鸡蛋图像特征,设计模糊推理系统实现裂纹鸡蛋的识别,准确率达94.5%[12]。JETSADAPORN 等首次针对未清洗的鸡蛋裂纹检测进行研究,差分2 种不同气压下的图像后分割出污垢和裂纹,进一步使用边缘检测识别裂纹[13]。张健等提出了基于改进粒子群算法的鸡蛋裂纹检测方法,对明显的线形裂纹、网状裂纹正确检测率分别为96.4%、94.7%,非明显裂纹检测准确率也在85%以上[14]。刘进闯[15]、孙柯[16]、魏萱[17]、梁丹[18]均使用机器视觉结合传统机器学习的方法对鸡蛋裂纹进行识别,并设计了相应的硬件设备。以上研究均是基于鸡蛋图像的纹理、颜色、形状等特征进行裂纹识别,此类方法众多,但对不同光照环境、不同应用场景的适用性较差,缺乏通用性。对于此问题,有学者使用多种传感器融合的策略来改善裂纹检测方法的适用性[19-21],也有学者尝试将深度学习应用于鸡蛋裂纹检测。宋超使用CNN 以及深度残差网络检测鸡蛋缺陷,基于深度学习的识别率较传统方法提高了近3%[22];陈羽立等[23-24]改进EfficientNet_B0 深度学习网络中部分结构来识别裂纹鸡蛋,加快了模型训练速度,证实了将深度学习应用于鸡蛋裂纹检测的可行性。此类研究较少,且并未达到实际应用的要求,仍需进一步探索。

综上所述,国内外对基于机器视觉结合深度学习技术的破损蛋检测研究较少,且绝大部分采用静态的鸡蛋图像采集方法,通用性较差,难以应用于实际生产线。因此,本文提出了一种基于机器视觉和 YOLOv4 深度学习网络的破损鸡蛋检测方法。对比不同检测算法的识别效果,并搭建实际鸡蛋生产环境验证YOLOv4 模型的在线检测能力,旨在探索新的深度学习网络在破损鸡蛋检测中应用,为鸡蛋智能化生产提供技术支持。

1 材料与方法

1.1 平台搭建与材料准备

本文模拟实际生产线搭建了视觉检测系统,用于采集静止鸡蛋图像和匀速运动的鸡蛋图像。主要由传送架、鸡蛋托盘、光源、摄像头、计算机等5部分组成,具体如图1 所示。系统传送带的尺寸为30 cm×150 cm,传输速度在4~15 m/min 之间匀速可控。与常见的底部打光方式不同[24-25],本文采用前向照明方式(光源置于鸡蛋正上方),光源与摄像头同侧,满足图像采集要求的同时简化设备安装条件,节约成本。此外,图像质量的高低直接影响到后期检测算法的精度,因此,本研究使用的工业相机为90°无畸变定焦镜头,图像为RGB 3 840×2 880 pixel。

图1 鸡蛋图像采集系统

本文使用的新鲜鸡蛋样本由广州广兴牧业设备集团有限公司提供。有粉色和褐色2 种颜色,清洗后,筛选出蛋壳完好的鸡蛋若干枚。为模拟生产线上所存在的破损鸡蛋,随机挑选部分完好的鸡蛋,人为进行敲击、碰撞制作破损蛋样本,部分样本如图2 所示。

图2 样本示意图

样本采集拍摄距离为30~60 cm,为获取充足的数据集和满足样本多样性的要求,在不同角度和不同背景下共拍摄1 300 张图像,每张图像中存在数目不等的完好鸡蛋和破损鸡蛋。使用中值滤波对图像进行预处理,再随机对部分图像进行镜像、旋转处理,将图像的数目扩充到1 639 张并编号放于同一文件夹内。

训练模型采用 Pascal_VOC2007 的数据集格式,先用Labelimg 标注工具对每张图片目标物体所在区域进行手工数据标注矩形框,得到真实框ground truth 用于训练。设定鸡蛋的标签为egg,破损蛋的标签为crack。数据集按照9:1 的比例划分为训练集与测试集。

1.2 方法简介

本文选择YOLOv4 作为漏液鸡蛋的识别模型,YOLOv4[25]是继YOLOv1[26]、YOLOv2[27]和YOLOv3[28]后Bochkovskiy 提出的目标检测方法,其具有更快的检测速度,同时也具有较高的识别准确度和泛化性能。以Tensorflow 作为深度学习框架,配置完成Tensorflow 的运行环境后,将筛选出的图像数据按照PASCALVOC2007 检测标准进行存储和标注,基于预训练模型进行微调,整体实现流程如图 3 所示。

图3 YOLOv4 识别方法流程图

2 模型训练与优化

训练模型时,输入图像的分辨率、批处理量大小(batch_size)、学习率都会影响模型的检测效果。因此,在训练之前,需要选择合适的参数。本文模型训练平台如表1 所示。

表1 深度学习模型训练的硬件设备和软件开发环境

使用制作好的样本对YOLOv4 网络模型进行训练,获得破损鸡蛋检测模型。具体流程如图4 所示。

图4 YOLOv4 破损鸡蛋检测训练流程图

2.1 参数优化

在模型训练的过程中,梯度下降批次大小(Batch_size)和学习率大小(Learning_rate)对模型的训练效果有很大影响,太大使得模型收敛时间变长,太小可能导致无法收敛,选择合适的参数能够提高模型性能。根据本文的硬件条件选取了2、4、8、16、32 作为Batch_size,其他参数为默认值,得到的平均精度(mAP)如表2 所示。

表2 不同Batch_size模型的mAP

由上表可知,在其他参数不变以及硬件条件允许的情况下,Batch_size 适当增大,mAP 会有所提升。但Batch_size 的增加所引起mAP 的变化并不是线性的,如Batch_size 从2 增大到4 和从4 增大到8,mAP 分别上升了1.28 %和2.15%,而Batch_size从8 到16 时,对应的mAP 上升的幅度-2.76%。此外,当Batch_size 选择过大,会使得模型训练时数据溢出,导致无法进行训练,如当Batch_size=32 时,在本文所使用的计算机配置下无法训练。综合考虑硬件条件、检测精度和训练耗时等因素,本文选择Batch_size 的大小为8。

学习率选择常用的初始值作为候选值,分别是0.000 1、0.001、0.01、0.1。基 于Batch_size 为8 的基础上,其他参数为默认值,训练结果如表3 所示。

表3 不同学习率模型训练的mAP

如上表所示,当学习率为0.1 和0.01 时,都出现梯度值过大产生梯度爆炸的情况,此时模型训练发散不收敛,表明0.1 和0.01 的学习率过大,不符合模型训练的要求。当学习率为0.001 时,其 mAP比学习率为0.000 1 时所对应的mAP 高8.96%。因此,本文最终选择的超参数为:批处理大小为8,学习率为0.001。

2.2 模型训练及测试

训练参数设置为:输入鸡蛋图像的颜色通道为RGB,尺寸大小为416×416,Batch_size 设置为8,选择固定步长衰减型的学习率为0.001,其他参数为默认值。本文的网络模型训练过程采用冻结训练,即模型训练分为冻结和解冻两个阶段,冻结训练可以加快训练速度,也可以在训练初期防止权值被破坏。第一阶段是冻结网络前249 层进行迁移学习,期间主干特征提取网络的参数没有更新,只训练底层权重;第二阶段是解冻网络的全部层进行训练,主干特征提取网络参数及其预测网络参数全部进行更新。本文YOLOv4 的训练损失和验证损失下降曲线如图5。

图5 模型训练的loss 下降曲线

图5a 是YOLOv4 的训练损失函数下降曲线图(黄色部分为局部放大图),图5b 是YOLOv4 的验证损失函数下降曲线图。其中,横坐标为训练的世代,纵坐标为损失值。从图中可以看出,损失函数曲线都在不断下降,表明模型在训练期间不断的优化,整个训练时长为288 min。从图5 可知,随着训练次数的增加,损失函数下降曲线可分为迅速下降、缓慢下降和趋于平稳3 部分。损失值在前5 个Epoch 内迅速下降;在5 <Epoch <25内,损失值缓慢下降;当Epoch >25 时,损失值趋于平稳。

使用测试集对训练后的模型进行测试。其中测试集有150 张图片,每张图片里有数目不等的目标,测试集中共有鸡蛋目标644 个,破损目标335 个。YOLOv4 部分检测结果如图6 所示,其中蓝色框为鸡蛋目标,红色框表示破损。

图6 YOLOv4 部分检测结果

由于图中的鸡蛋是放置于蛋托中,目标之间互不遮挡,故本文通过计算正确目标数目和错误识别目标的个数作为识别准确率的标准,测试最终统计结果如表4。其中,YOLOv4 模型在测试集上对鸡蛋目标和破损目标检测的AP 值分别为89.03%和78.28%,mAP 值为83.67%。模型对鸡蛋和破损的识别准确率分别为92.86%和86.86%。其中,错误识别个数为假阴数(漏检或一个框多个目标)和假阳数(误检或一个目标多个框)之和。根据检测统计结果,测试集中644 枚鸡蛋中有598 枚被正确识别,识别的准确率为92.86%,错误识别率为7.14%,其中假阴44 枚,假阳2 枚。335 枚破损中有291 枚被识别,识别准确率为86.86%,错误识别率为13.14%,其中假阳3 枚,假阴41 枚。

表4 测试集检测结果统计

由表5 可知,破损鸡蛋的漏检数量为39 枚,漏检率为11.64%,占错误识别总数的88.64%。漏检主要原因是模型对破损特征不明显的鸡蛋检测能力弱,而对完整鸡蛋识别正确率仅92.86%,并不理想。为此,进一步分析原因发现有部分鸡蛋目标在图像中只露出小部分,导致模型并未将其正确识别,出现了漏检的情况。而在实际生产线上,鸡蛋都会完整的出现在视频窗口中,故本文单独针对完整鸡蛋的识别情况进行研究。

表5 测试集检测结果统计 枚

人工统计图像中完整鸡蛋个数,然后再用本算法进行识别,将得到的识别正确率作为鸡蛋目标检测的准确率。经统计,测试集内存在完整鸡蛋432枚,成功识别数量为431 枚,完整鸡蛋的识别正确率为99.77%。

3 试验与讨论

3.1 不同识别算法对比试验

为验证本文采用算法与常用的典型深度学习模型的效果,本文对Faster RCNN、YOLOv3 用同样的训练参数和数据集进行训练,在训练完成后采用同一测试集进行对比试验,测试集的150 张图片一共包含漏液鸡蛋335 枚,相关检测结果如表6 所示。

表6 不同模型对漏液鸡蛋的检测结果

由表6 可知,在本研究中,YOLOv4 的检测效果最佳,识别正确率分别比Faster RCNN 和YOLOv3 高2.68%和6.56%,且YOLOv4 的漏检率最低。

3.2 基于YOLOv4的漏夜鸡蛋在线检测试验

为验证本文提出的破损鸡蛋目标检测方法的适用性,进行了破损鸡蛋在线检测试验。

3.2.1 不同漏液鸡蛋数目对比试验

在实际鸡蛋图像中存在数目不等的鸡蛋,破损蛋数目也不相同,所以针对不同破损鸡蛋数目的情况进行检测。采用视频帧的方式进行检测,将一盘鸡蛋放置在传送带上运动并进行拍摄,其中传送速度为5 m/min,最终得到233 张连续的视频帧,每张图片上存在1~5 枚漏液鸡蛋。因此,本文按图像中含有漏液鸡蛋的数量(1、2、3、4、5)设置了5 个梯度对233 张图像进行检测并统计。部分试验结果如图7 所示,最终统计结果如表7 所示。

表7 不同漏液鸡蛋数目的检测试验

图7 YOLOv4 的漏液鸡蛋在线检测效果图

检测目标从左边进入视频窗口,从左往右匀速移动,破损鸡蛋的数目随着传送带的移动而变化。在图7 所示的检测结果中,鸡蛋和破损目标被一一框选出来,其中蓝色框表示鸡蛋(egg),红色框表示破损(crack),识别效果良好。

由表7 可知,破损鸡蛋的平均识别正确率为86.22%,YOLOv4 的识别效果稳定。此外,错误识别主要是由于漏检,漏检的主要原因是由于移动过程中的漏液鸡蛋在图像窗口中只露出一小部分,导致YOLOv4 未成功识别出漏液鸡蛋。

3.2.2 不同传送速度的对比试验

在实际加工生产线上,单个机器的鸡蛋传送效率为30 000 枚/h,所需达到的速度约为5 m/min。为确保本研究的YOLOv4 检测算法满足传送速度的要求,本文针对不同鸡蛋传送速度(5、6、7 m/min)做了对比试验,具体的试验参数如表8。

表8 不同传送速度的检测试验

如表8 所示,选用69 枚鸡蛋进行检测,其中包括19 枚破损鸡蛋。对不同传送速度的破损鸡蛋进行检测,部分帧检测效果如图8。

图8 不同传送速度的破损鸡蛋检测效果

由图8 可知,由于出现了模糊目标、残缺目标等困难目标,在不同传送速度过程中,部分帧会出现漏检的情况,如图8b 中有2 个破损目标漏检,图8h 中有1 个鸡蛋目标漏检。因此,为了全面评估YOLOv4 模型对于不同传送速度下的破损鸡蛋检测能力,本文针对每个试验的视频数据进行验证。

经过统计,可以得出视频数据集的相关信息。包括视频的时长、帧率、总帧数以及总视频帧中的目标总数,如表9 所示。

表9 视频数据集信息

由表9 可看出,在3 组试验的视频中,每帧出现的鸡蛋数目均为15~18 枚,而破损蛋为3~6 枚,鸡蛋总数分别为9 420、7 782、6 633 枚;破损总数分别为2 466、2 044、1 751 枚。利用YOLOv4 模型对每个视频的每一帧进行目标检测,并进行统计和记录,得到的具体结果如表10 所示。

表10 YOLOv4视频帧目标数目检测结果

由表10 可知,在本研究设置的不同传送速度的情况下,YOLOv4 对鸡蛋的识别接近100%,而对于破损的识别正确率在83.78%~85.93%之间。结果表明,在鸡蛋传速度为5~7 m/min 范围内,本文所提出的方法能完成破损鸡蛋检测的任务。

4 总结与展望

为探索深度学习在破损鸡蛋检测中应用,本文提出一种基于机器视觉和深度学习的YOLOv4 破损鸡蛋检测方法,通过多次调整参数训练模型,确定了合适的批处理量和学习率,最终训练得到的YOLOv4 漏液鸡蛋检测模型精度较高,在线检测效果良好,能够满足实际的鸡蛋生产效率。

1)本文提出的YOLOv4 破损蛋检测模型在测试集上的mAP 为83.67%,漏液鸡蛋的识别正确率达86.86%,2 项指标均优于Faster RCNN 和YOLOv3 算法,验证了该方法的可行性和有效性。

2)本文提出的YOLOv4 检测模型适用性较强。不同破损鸡蛋数目检测试验中,识别正确率在84.13%~87.42%之间,平均识别正确率为86.22%;传送速度为5 m/min 时,识别正确率为85.93%;传送速度为6 m/min 时,识别正确率为85.03%,在传送速度为7 m/min 时,识别正确率为83.78%。从识别精度和速度来看,该方法能够应用于实际鸡蛋生产线中。

本文提出的YOLOv4 破损蛋检测模型完成了机器视觉结合深度学习在该领域应用的初步探索。文中所提及的对边缘非完整鸡蛋图像的误判、特征不明显破损蛋漏检的问题仍需进一步研究和改善。

猜你喜欢
正确率裂纹鸡蛋
个性化护理干预对提高住院患者留取痰标本正确率的影响
有了裂纹的玻璃
有了裂纹的玻璃
课程设置对大学生近视认知的影响
热载荷下热障涂层表面裂纹-界面裂纹的相互作用
心生裂纹
神奇的鸡蛋画
生意
生意
从鸡蛋开始