基于YOLOv8的水稻虫害识别系统,加入BiLevelRoutingAttention注意力进行创新优化

ops/2024/9/25 9:14:26/

  💡💡💡本文摘要:基于YOLOv8的水稻虫害识别,阐述了整个数据制作和训练可视化过程,并加入BiLevelRoutingAttention注意力进行优化,最终mAP从原始的 0.697提升至0.732

 博主简介

AI小怪兽,YOLO骨灰级玩家,1)YOLOv5、v7、v8、v9优化创新,轻松涨点和模型轻量化;2)目标检测、语义分割、OCR、分类等技术孵化,赋能智能制造,工业项目落地经验丰富;

原创自研系列, 2024年计算机视觉顶会创新点

YOLOv8原创自研》

YOLOv5原创自研》

YOLOv7原创自研》

YOLOv9魔术师》

23年最火系列,内涵80+优化改进篇,涨点小能手,助力科研,好评率极高

YOLOv8魔术师》

 《YOLOv7魔术师》

YOLOv5/YOLOv7魔术师》

《RT-DETR魔术师》

应用系列篇:

YOLO目标检测

《深度学习工业缺陷检测》

YOLOv8-Pose关键点检测》

1.YOLOv8介绍

         Ultralytics YOLOv8是Ultralytics公司开发的YOLO目标检测和图像分割模型的最新版本。YOLOv8是一种尖端的、最先进的(SOTA)模型,它建立在先前YOLO成功基础上,并引入了新功能和改进,以进一步提升性能和灵活性。它可以在大型数据集上进行训练,并且能够在各种硬件平台上运行,从CPU到GPU。

具体改进如下:

  1. Backbone:使用的依旧是CSP的思想,不过YOLOv5中的C3模块被替换成了C2f模块,实现了进一步的轻量化,同时YOLOv8依旧使用了YOLOv5等架构中使用的SPPF模块;

  2. PAN-FPN:毫无疑问YOLOv8依旧使用了PAN的思想,不过通过对比YOLOv5与YOLOv8的结构图可以看到,YOLOv8将YOLOv5中PAN-FPN上采样阶段中的卷积结构删除了,同时也将C3模块替换为了C2f模块;

  3. Decoupled-Head:是不是嗅到了不一样的味道?是的,YOLOv8走向了Decoupled-Head;

  4. Anchor-FreeYOLOv8抛弃了以往的Anchor-Base,使用了Anchor-Free的思想;

  5. 损失函数YOLOv8使用VFL Loss作为分类损失,使用DFL Loss+CIOU Loss作为分类损失;

  6. 样本匹配YOLOv8抛弃了以往的IOU匹配或者单边比例的分配方式,而是使用了Task-Aligned Assigner匹配方式

框架图提供见链接:Brief summary of YOLOv8 model structure · Issue #189 · ultralytics/ultralytics · GitHub

2.水稻虫害识别数据集介绍

含稻秆蝇、二化螟、褐飞虱、蓟马、蛴螬、蝼蛄等常见害虫,共14个水稻害虫类别,1200多张图像,yolo标注完整,全部原始数据


nc: 14
names: ['rice leaf roller', 'rice leaf caterpillar', 'paddy stem maggot','asiatic rice borer', 'yellow rice borer', 'rice gall midge', 
'Rice Stemfly', 'brown plant hopper', 'white backed plant hopper', 
'small brown plant hopper', 'rice water weevil', 'rice leafhopper', 
'grain spreader thrips', 'rice shell pest']

 

3.如何训练YOLOv8

3.1 配置data.yaml

ps:建议填写绝对路径

train: F:\ultralytics-RiceInsect\RiceInsectData\train
val: F:\ultralytics-RiceInsect\RiceInsectData\valnc: 14
names: ['rice leaf roller', 'rice leaf caterpillar', 'paddy stem maggot', 'asiatic rice borer', 'yellow rice borer', 'rice gall midge', 'Rice Stemfly', 'brown plant hopper', 'white backed plant hopper', 'small brown plant hopper', 'rice water weevil', 'rice leafhopper', 'grain spreader thrips', 'rice shell pest']

3.2 如何训练

import warnings
warnings.filterwarnings('ignore')
from ultralytics import YOLOif __name__ == '__main__':model = YOLO('ultralytics/cfg/models/v8/yolov8.yaml')#model.load('yolov8n.pt') # loading pretrain weightsmodel.train(data='RiceInsectData/data.yaml',cache=True,imgsz=640,epochs=200,batch=32,workers=0,device='0',optimizer='SGD', # using SGD# resume='', # last.pt path# amp=False # close amp# fraction=0.2,project='runs/train',name='exp',)

3.3 训练可视化结果

