基于SSD的粮仓害虫检测研究

2020-06-09 07:22邓壮来宋雪桦王昌达吴立亚
计算机工程与应用 2020年11期
关键词:粮仓害虫损失

邓壮来,汪 盼,宋雪桦,王昌达,陈 娟,吴立亚

1.江苏大学 计算机科学与通信工程学院,江苏 镇江212013

2.江苏仅一联合智造有限公司,江苏 丹阳212300

1 引言

在粮食储藏过程中,虫害是造成粮食损失的重要原因之一。据调研,全国每年因为各类害虫造成的粮食损失约为总储粮的10%,损失金额超过20亿[1]。粮仓害虫检测是为了确保粮食储存安全状况的良好性,实现对粮仓害虫的科学处理,以便及早采取相应的杀虫措施,减少损失。

在早期,国内大部分粮仓主要采用人工取样[2]来检测害虫,具体的害虫类别需要根据专家经验判断。这种方法及时性差,且准确率低。

随着光学技术的发展,出现了基于光学原理支持下的粮仓害虫检测技术[3]。例如软X射线检测法[4]和近红外光谱法[5]等。但这些方法存在着设备成本高、仪器校准较为复杂和检测范围局限等问题。

2011 年后,深度学习进入了一个新的阶段,图像处理技术不断改进。越来越多的学者研究基于卷积神经网络(Convolutional Neural Network,CNN)的图像检测方法[6]。通过加深CNN,出现了R-CNN[7]、Fast-RCNN[8]、Faster-RCNN[9]、FPN[10]、RetinaNet[11]、SSD[12]和YOLO[13]等高效的目标检测方法。对于图像的几何变换、压缩、亮度差异,目标检测方法具有一定的不变性,克服了由于目标体积较小的问题带来的各种检测困难,能够泛化原始图像中的目标。

SSD 使用一个卷积网络完成目标检测。它将图像划分网格,通过对多个尺度的卷积特征图进行预测,检测不同尺寸的目标,同时包含小目标物体的检测。由于粮仓害虫检测大都属于小目标检测,因此本研究主要是优化SSD模型,通过训练模型使其适用于检测粮仓害虫。

2 SSD目标检测算法

在ECCV2016 上Liu Wei 提出了SSD(Single Shot MultiBox Detector)目标检测算法。从它的英文名可知,SSD 是一种单次检测(One-Stage)方法。它结合了YOLO的回归思想和Faster-RCNN中的Anchor boxes[14]机制,加入了RPN 网络的特征金字塔[15]的检测方式。SSD 对不同卷积层的特征图像执行滑动窗口扫描来检测多尺度的目标,能够检测出卷积层输出的特征图像中的小目标。

2.1 SSD模型结构

SSD模型的主干网络结构是VGG16[16],用卷积层替换最后2 个全连接层,然后添加4 个卷积层来构建网络结构,这些层的大小逐渐减小,实现多尺度目标检测。SSD网络结构如图1所示。

图1 SSD结构图

SSD 在Conv4_3、FC7、Conv6_2、Conv7_2、Conv8_2、Conv9_2 这组金字塔结构的特征层上进行目标边框的偏移以及不同类别得分的预测,并通过非极大值抑制算法[17](Non-Maximum Suppression,NMS)得到最终目标检测结果。

2.2 默认框的尺度计算

默认框在SSD 框架内指的是特征图的每个小格上一系列固定大小的框(box),每个特征图的默认框的大小计算如公式(1)所示:

其中,Lmin是最底层尺度,Lmax是最高层尺度,n 为特征图的个数,Li表示第i 个特征图的尺度。

SSD 模型采用了Anchors 机制,式(2)为默认框宽度,式(3)为高度:

2.3 损失函数

由于SSD 模型的主干网络仍是VGG16 结构,其结构类似传统卷积单元,网络结构在训练当中存在损失量,其损失函数包括位置损失函数与置信损失函数,这两个函数可以对网络结构进行评估。根据以上匹配策略,总体目标损失函数[18]是位置损失(loc)和置信损失(conf)的加权和,如式(4)所示:

其中,N 表示匹配的默认框的数量,当N 为0 时,则损耗为0。位置损失是预测框l 和真实标签值框g 参数之间的smoothL1损失,回归到中心为(cx;cy)和其宽度(w)高度(h)的默认边框d 的偏置,定义如式(5):

3 检测粮仓害虫的SSD模型

3.1 SSD结构的优化

检测粮仓害虫采用SSD300 模型,其主干部分是VGG16。因为粮仓害虫检测过程更注重小目标检测,需要改变原始SSD 模型的VGG16 网络。首先修改Conv1~Conv5 的网络宽度(number-out)的值,减少为原来的一半,然后去除Conv3_2、Conv4_2、Conv5_2、FC。VGG16 的特点是通过2×2 的卷积核和3×3 的池化核加深网络深度来提升性能,但同时增加了计算量,对于目标种类较少的训练时,适当减少卷积层数和网络尺度,能够提升训练的效果。网络6 个分支部分则改为Conv4_3、Conv5_3、Conv6_2、Conv7_2、Conv8_2、Conv9_2,优化后的SSD模型如图2所示。

图2 优化后的SSD网络

这6 个分支网络的作用是通过综合多层卷积特征图输出检测结果,并扩大所检测物体的尺度范围。如图3 所示,图3(a)为原始输入图像,害虫框标注对应图3(b)(8×8)中的实线框。

图3 害虫检测框架

3.2 损失函数的改变

原始SSD 模型中,损失函数使用smoothL1(x),N表示匹配成功的默认框数量,当N=0 时损耗将不存在。由于负默认框数量会远大于正默认框数量,导致网络会过于重视负样本。为了平衡训练样本,训练时根据置信度(confidience score)高低来排序默认框,并选择高置信度的框训练,以确保总的正负样本比率为1∶3。对粮仓害虫检测而言,原始的SSD分类损失函数会由于数据集中没有害虫的图片而直接将loss置为0,N=0 时会使得一部分图片没有被充分利用;在线将置信度进行排序的方法速度较慢。

本文通过优化原始SSD 的损失函数来解决上述问题。在准备害虫图片数据集时,计算出用于分类和回归任务的加权target[19],使模型训练过程更专注于分类难度高的样本。加权target 计算方式如下:

假设有k 个默认框,正样本数为n,负样本数为m,则k=n+m,设定用于分类的标签Label。

当n >0 时,则正样本分类的加权为:

当m >0,且设定正负样本比例为1∶3时,则负样本分类的加权为:

整个分类任务的加权为:

加入回归任务的权重系数为θ,回归任务的加权为:

4 实验

4.1 实验数据集

实验以粮仓高爆发的6 类害虫为主要研究对象,分别是米象(Sitophilus oryzae,So)、锈赤扁谷盗(Cryptolestes ferrugineus,Cf)、谷蠹(Rhizopertha dominica,Rd)、麦蛾(Sitotroga cerealella,Sc)、锯谷盗(Oryzaephilus surinamensis,Os)和赤拟谷盗(Tribolium castaneum,Tc)[20],如图4所示。

图4 粮仓高爆发的害虫

本实验采用的图像是将人工饲养的害虫进行拍摄得到的。为了增加检测的难度,模拟真实粮仓,在背景中加入了细碎的谷物。在拍摄多张照片同时随机选择一些图片作为测试集,其余的图片则作为训练集。

为了丰富训练集,准确提取图像特征,减小图像过度拟合,图像数据集通过翻转和颜色调整来进行数据增强。考虑到的光照变化和害虫的不同姿态,图像的颜色调整是通过随机调整饱和度、对比度、亮度和清晰度。经过增强处理后,虽然训练集的数量比原始训练集增加了1 倍,但仍需要剔除质量太差的图片。此外,为了提高训练和检测速度并且降低GPU 消耗,将原始图像分辨率降低,从而有力地提升网络的训练性能。经过这些处理之后,共选出600张图片作为训练集,180张图片作为测试集,最后采用labelImg 进行标记,标记名称为英文首字母缩写。

4.2 实验过程

