💡💡💡本文摘要: 基于YOLOv8的水稻虫害识别**,阐述了整个数据制作和训练可视化过程,并加入** BiLevelRoutingAttention注意力进行优化,最终****mAP从原始的 0.697提升至0.732
博主简介
AI小怪兽,YOLO骨灰级玩家,1)YOLOv5、v7、v8、v9优化创新,轻松涨点和模型轻量化;2)目标检测、语义分割、OCR、分类等技术孵化,赋能智能制造,工业项目落地经验丰富;
原创自研系列, 2024年计算机视觉顶会创新点
23年最火系列,内涵80+优化改进篇,涨点小能手,助力科研,好评率极高
应用系列篇:
1.YOLOv8介绍
Ultralytics YOLOv8是Ultralytics公司开发的YOLO目标检测和图像分割模型的最新版本。YOLOv8是一种尖端的、最先进的(SOTA)模型,它建立在先前YOLO成功基础上,并引入了新功能和改进,以进一步提升性能和灵活性。它可以在大型数据集上进行训练,并且能够在各种硬件平台上运行,从CPU到GPU。
具体改进如下:
-
Backbone:使用的依旧是CSP的思想,不过YOLOv5中的C3模块被替换成了C2f模块,实现了进一步的轻量化,同时YOLOv8依旧使用了YOLOv5等架构中使用的SPPF模块;
-
PAN-FPN:毫无疑问YOLOv8依旧使用了PAN的思想,不过通过对比YOLOv5与YOLOv8的结构图可以看到,YOLOv8将YOLOv5中PAN-FPN上采样阶段中的卷积结构删除了,同时也将C3模块替换为了C2f模块;
-
Decoupled-Head:是不是嗅到了不一样的味道?是的,YOLOv8走向了Decoupled-Head;
-
Anchor-Free :YOLOv8抛弃了以往的Anchor-Base,使用了Anchor-Free的思想;
-
损失函数:YOLOv8使用VFL Loss作为分类损失,使用DFL Loss+CIOU Loss作为分类损失;
-
样本匹配: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\val
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.2 如何训练
import warnings
warnings.filterwarnings('ignore')
from ultralytics import YOLO
if __name__ == '__main__':
model = YOLO('ultralytics/cfg/models/v8/yolov8.yaml')
#model.load('yolov8n.pt') # loading pretrain weights
model.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 GFLOPs
Class 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.426
rice leaf roller 188 28 0.834 0.821 0.866 0.585
rice leaf caterpillar 188 26 0.563 0.538 0.632 0.398
paddy stem maggot 188 4 0.659 0.488 0.582 0.358
asiatic rice borer 188 26 0.602 0.654 0.727 0.495
yellow rice borer 188 11 0.806 0.755 0.813 0.537
rice gall midge 188 14 0.793 0.857 0.863 0.417
Rice Stemfly 188 4 0.457 0.75 0.745 0.461
brown 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.372
rice water weevil 188 22 0.858 0.909 0.901 0.58
rice leafhopper 188 24 0.695 0.75 0.697 0.371
grain spreader thrips 188 3 0.677 0.667 0.687 0.479
rice 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 GFLOPs
Class 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.409
rice leaf roller 188 28 0.827 0.851 0.872 0.574
rice leaf caterpillar 188 26 0.629 0.577 0.675 0.382
paddy stem maggot 188 4 0.571 0.5 0.575 0.358
asiatic rice borer 188 26 0.685 0.577 0.753 0.453
yellow rice borer 188 11 0.521 0.695 0.632 0.383
rice gall midge 188 14 0.754 0.714 0.913 0.41
Rice Stemfly 188 4 0.633 0.75 0.807 0.453
brown 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.29
rice water weevil 188 22 0.913 0.864 0.936 0.608
rice leafhopper 188 24 0.722 0.708 0.748 0.372
grain spreader thrips 188 3 0.967 0.667 0.806 0.519
rice 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
关注下方名片点击关注,即可源码获取途径。