YOLOv8 summary (fused): 168 layers, 3008378 parameters, 0 gradients, 8.1 GFLOPsClass     Images  Instances      Box(P          R      mAP50  mAP50-95): 100%|██████████| 3/3 [00:01<00:00,  1.86it/s]all        188        199        0.7      0.631      0.697      0.426rice leaf roller        188         28      0.834      0.821      0.866      0.585rice leaf caterpillar        188         26      0.563      0.538      0.632      0.398paddy stem maggot        188          4      0.659      0.488      0.582      0.358asiatic rice borer        188         26      0.602      0.654      0.727      0.495yellow rice borer        188         11      0.806      0.755      0.813      0.537rice gall midge        188         14      0.793      0.857      0.863      0.417Rice Stemfly        188          4      0.457       0.75      0.745      0.461brown plant hopper        188         15      0.829      0.733      0.844      0.529
white backed plant hopper        188          7       0.42      0.286      0.288      0.144
small brown plant hopper        188          9      0.614      0.333      0.573      0.372rice water weevil        188         22      0.858      0.909      0.901       0.58rice leafhopper        188         24      0.695       0.75      0.697      0.371grain spreader thrips        188          3      0.677      0.667      0.687      0.479rice shell pest        188          6          1      0.291      0.543      0.241
Speed: 0.2ms preprocess, 1.6ms inference, 0.0ms loss, 0.6ms postprocess per image

F1_curve.png:F1分数与置信度(x轴)之间的关系。F1分数是分类的一个衡量标准,是精确率和召回率的调和平均函数,介于0,1之间。越大越好。

TP:真实为真,预测为真;

FN:真实为真,预测为假;

FP:真实为假,预测为真;

TN:真实为假,预测为假;

精确率(precision)=TP/(TP+FP)

召回率(Recall)=TP/(TP+FN)

F1=2*(精确率*召回率)/(精确率+召回率)

 PR_curve.png :PR曲线中的P代表的是precision(精准率)R代表的是recall(召回率),其代表的是精准率与召回率的关系。

预测结果: 

4.如何优化

4.1加入BiLevelRoutingAttention介绍

论文:https://arxiv.org/pdf/2303.08810.pdf
 

背景:注意力机制是Vision Transformer的核心构建模块之一,可以捕捉长程依赖关系。然而,由于需要计算所有空间位置之间的成对令牌交互,这种强大的功能会带来巨大的计算负担和内存开销。为了减轻这个问题,一系列工作尝试通过引入手工制作和内容无关的稀疏性到关注力中来解决这个问题,如限制关注操作在局部窗口、轴向条纹或扩张窗口内。

本文方法:本文提出一种动态稀疏注意力的双层路由方法。对于一个查询,首先在粗略的区域级别上过滤掉不相关的键值对,然后在剩余候选区域(即路由区域)的并集中应用细粒度的令牌对令牌关注力。所提出的双层路由注意力具有简单而有效的实现方式,利用稀疏性来节省计算和内存,只涉及GPU友好的密集矩阵乘法。在此基础上构建了一种新的通用Vision Transformer,称为BiFormer。

其中图(a)是原始的注意力实现,其直接在全局范围内操作,导致高计算复杂性和大量内存占用;而对于图(b)-(d),这些方法通过引入具有不同手工模式的稀疏注意力来减轻复杂性,例如局部窗口、轴向条纹和扩张窗口等;而图(e)则是基于可变形注意力通过不规则网格来实现图像自适应稀疏性;作者认为以上这些方法大都是通过将 手工制作 和 与内容无关 的稀疏性引入到注意力机制来试图缓解这个问题。因此,本文通过双层路由(bi-level routing)提出了一种新颖的动态稀疏注意力(dynamic sparse attention ),以实现更灵活的计算分配和内容感知,使其具备动态的查询感知稀疏性,如图(f)所示。

基于BRA模块,本文构建了一种新颖的通用视觉转换器BiFormer。如上图所示,其遵循大多数的vision transformer架构设计,也是采用四级金字塔结构,即下采样32倍。

具体来说,BiFormer在第一阶段使用重叠块嵌入,在第二到第四阶段使用块合并模块来降低输入空间分辨率,同时增加通道数,然后是采用连续的BiFormer块做特征变换。需要注意的是,在每个块的开始均是使用 的深度卷积来隐式编码相对位置信息。随后依次应用BRA模块和扩展率为 的 2 层 多层感知机(Multi-Layer Perceptron, MLP)模块,分别用于交叉位置关系建模和每个位置嵌

4.2 改进后的网络结构

4.3 性能

mAP从原始的 0.697提升至0.732