本实验采用64位Linux(Ubuntu-16.04版本)系统计算机,计算机的CPU 为Intel®Core™i7-8700,6 核12 线程,基础频率为3.20 GHz,内存为16 GB。GPU 的型号为GeForce GTX 1080,显存为8 GB,采用cuda8.0 和cudnn6.0 辅助计算,在此基础上搭建Caffe 框架以及Python2.7的运行环境。

在原始SSD 模型中6 个预测分支分别对应的anchor 类别数为4,6,6,6,4,4,但是因为图片害虫大多为小目标,为了使小目标的检测率更高,将第一个分支的anchor 的种类由4 提高到6,即6,6,6,6,4,4,因此anchor 的总数量也由原来的8 732 提高到11 620,最后用非极大值抑制算法消除多余窗口。本实验的SSD 训练迭代次数为60 000次。

4.3 实验结果

精确度(Precision)、mAP 和AP(Average Precision,平均准确率)是衡量目标检测方法的主要参数。其中精确度是指在被判断为准确的图片中,真正判断准确的害虫的比例。精确度、AP 和mAP 的计算公式如式(15)~(17)。

将本文的SSD 与原始SSD 进行在相同数据集中进行对比实验,6类害虫AP值如图5所示。

图5 粮仓害虫AP的检测结果

从图5 中发现本文的SSD 方法AP 值在74%~89%之间,而原始SSD 方法的AP 值在72%~86%之间,尽管不是每类虫的AP 值都高于原始SSD,但总体来说本文的SSD 方法检测性能是优于原始SSD 方法的。另外,因为麦蛾(Sc)目标体积远大于其他5 类害虫,所以AP值也比较高。

在相同迭代次数的前提下,将本文的SSD 方法与Faster-RCNN、原始SSD 以及YOLO 在训练时间、mAP和平均检测时间上进行了对比,这4种方法均使用相同的数据集进行实验。

从表1可以看出,本文的SSD的mAP是78.5%,Faster-RCNN 的mAP 是75.3%,原始SSD 的mAP 是76.7%,YOLO 的mAP 是70.4%。在对相同害虫图像进行检测时,优化过的SSD 模型的mAP 比基于Faster-RCNN 模型、原始SSD 模型和基于YOLO 模型高;并且本文的SSD 模型比另外3 个模型的训练时间和平均检测时间都要短。

表1 害虫检测方法结果对比

此外,这4种方法训练迭代60 000次的训练损失曲线如图6所示。

图6 训练过程的损失函数曲线

从图6可知,本文的SSD方法在迭代到10 000次之前,训练损失下降速度明显快于其他方法,10 000 次之后训练损失曲线逐渐趋于平滑,4种方法差距不大。

图7 为不同种类害虫的检测结果,从图7(a)和(b)中可以看出,害虫都能被检测到;从图7(c)和(d)中可以看出,绝大多数害虫都能被检测,少量害虫出现了漏检的情况,原因是害虫的头数较多,密度较大,甚至出现重叠;图7(e)为目标较大的麦蛾(Sc)检测结果,得到置信度较高。图8 为不同光照下的害虫检测结果,对比图8(a)和(b),光照较亮的害虫比较暗的害虫检测得到的置信度更高。图9是不同姿态的害虫检测结果,图中不同姿态的害虫检测得到的置信度也不同。

5 结束语

为了减少粮食损失,本文针对粮仓中6类高爆发的害虫提出了一种基于SSD 的粮仓害虫检测方法。该方法是在原始SSD 模型上进行轻量化处理,加快模型收敛速度。另外对损失函数进行优化,从而平衡了正负样本数量,提高了训练效率。实验表明:本文提出的SSD 检测模型能够较好地实现粮仓害虫检测,并提高了鲁棒性。

图7 粮仓害虫检测结果

图8 不同光照下的害虫检测结果

图9 不同姿态的害虫检测结果

猜你喜欢
粮仓害虫损失
好粮仓就是硬底气
撂荒地变粮仓 有机种植出效益
蜗牛一觉能睡多久?
胖胖损失了多少元
冬季果树常见蛀干害虫的防治
粮仓
玉米抽穗前倒伏怎么办?怎么减少损失?
枣树害虫的无公害防治
树懒的粮仓
农业害虫的冬季防治