APP下载

一种基于改进的YOLOv3算法在粮虫小目标检测的应用

2021-11-16吕宗旺金会芳孙福艳桂崇文

中国粮油学报 2021年10期
关键词:虫子损失聚类

吕宗旺 金会芳 甄 彤 孙福艳 桂崇文

(河南工业大学信息科学与工程学院1,郑州 450001) (粮食信息处理与控制教育部重点实验室2,郑州 450001)

随着科学技术的发展,粮食产量得到了很大的提高,储粮的数量也与日俱增。由于储粮量的增大,如何在储粮过程中减少粮食的损失变的越来越重要[1]。粮食霉变、虫蚀和生芽是影响粮食数量和质量的重要因素,其中虫蚀不仅会造成粮食数量减少,而且啃食之后的粮食会产生霉变从而影响粮食的质量[2]。因此高效、精准的检测粮仓害虫的种类和数量成为一项重要的任务。随着技术的进步,粮虫检测由传统的人工法、诱捕法[3],逐渐发展成声检测[4]、图像识别、生物光子检测和深度学习图像处理。传统的粮虫图像识别的方法针对不同的粮虫单独设计其特征,送入分类器最终确定粮虫种类。基于深度学习图像处理技术避免了手工设计特征的繁琐过程,能够自动学习粮虫特征,具有速度快、精度高等优点,逐渐成为研究热点。

经典的目标检测算法在粮虫检测的应用包括双阶段和单阶段两大方向。双阶段中以Faster R-CNN和R-FCN为代表,包括region proposal和class两个阶段,特点是精度较高、运算速度较慢、训练起来相对困难[5-8]。单阶段的目标检测以YOLO和SSD为代表,region proposal和class同时进行,特点是运算速度较快,效率高,但精度相对较差。由于粮虫小目标的特性,两阶段的目标检测算法的研究内容主要包括更换特征提取网络,例如将结构简单的VGG-16更换为可以提取更加复杂特征 ResNet50、ResNet101、Inception或DenseNet[9-12];将原本的NMS算成Soft-NMS、更改或删除网络结构、进行特征融合等方面。单阶段的YOLO和SSD目标检测算法大多应用在农田害虫检测上,在小目标多姿态的粮仓害虫的应用较少[13]。

本研究基于经典目标检测算法YOLOv3,使用自制的粮仓害虫数据集,针对米象/玉米象、赤拟谷盗、谷蠹、锈赤扁谷盗和印度谷螟五种小麦常见的害虫设计了一个检测算法。为了提升检测效果应用K-means聚类算法[14]聚类出适合的预选框,弥补原本预选框在粮仓害虫小目标检测不准确问题;将GIoU替代原模型中的IoU应用到算法,同时优化损失函数进行实验,检测效果得到了很大的提升。

图1 YOLOv3网络

1 经典YOLOv3算法

YOLOv3算法在2018年提出,在YOLO和YOLOv2基础上进行了优化,不仅保证了检测速度而且使用了比YOLOv2更深的网络提高了检测精度[15,16]。在YOLOv3中,输入的图片大小为416×416,采用了多尺度预测的思想,对3种大小不同的特征图进行预测,分别为32倍下采样的13×13的特征图、16倍下采样的26×26的特征图和8倍下采样的52×52的特征图;针对不同大小的特征图,每种特征图分别有3个不同anchors,在特征图上根据各自的anchors,生成目标框以及相应的confs和probs[17]。如图1所示,YOLOv3采用darknet-53作为基础网络提取特征,采用上采样技术将深层特征图和浅层特征图进行concat融合,融合之后的特征图拥有更加丰富的语义信息;之后通过DBL模块和卷积之后,将预测结果输出。

在训练过程中,YOLOv3对每个特征图计算损失,损失主要包括boxes损失(中心坐标损失和宽高坐标损失)、置信度损失和分类损失。其中中心坐标损失为式(1)所示,首先将网络输出的tx和ty乘以步长映射到原图416×416上的目标,计算方法如式(2)所示,即若当第i个网络的第j个anchor box负责某个真实目标时,计算该anchor box所产生的bounding box与真实目标的box比较,得到中心坐标误差;宽高坐标损失为式(3)所示,首先将网络输出的bw和bh映射到原图上的目标如式(4)所示,即若第i个网络的第j个anchor box负责某个真实目标时,计算该anchor box所产生的bounding box与真实目标的box比较,得到宽高坐标误差;置信度损失部分如式(5)所示,首先将正样本和负样本进行分离,分离的依据是计算boxes和ground truth的IoU,将IoU小于0.5的boxes判定为负样本,其他的判定为正样本,分别计算正负样本的损失值,其中负样本贡献的权重λnoobj=0.5,最后计算正负损失值的平均交叉熵作为置信度损失;分类损失部分如式(6)所示,只有正样本才会计算分类损失。darknet-53中没有pooling层使用conv的stride来实现下采样,整个网络中全部使用stride=2卷积代替pooling操作;使用残差思想增加了shortcut connection结构,使网络增加对小目标检测效果,有效防止了过拟合同时也降低了池化带来的梯度负面效果。