YOLOv8-C2f_BiLevelRoutingAttention summary (fused): 196 layers, 2653434 parameters, 0 gradients, 11.9 GFLOPsClass     Images  Instances      Box(P          R      mAP50  mAP50-95): 100%|██████████| 3/3 [00:01<00:00,  1.75it/s]all        188        199      0.733      0.645      0.732      0.409rice leaf roller        188         28      0.827      0.851      0.872      0.574rice leaf caterpillar        188         26      0.629      0.577      0.675      0.382paddy stem maggot        188          4      0.571        0.5      0.575      0.358asiatic rice borer        188         26      0.685      0.577      0.753      0.453yellow rice borer        188         11      0.521      0.695      0.632      0.383rice gall midge        188         14      0.754      0.714      0.913       0.41Rice Stemfly        188          4      0.633       0.75      0.807      0.453brown plant hopper        188         15      0.776      0.693      0.782      0.419
white backed plant hopper        188          7      0.579      0.591      0.523      0.248
small brown plant hopper        188          9      0.755      0.345      0.663       0.29rice water weevil        188         22      0.913      0.864      0.936      0.608rice leafhopper        188         24      0.722      0.708      0.748      0.372grain spreader thrips        188          3      0.967      0.667      0.806      0.519rice shell pest        188          6      0.935        0.5      0.561      0.263
Speed: 0.2ms preprocess, 1.9ms inference, 0.0ms loss, 0.7ms postprocess per image

 

 

关注下方名片点击关注,即可源码获取途径。  


http://www.ppmy.cn/ops/31846.html

相关文章

如何选择适合的美国站群服务器:经济实惠而可靠的选择

如何选择适合的美国站群服务器&#xff1a;经济实惠而可靠的选择 在今天的数字化时代&#xff0c;选择适合的服务器对于个人网站或企业来说至关重要。一台性能稳定、价格实惠的美国站群服务器能够为您的网站提供所需的支持&#xff0c;但在选择之前&#xff0c;有一些关键因素…

服务器被攻击,为什么后台任务管理器无法打开?

在服务器遭受DDoS攻击后&#xff0c;当后台任务管理器由于系统资源耗尽无法打开时&#xff0c;管理员需要依赖间接手段来进行攻击类型的判断和解决措施的实施。由于涉及真实代码可能涉及到敏感操作&#xff0c;这里将以概念性伪代码和示例指令的方式来说明。 判断攻击类型 步…

ClickHouse高原理与实践

ClickHouse高原理与实践 1 ClickHouse的特性1.1. OLAP1.2. 列式存储1.3. 表引擎1.4. 向量化执行1.5. 分区1.6. 副本与分片1.7 其他特性 2. ClickHouse模块设计2.1 Parser分析器与Interpreter解释器2.2 Storage2.3 Column与Field2.4 DataType2.5 Block2.6 Cluster与Replication …

使用 XTuner 完成llama3小助手认知微调

1.首先请报名课程&#xff1a; 2.环境配置 conda create -n llama3 python3.10 conda activate llama3 conda install pytorch2.1.2 torchvision0.16.2 torchaudio2.1.2 pytorch-cuda12.1 -c pytorch -c nvidia 2.1 下载模型 新建文件夹 mkdir -p ~/model cd ~/model 从Op…

机器学习(五)之损失函数

上面几节讲了监督学习和非监督学习的一些算法&#xff08;目前还不完整&#xff0c;会慢慢补充哒) 如果文章内容有错误&#xff0c;欢迎小伙伴在评论区指出! 前言&#xff1a; 损失函数在机器学习中非常重要&#xff0c;直接关乎模型的好坏&#xff08;so?学好它&#xff09;…

JVM笔记1--Java内存区域

1、运行时数据区域 从上图可以看出来&#xff0c;Java虚拟机运行时数据区域整体上可以分成5大块&#xff1a; 1.1、程序计数器 程序计数器是一块较小的内存空间。它可以看做当前线程所执行的字节码的行号指示器。在Java虚拟机的概念模型里&#xff0c;字节码解释器工作时就是…

电话号码的字母组合 【C++】【力扣刷题】

解题思路&#xff1a; 以第一个为例,digits “23”&#xff0c;表明从电话号码的按键中选取2和3这两个字符&#xff0c;然后去寻找它们各自所对应的字母&#xff0c;这里每一个数字字符所对应的字母的不同&#xff0c;0对应的是空字符&#xff0c;而1的话题目中讲到是不对应任…

解决clickhouse 启动报错

解决clickhouse 启动报错 Error response from daemon: driver failed programming external connectivity on endpoint clickhouse-server (b42457434cebe7d8ad024d31e4fd28eae2139bb2b5046c283bea17ce4398d5b0): Error starting userland proxy: listen tcp4 0.0.0.0:8123: …