基于改进YOLOV3的蝴蝶生长阶段检测
2021-05-17付珍艳纪超群徐连杰
宋 宇, 付珍艳, 纪超群, 徐连杰
(长春工业大学 计算机科学与工程学院, 吉林 长春 130012)
0 引 言
随着计算机性能的不断提高和卷积神经网络的应用,基于深度学习的目标检测算法不断被完善,从最初的一种基于CNN的目标检测框架Over Feat到深度学习检测模型R-CNN[1],再到进一步地改进 R-CNN 的网络结构,提出了 Fast-RCNN和Faster-RCNN,其已达到高检测精度。但Fast-RCNN[2]和Faster-RCNN[3]是基于区域建议提取目标候选区域的两步检测网络(two-stage),检测速度不能达到实时性,进而又提出基于回归思想的单步检测模型(one-stage)来提高检测速度,如SSD[4]和YOLO[5]系列YOLOV1、YOLOV2[6]、YOLOV3[7]。短短几年时间,基于深度学习的目标检测被广泛应用在汽车、交通领域,如公路上的车牌识别,自动驾驶可进行行人、来往车辆、红绿灯的识别;其次在航空航天方面,可利用该技术侦测行星、陨石、太空垃圾等;在医疗领域方面可用于细胞的病变、是否细菌感染以及病毒的检测;常见的视频、摄像功能,如在日常生活中经常接触的拍照时可能用到的人脸识别、物体检测等功能,手写字体识别、手机的面部识别登入系统、百度的“以图搜图”等多种新颖又实用的技术都是以目标检测技术为基础的;还有在消费电子领域,目标检测技术应用于体感游戏,可以让系统读取到玩家体型信息,再识别出玩家的攻击、跳跃等一系列的动作等。目前,专门应用于蝴蝶生长过程检测的相关算法研究较少,文中研究了相关的目标检测算法,发现大多数通用目标检测算法都可以适用于蝴蝶生长过程的检测任务,但是由于自然界复杂场景下存在种类众多和小尺度目标检测等问题,导致如果将通用目标检测算法直接应用于蝴蝶生长过程检测任务,效果并不理想。
文中对 YOLOV3 进行改进,应用于蝴蝶生长过程检测研究领域。标记蝴蝶生长阶段的形态,从卵、幼虫、蛹到蝴蝶,在自己制作的数据样本中训练模型,将训练得到的模型用于测试集进行测试,测试结果显示,能检测出蝴蝶的各个生长过程,具有较高的准确性和实时性。目的是为了保证蝴蝶的生产数量,维持自然界的生态平衡。
1 YOLOV3算法
You Only Look Once(YOLO)最初是由Redmon J等[5]提出的one-stage算法,仅使用一个CNN网络训练预测不同目标的class和位置,简单化实现了end到end的目标检测网络。在2017-2018年,Redmon J等[7]在 YOLO 的基础上,继续改进并提出YOLOV2与 YOLOV3算法,增强了检测精度,缩短了检测时间,并且在数据集上的 mAP 率大幅度提高。
YOLOV3是以YOLOV2的darknet-19框架结构为基础发展到 darknet-53[8]。darknet-53包含53个卷积层和5个残差块[9],在每一卷积层后设置批量归一化操作,避免了过拟合现象的发生。YOLOV3网络结构[10]如图1所示。
由图1可知,整个网络使用了全卷积层,3×3和1×1两种类型是YOLOV3的主要卷积尺寸,1×1可以通过改变channel的通道数目,以及作为bottlenet层,从而有效降低网络的参数量,加快网络的训练和收敛。采用三种先验框 13×13、26×26、52×52,可在特征图上进行不同尺度的检测,提高了小尺度目标检测识别的能力。
YOLOV3先将输入的图片缩放到一定大小,然后划分为N×N个单元格,每个单元格负责预测K个物体检测框,每个物体检测框包括5个参数,即(x,y,w,h,Cr)。其中(x,y)是物体检测框的中心坐标,w和h分别是物体检测边框的宽和高。Cr(置信度)由物体检测框和真实框的IOU(交并比)以及检测框中是否含有检测目标共同决定。置信度计算公式为
(1)
式中:p(object)----单元格中是否包含检测目标的概率,当p=1时,说明单元格中有既定目标,反之则说明没有;
通过设定阈值T,除去置信度低于T的边界框,保留置信度较高的边界框。YOLOV3 算法通过K-Means聚类算法聚类9个不同尺寸固定大小的锚框anchor。把9个锚框按照大小分别分配给3个不同尺度,3个不同尺度的输出包括目标的坐标位置、目标是正样本还是负样本,以及目标属于哪个类别的Cr。对于3个不同尺度的分支而言,在每个网格中会预测出3个结果(因为每个尺度下会有3个锚框anchor),最终将3个尺度的结果合并进行非极大值抑制后,输出最终检测结果。
2 YOlOV3算法的改进
2.1 目标框聚类分析
先使用欧几里得距离对样本点和质心的距离计算,接着将离一个质心最近样本点规划其中,这种度量样本间的相似性进行聚类就是K-means[12]。在候选框聚类过程中,若使用欧几里得距离的标准k均值,则较大边界框(box)会比较小边界框产生更多的误差。真正想要选择的样本间距离度量(D)应该与box本身大小无关,因此,计算两个box的IOU,即2个box的相似程度,计算公式为
D(box1,box_cluster)=
1-IOU(box1,box_cluster),
(2)
式中:box1----真实框的集合;
box_cluster----边界框簇中心集合。
距离越小,IOU越大,说明box1与box_cluster越类似,将box划归为box_cluster。对于给定的box1,计算box1与Box_cluster的交集与并集的比值来度量D的大小,避免box自身大小所带来的误差。首先将数据集分为k个cluster,不断更新使得cluster内的边框距离尽可能小,而cluster间尽量大,然后通过目标函数变化值确定候选框的尺寸大小。
图1 YOLOV3网络结构
原YOLOV3是对VOC 数据集上的K-means聚类方法来生成9个锚框anchor,3个不同尺寸的特征图分别对应3个锚框,用来检测大、中、小尺寸的目标。并非专门针对蝴蝶生长过程设计。而文中所需检测的是蝴蝶的生长过程,采用的是自制蝴蝶的数据集,属于特殊目标检测,所以需要重新进行聚类。通过数据集标注的有遮挡和无遮挡的目标框尺寸大小对其进行聚类分析,得到效果更好的先验框 anchor 参数[13],提高检测效果。
2.2 网络结构的改进
YOLOV3的主干特征提取网络Darknet53借鉴了ResNet的残差思想[14],先进行一次3×3,步长为2的卷积,接着进行1×1的卷积,减少通道数目,再进行一次3×3的卷积加强特征提取,扩张通道数目,最后通过残差结构。如果检测目标是单个物体,其参数多,数据量需求大,过于复杂和多余,检测速度慢。文中针对这一问题,提出一种改进的网络结构,网络在过渡模块中使用卷积核进一步降低维数。为了提高目标检测精确率和提升更深层网络特征的细粒度,可以通过在浅层网络中增加卷积层和残差连接结构数量,以及网络使用step=2的卷积层代替池化层来完成。对原YOLOV3的特征网络结构进行改进[15-16],见表1。
表1 改进YOLOV3的特征提取网络
改进YOLOV3的特征提取网络为解决梯度消失的问题采用层连接方式,传递特征的方式得到了强化,参数数量减少,大幅减少了计算量。增加1×1和3×3卷积核使网络结构的信息表达更丰富。在昆虫生长发育过程的检测过程中发现,13×13的特征分辨率易造成小目标丢失。因此删除了13×13的特征分辨率模块,取而代之的是104×104的特征分辨率模块,减少感受野,提高对小目标的检测。
3 实验过程及分析
3.1 数据采集
利用改进的YOLOV3对样本数据集进行训练,如果数据集的数量不够,将直接影响训练的好坏。目前还没有基于昆虫生长过程的图片数据库,因此,首先向一些有过此类研究专业的学生和老师收集图片,又从百度图库中进行网络爬虫和昆虫生长过程的视频中提取得到图片。蝴蝶生长的每个状态收集了3 000张图片,然后进行标注,形成自己的数据集。对蝴蝶生长过程的自动检测识别能够为生态环境监测、生物多样性保护等领域提供技术支持,减少对专家人工鉴定的依赖。
3.2 图像标注
手动对收集到的图片进行标注。文中使用专门的标注工具Labelimg对图片进行标注。打开labelimg点击open,导入所需要标注的图片,点击create RectBox选项,用矩形标注框选取所需要的工件图像,并对标注框进行自定义命名。完成后会生成.xml格式文件。生成的文件内容包括:工件图像所在磁盘位置,标注框坐标,标注框长度和高度,以及标注框的自定义类别信息。
蝴蝶生长过程标注如图2所示。
(a) 卵标注 (b) 幼虫标注 (c) 蛹标注 (d) 蝴蝶标注
3.3 实验环境
文中算法是在Pycharm2018下使用python3.6进行编程,搭建 TensorFlow-Keras框架,然后进行算法的训练和测试。在 PC 机上进行了实验,机器配置为Ubantu16.04操作系统、Intel(R) Core(TM)i7-10750H处理器、NVIDIA GTX1080Ti独立显卡、11 G显存、16 G内存。时长为24 h。实验环境配置见表2。
表2 实验环境配置
3.4 实验过程及配置参数调整
文中所用的算法运行环境是Keras,样本训练共进行12 000次迭代,以 10 000张蝴蝶生长图像为训练集,5 000张做测试集,其中批量大小设置为bactch=64,修改类别数目的值,本次实验检测了4种类别,故class=4,修改输出特征图的数量 filter ,计算公式为
filter=(class+5)×3,
(3)
初始阶段将学习率设置为lr=0.001,衰减值为0.000 5,在迭代次数为8 000次后,损失值Loss稳定在0.381左右,迭代至10 000次停止。损失值Loss随迭代次数变化,如图3所示。
图3 改进后YOLO的Loss曲线
3.5 评价指标
采用Precision(精确率)、Recall(召回率)和times(每张检测时间)作为模型检测好坏的评价标准。精确率是已识别为蝴蝶生长发育过程的概率,召回率是能够正确识别蝴蝶生长发育过程的概率。
(4)
(5)
式中:TP----检测模型将蝴蝶生长过程检测正确;
FP----检测模型将蝴蝶生长过程检测错误;
FN----检测错误的数量。
3.6 实验结果
使用文中训练数据集,同时训练了Faster-RCNN、SSD、YOLOV3模型,测试集5 000幅图片中有 2 000个里面含有检测目标,不同算法测试对比见表3。
表3 不同算法测试对比
通过对比可以看到,在时间上,Faster-RCNN的检测时间最慢,为2.560 s,SSD算法的检测时间为0.189 s,原YOLOV3的检测时间为0.039 s,文中算法的检测时间为0.041 s,相比原YOLOV3的检测时间慢了0.002 s,但比SSD和Faster-RCNN分别快了0.148 s和2.519 s,能够满足实时性要求。文中算法的精确率达到了95.4%,相比未改进的YOLOV3提高了1.1%,比SSD提高了1.6%,比Faster-RCNN提高了0.1%;在召回率方面,Faster-RCNN的召回率为93.5%,SSD的召回率为92.7%,原YOLOV3的召回率为93.15%,文中改进YOLOV3的召回率均比其他算法略高,在实际应用中,能够准确实时检测出蝴蝶的生长过程,满足要求。改进算法测试结果如图4所示。
图4 改进算法检测结果
4 结 语
基于改进的YOLOV3 目标检测算法实现了蝴蝶各生长阶段的实时检测功能。实验结果表明,进行改进后的YOLOV3在蝴蝶生长过程检测中与原YOLOV3、Faster-RCNN、SSD相比较,精确率和召回率都有提高,检测效果更好。在5 000张测试集图片上进行测试,达到95%以上的精确率。研究结果表明,使用改进的YOLOV3对蝴蝶生长过程检测切实可行,能够及时观察蝴蝶的生长阶段,及时发现是否健康,是否面临危险,提高蝴蝶成活率,为以后运用到生物领域打下基础。