(1)

bx=σ(tx)+cx,by=σ(ty)+cy

(2)

(3)

bw=awetw,bh=aheth

(4)

(5)

(6)

2 算法优化

根据YOLOv3算法的原理,为了解决YOLOv3对小目标检测不敏感、精度差等问题,采用K-means算法对自制数据集进行聚类分析,得到适应训练集的聚类数据。然后根据GIoU的特点,将其引用到YOLOv3的算法中,以提升小目标的检测效果。

2.1 K-means算法

K-means聚类是目标检测算法获取适合自己数据集anchors的常见手段,使用各ground truth与初始聚类box的IoU作为距离度量进行迭代计算,计算方式如式(7)所示,最后得到所需的K个初始聚类anchors。具体步骤如下:首先初始化聚类中心,即从N(N为ground truth的总个数)个ground truth随机选K个,然后计算每个ground truth和K个anchor的距离,用1-IoU来表示;对于每个ground truth,选取距离最小的anchor,并存下其索引;每次迭代之后更新anchors与所有ground truth框的距离均值和每个ground truth距离最近的Anchor索引;如果当前索引和上次一样,则聚类结束。

dJ(b1,b2)=1-J(b1,b2)

(7)

2.2 GIoU算法引用

经典的YOLOv3算法中,使用IoU作为度量判别正负样本,并根据此依据计算置信度损失。IoU 具有尺度不变性,可以有效比较两个任意形状之间的相似性。根据图2的计算原理,如果A、B两个框之间没有重叠时,则IoU为0并且无法判断A、B两个框之间的距离[18]。基于上述原因,GIoU作为IoU的升级版诞生了,既继承了IoU的优点,又弥补了IoU无法衡量无重叠框之间距离的缺点[19,20]。

图2 IoU的计算原理

计算方式如式(8)所示,在IoU的基础上寻找一个最小闭包面积Ac(同时包含了预测框和真实框的最小框的面积)再计算出IoU,接着计算闭包区域中不属于两个框的区域占闭包区域的比重,最后再用IoU减去这个比重得到GIoU。式(8)中U为两个框的Union,|Ac-U|即为整个闭包区域中不属于两个框的区域。根据GIoU的计算原理可知,两个框之间的距离越远,Ac越大,|Ac-U|所占的比重越大,GIoU越小,可以准确的衡量两个不重叠的框之间的距离。GIoU是IoU的下界,取值范围[-1,1],当两个框无限重合的情况下,GIoU=loU=1,当两者无交集且无限远时取最小值-1。如图3所示GIoU可以更好的度量两个框的重合度以及重合的方式。

(8)

当GIoU应用到YOLOv3算法中作为两个框之间的距离度量时[21],其损失函数为:LGloU=1-GIoU,其损失函数变为三部分,GIoU损失、置信度损失和分类损失。

图3 IoU和GIoU的重合度计算对比

3 数据集制作及检验标准

3.1 数据集的制作

实验数据集为自制,包括小麦中5种常见的害虫,有玉米象(mxymx)、赤拟谷盗(xngd)、谷蠹(gudu)、锈赤扁谷盗(xcbgd)和印度谷螟(ydgm),如图4所示。采集图像时,使用活体成虫进行拍摄,由于活体虫子较为活泼,可以保证采集样本的多样性。采用拍视频的方式,后期使用软件截图完成数据集图片的制作[22]。合计采集1 998张图像,每幅图像大小为640×480,每幅图像有3~10只虫子,且每幅图片只有一种虫子。

3.2 数据增强数据集

采用5种目标检测常见的数据增强手段,对原版数据集进行增强,分别为调整亮度,加噪、水平翻转、垂直翻转和缩放,5种增强方式效果分别如下图5所示。最终生成9 990数据集,其中训练集大小为7 192,验证集为1 799,测试集为999。

3.3 性能评价指标

