基于深度学习的蝴蝶识别研究与实现

2023-12-05 08:14焱,杨
现代计算机 2023年18期
关键词:置信度蝴蝶阈值

顾 焱,杨 凯

(西京学院计算机学院,西安 710000)

0 引言

科技的进步让人们发现蝴蝶的数量可以反映生态水平的变化,国外学者帕梅森发现蝴蝶数量的下降反映了全球变暖,因此,通过对蝴蝶的检测可以体现一个地区的生态水平和变化。蝴蝶是人类日常生活环境中比较常见的物种,维护蝴蝶的多样性,对蝴蝶的识别研究也逐渐成为人们关注的热点[1]。蝴蝶是节肢动物门、昆虫纲、鳞翅目、锤角亚目动物的统称。蝴蝶一般色彩鲜艳,身上有较多条纹,色彩较丰富,所以蝴蝶是属于昆虫中种类比较繁多的一种,有很大的识别难度[1]。因此,针对蝴蝶种类繁多、难以识别的问题,如何利用先进的计算机技术和深度学习技术提高对蝴蝶的识别性能具有重要意义和社会价值。

现今,国家大力发展高新技术产业,计算机的相关算力、算法飞速提升,尤其是AI 技术的跨越式进步,深度学习在生物信息、机器翻译以及目标检测等领域获得了巨大成功。当前,基于深度学习的目标检测算法可以分为两个类别。其一是把生成的anchor框映射到feature map然后将该区域重新输入到全连接层进行分类和回归。这类检测算法主要分为两步,第一步产生region proposals,然后对其进行分类,一般还需要对位置精修,这一类的典型代表是RCNN家族。它们的精确率和召回率比较高,但效率低,满足不了一些比较复杂的场景。另一个类别中生成的anchor 框只是一个逻辑结构,只会对这个逻辑结构进行分类和回归。这类算法直接产生物体的类别概率和位置坐标值,因此有着更快的检测速度,比较典型的算法如YOLOv5算法和SSD算法,其中YOLOv5算法很好地解决了两阶段算法中识别速度慢的问题,并且在识别速度和精度上都有着很不错的效果。因此,本次设计将使用基于深度学习的YOLOv5 目标检测算法实现对生态照片中蝴蝶的识别[2]。

此外,蝴蝶图像识别技术在农业发展、病虫害防治、保护物种多样性等方面具有十分重要的意义[3]。且使用的基于深度学习的YOLO 检测算法成本低,效率高、普适性强,具有很大的发展潜力。因此,研究基于深度学习的蝴蝶图像自动识别方法在许多场景中具有十分重要的应用价值,有很广阔的应用前景。

1 相关理论基础与技术

PyTorch 是Facebook 人工智能研究院(FAIR)团队在GitHub 上开源的一种深度学习框架,是目前比较少有的高效率以及能在CPU 和GPU 运行框架并解决各类深度学习问题的深度学习框架,PyTorch 的速度优于一些比较常见的深度学习框架,有着令人满意的效果。在使用方面,PyTorch 继承了Torch 的衣钵,其设计最符合人们的思维,因此本设计将采用PyTorch 作为开发系统的深度学习框架。

1.1 YOLOv5算法简介

YOLOv5 的网络结构如图1 所示,由主干网络Backbone、Neck、Head 组成。其中Backbone主要由CBL、Bottleneck CSP/C3 以及SPP/SPPF等组成。而在Backbone 和Head 之间,通常会添加一些用于收集不同阶段特征图的网络层,这就是Neck,Neck 的网络结构设计沿用了FPN+PAN 的结构,主要由CBS、Upsample、Concat和不带shortcut 的CSP 组成[3]。而Head 主要用于最终检测部分。

图1 YOLOv5网络结构

1.2 YOLOv5算法基本理论

首先对于输入数据,用Focus模块将计算图长宽变为原先的1/4,channel 数量乘4,再利用CSP 结构将原输入分成两个分支,分别进行卷积操作使得通道数减半,为了能够更好地对网络提取的特征进行融合,然后用max pooling下采样构建特征金字塔,再对下采样产生的feature map 上采样,与backbone 相应的层融合。继而用detect 层预测anchors,接着计算bbox 和当前层anchor 的宽高比,如果宽高比大于设定的阈值,则该anchor 与bbox 不匹配,丢弃该bbox,认为其为负样本。最后是计算损失函数,总体还是分为两部分:类别损失(见式(1)和式(2))和定位损失(见式(3)和式(4)),对于定位损失,即w、h、x、y的loss,采用了GIOU-loss。

式(2)中,N表示类别总个数;xi为当前类别预测值;yi为经过激活函数后得到的当前类别的概率;y*i则为当前类别的真实值(0 或1);Lclass为分类损失。

式(3)和(4)中,LGIOU为定位损失;Bgt为预测框;B为真实框;C为能同时框住真实框和预测框的最小框。

GIOU中,真实框与预测框的距离越远,C的值也越大,C减去预测框与真实框的面积值也越大,最后趋近于1。

2 总体分析与设计

2.1 蝴蝶检测算法流程分析

基于YOLOv5 算法的蝴蝶检测实现主要分为以下三步来完成:

第一步:采集不同场景的蝴蝶图片样本,使用labelme 标注后作为本项目的训练集和测试集。

第二步:YOLOv5蝴蝶检测模型的训练,主要流程是加载数据集、构建模型、绘制模型、加载预训练模型、计算损失函数,经过几百轮训练之后,得到最好的YOLOv5蝴蝶检测模型。

第三步:进行预测。加载提前收集好的测试数据集,验证YOLOv5 蝴蝶检测模型的效果,对效果进行评估。

2.2 项目可视化

为了本次项目的检测结果能更加直观地和原图进行比较,本项目为算法设计了一个展示场景,以突出本项目所使用算法的检测效果和检测速度,如图2所示。

图2 可视化场景

3 功能实现及测试分析

3.1 数据集的选择及数据标注

网上拥有现成的数据集,为了训练更加精确的模型,要求数据集的种类和数量尽量丰富,以达到项目要求,并且收集的数据范围主要是在野外环境中的蝴蝶图片,然后使用labelme 进行数据集的标注。首先点击文件,选择打开数据集。如图3 所示。 接着单击右键,选择矩形框,框住图像中的蝴蝶,再添加标签,点击保存,形成一个json文件,完成标注。

图3 用labelme打开数据集

3.2 算法工作流程

图4 所示为算法工作的流程。主要分为两个部分:模型训练和模型检测,模型训练主要分为加载数据、构建网络模型、加载预训练模型、计算损失函数;模型检测则是使用训练好的模型进行预测,主要步骤为加载数据、构建网络模型、加载训练好的模型,然后进行预测。

图4 算法工作流程图

3.3 环境配置及测试场景

本项目使用的Python版本为3.9.7,PyCharm版本为2021.3,PyTorch 的版本为1.8.1,conda的版本为4.12.0,numpy的版本为1.24.1,pandas的版本为1.3.4,tensorflow 的版本为2.11.0,直接到相应的官网下载安装即可。本次测试使用的CPU为AMD的R7 5800H。

3.4 评估指标

精确率、召回率是广泛用于目标检测领域的度量值,用来评价结果的准确性,其中精确率是针对预测结果而言的,它表示的是预测为正的样本中有多少是真正的正样本,衡量的是系统的查准率;召回率是指提取的正确信息条数在总的样本信息条数中所占的比例[4]。

3.5 蝴蝶检测识别效果

由图5 可知,该检测算法在图像背景较为简单的情况下的准确率为0.93,而如图6所示的环境背景极为复杂的检测场景,可以看到蝴蝶已经融于环境中,在肉眼分辨不易的情况下达到0.87 的准确率还是较为困难的,由这两种不同场景的检测效果可以得出,本项目的检测效果比较令人满意。

图5 简单场景下的原图及检测效果图

图6 复杂场景下的原图及检测效果图

3.6 蝴蝶识别性能评估

提前准备标注好的数据集,然后用PyTorch框架搭建的YOLOv5 模型根据数据集进行训练和测试,接着根据结果去做评定。

从图7(a)可知,当置信度阈值到达0.65 左右时,精确率达到峰值且趋于稳定;从图7(b)中可以看出,当召回率在0~0.89 时,精确率保持峰值为1,当召回率超过0.93时,精确率骤降为0;从图7(c)可知,置信度阈值在0.5 之前召回率稳定在0.9 左右,置信度阈值超过0.5,召回率开始下降,在0.9 左右开始骤降至0。从上面的几张图可以发现,置信度阈值和精确率是成正比的,召回率在0.9左右时精确度最高,而置信度阈值越高,召回率是逐渐降低的,因此,选择合适的置信度阈值可以将模型总的精确率保持在0.93左右。

图7 置信度-精确率-召回率曲线

3.7 实验比较

为了比较本文所提方法与现有算法的性能,使用Mask RCNN、SSD 算法对同数据集下训练后的检测结果进行对比。对比结果如图8所示。

图8 实验结果对比

从图8 可以看出,YOLOv5 算法的检测准确率明显高于Mask RCNN 算法和SSD 算法的检测准确率,证明了本文方法的优越性。

4 结语

本文选择了YOLOv5 算法对蝴蝶进行定位检测,并通过用labelme 标注的数据集完成了模型的训练,再利用Qt Designer 和PyQt5 完成了功能可视化界面,然后使用训练好的模型进行预测,最后对预测结果进行了评估,完成了基于深度学习的蝴蝶识别研究与实现。在今后的研究中,我们将会把重点放在改进数据集的采集工作,希望蝴蝶的种类更加丰富,以及对YOLOv5算法的改进等。

猜你喜欢
置信度蝴蝶阈值
硼铝复合材料硼含量置信度临界安全分析研究
小波阈值去噪在深小孔钻削声发射信号处理中的应用
基于自适应阈值和连通域的隧道裂缝提取
正负关联规则两级置信度阈值设置方法
比值遥感蚀变信息提取及阈值确定(插图)
为了蝴蝶
室内表面平均氡析出率阈值探讨
捉蝴蝶
捉蝴蝶
置信度条件下轴承寿命的可靠度分析