采用精确率(Precision)、召回率(Recall)、AP(average precision)以及平均准确率mAP(mean Average Precision)和FPS(Frame Per Second)来衡量模型的好坏。所有指标都是数值取值越大,代表检测性能越好。

FPS代表检测速度,数值越大,代表检测速度越快。其中Precision和Recall的计算如式(9)所示。

图4 数据集的虫子样本

图5 数据增强方法

(9)

其中TP为被正确划分为正样本的正样本个数(True positive),FP为被错误划分为正样本的负样本个数(False positive),all detectioons=TP+FP;FN为被错误划分为负样本的正样本数量(False negative),all ground truthes=FN+TP。

4 实验结果

实验环境硬件配置:Intel i7-10750H处理器,RTX2060显卡。软件环境配置:Windows10系统,CUDA,OpenCV,tensorflow框架,主要超参数的设置如表1所示。

表1 通用超参数设置

4.1 原始YOLOv3检测效果

数据集主要包括两个拍摄尺寸的粮虫图片分别如图6和图7所示。原始YOLOv3的检测结果mAP如表2所示。

图6 小尺寸粮虫

图7 大尺寸粮虫

表2 数据集1 998的mAP

4.2 K-means算法引用的结果

使用K-means算法对于所有粮虫进行聚类,聚类之后的先验框结果如表3所示。

表3 聚类之后的先验框

使用K-means聚类算法前后的mAP结果对比如表4所示,使用聚类算法之后,YOLOv3的检测mAP相比于之前提升了10.04%。

表4 数据集1 998和+K-means前后mAP对比

4.3 GIoU算法引用之后的结果

在4.2实验基础上,引用GIoU算法优化模型并进行相应的实验,结果如表5所示,mAP达到了97.19%相比4.2节提升了9.57%,同时检测速度为25帧/s依然能够达到实时的效果。

表5 GIoU算法的mAP

如图8和9所示,方框中为优化后的模型检测结果,从结果来看对于粮虫的漏检、错检以及由于粮虫抱团、遮挡造成的漏检错检情况都有较好的改善。

图8 优化前后对比图

图9 优化前后对比图

4.4 基于数据增强数据集的实验结果对比

表6为基于数据增强后的数据集的实验结果,根据结果来看,基于数据增强数据集训练的YOLOv3 mAP由87.62%提升至91.93%,增加了GIoU算法的YOLOv3相比未优化的YOLOv3,mAP提升至99.43%,实验证明,优化后的YOLOv3性能有了很大的提升。图10为999张测试集的检测结果。

表6 基于数据增强数据集优化前后mAP对比

图10 测试集检测结果

4.5 单张含多种虫子的验证试验

由于实际使用中,采集的图片存在单张图片多种粮虫的情况,故手动拼了20张图片进行验证。在测试集中均匀采集了20张图片,每种虫子4张,将每张图片切分为4块,然后4张图片组合成4张混合的图片每种虫子的个数如下图11左所示,测试结果如下图11右所示。根据结果来看,含多种虫子的图片确实存在检测种类错误的情况。

图11 单张含多种虫子的结果

5 结论

针对小目标粮虫的检测问题以及原始YOLOv3模型对于小目标检测时表征能力和检测效率两方面的不足,提出了一种融合GIoU算法的YOLOv3检测模型。一方面使用GIoU算法弥补IoU算法对于不相交box无法量化的问题,同时使用GIoU优化损失函数;另一方面使用数据增强手段对拍摄的数据集进行增强,使数据集由1 998变为9 990,并K-means聚类算法对自制数据集进行聚类分析,聚类出符合粮虫小目标检测的先验框。针对自制的1 998张粮虫的数据集进行实验获得了mAP 97.16%和每幅图像0.040 s的检测速度;针对9 990张增强的数据集,mAP达到99.43%,实验表明本文提出YOLOv3算法针对小目标粮虫的检测效果有很大的提升。本研究的数据集采用的单张图片一种虫子的形式,实际应用中拍摄的图片中单张含多种虫子,根据4.5的验证结果来看,实际应用中识别的精度会有一定程度的降低,所以在后续的研究中会在数据集中增加单张含多种虫子的图片进行训练,以提升识别精度。

猜你喜欢

虫子损失聚类
住在砖底下的虫子
胖胖损失了多少元
虫子的信
幸福的虫子
基于K-means聚类的车-地无线通信场强研究
玉米抽穗前倒伏怎么办?怎么减少损失?
基于高斯混合聚类的阵列干涉SAR三维成像
请不要随意捉虫子!
基于Spark平台的K-means聚类算法改进及并行化实现
一般自由碰撞的最大动能损失