如何制作app网站,中国建工网校官网,网站设计轮播图需要吗,崇信县门户网站#x1f4a1;#x1f4a1;#x1f4a1;本文摘要#xff1a;基于YOLOv8的草莓病害检测#xff0c;加入EMA注意力和GPFN性能分别从mAP0.5从原始的0.815提升至0.818和0.831
1.YOLOv8介绍 Ultralytics YOLOv8是Ultralytics公司开发的YOLO目标检测和图像分割模型的最新版本。Y…本文摘要基于YOLOv8的草莓病害检测加入EMA注意力和GPFN性能分别从mAP0.5从原始的0.815提升至0.818和0.831
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-FreeYOLOv8抛弃了以往的Anchor-Base使用了Anchor-Free的思想 损失函数YOLOv8使用VFL Loss作为分类损失使用DFL LossCIOU Loss作为分类损失 样本匹配YOLOv8抛弃了以往的IOU匹配或者单边比例的分配方式而是使用了Task-Aligned Assigner匹配方式 框架图提供见链接Brief summary of YOLOv8 model structure · Issue #189 · ultralytics/ultralytics · GitHub 2.草莓病害数据集介绍
数据集大小一共1450张类别如下
names: [Angular Leafspot, Anthracnose Fruit Rot, Blossom Blight, Gray Mold, Leaf Spot, Powdery Mildew Fruit]
2.1数据集划分
通过split_train_val.py得到trainval.txt、val.txt、test.txt
# coding:utf-8import os
import random
import argparseparser argparse.ArgumentParser()
#xml文件的地址根据自己的数据进行修改 xml一般存放在Annotations下
parser.add_argument(--xml_path, defaultAnnotations, typestr, helpinput xml label path)
#数据集的划分地址选择自己数据下的ImageSets/Main
parser.add_argument(--txt_path, defaultImageSets/Main, typestr, helpoutput txt label path)
opt parser.parse_args()trainval_percent 0.9
train_percent 0.7
xmlfilepath opt.xml_path
txtsavepath opt.txt_path
total_xml os.listdir(xmlfilepath)
if not os.path.exists(txtsavepath):os.makedirs(txtsavepath)num len(total_xml)
list_index range(num)
tv int(num * trainval_percent)
tr int(tv * train_percent)
trainval random.sample(list_index, tv)
train random.sample(trainval, tr)file_trainval open(txtsavepath /trainval.txt, w)
file_test open(txtsavepath /test.txt, w)
file_train open(txtsavepath /train.txt, w)
file_val open(txtsavepath /val.txt, w)for i in list_index:name total_xml[i][:-4] \nif i in trainval:file_trainval.write(name)if i in train:file_train.write(name)else:file_val.write(name)else:file_test.write(name)file_trainval.close()
file_train.close()
file_val.close()
file_test.close() 2.2 通过voc_label.py得到适合yolov8训练需要的
# -*- coding: utf-8 -*-
import xml.etree.ElementTree as ET
import pickle
import os
from os import listdir, getcwd
from os.path import join
sets [train,val,test]
classes [Angular Leafspot, Anthracnose Fruit Rot, Blossom Blight, Gray Mold, Leaf Spot, Powdery Mildew Fruit]def convert(size, box):dw 1. / size[0]dh 1. / size[1]x (box[0] box[1]) / 2.0y (box[2] box[3]) / 2.0w box[1] - box[0]h box[3] - box[2]x x * dww w * dwy y * dhh h * dhreturn (x, y, w, h)
def convert_annotation(image_id):in_file open(Annotations/%s.xml % (image_id))out_file open(labels/%s.txt % (image_id), w)tree ET.parse(in_file)root tree.getroot()size root.find(size)w int(size.find(width).text)h int(size.find(height).text)for obj in root.iter(object):difficult obj.find(difficult).textcls obj.find(name).textif cls not in classes or int(difficult) 1:continuecls_id classes.index(cls)xmlbox obj.find(bndbox)b (float(xmlbox.find(xmin).text), float(xmlbox.find(xmax).text), float(xmlbox.find(ymin).text),float(xmlbox.find(ymax).text))bb convert((w, h), b)out_file.write(str(cls_id) .join([str(a) for a in bb]) \n)
wd getcwd()
print(wd)
for image_set in sets:if not os.path.exists(labels/):os.makedirs(labels/)image_ids open(ImageSets/Main/%s.txt % (image_set)).read().strip().split()list_file open(%s.txt % (image_set), w)for image_id in image_ids:list_file.write(images/%s.jpg\n % (image_id))convert_annotation(image_id)list_file.close()3.训练结果分析
F1_curve.pngF1分数与置信度x轴之间的关系。F1分数是分类的一个衡量标准是精确率和召回率的调和平均函数介于01之间。越大越好。
TP真实为真预测为真
FN真实为真预测为假
FP真实为假预测为真
TN真实为假预测为假
精确率precisionTP/(TPFP)
召回率(Recall)TP/(TPFN)
F12*精确率*召回率/精确率召回率 PR_curve.png PR曲线中的P代表的是precision精准率R代表的是recall召回率其代表的是精准率与召回率的关系。 4.优化创新
4.1加入EMA注意力机制 并行子结构帮助网络避免更多的顺序处理和大深度。给定上述并行处理策略我们在EMA模块中采用它。EMA的整体结构如图3 (b)所示。在本节中我们将讨论EMA如何在卷积操作中不进行通道降维的情况下学习有效的通道描述并为高级特征图产生更好的像素级注意力。具体来说我们只从CA模块中挑选出1x1卷积的共享组件在我们的EMA中将其命名为1x1分支。为了聚合多尺度空间结构信息将3x3内核与1x1分支并行放置以实现快速响应我们将其命名为3x3分支。考虑到特征分组和多尺度结构有效地建立短期和长程依赖有利于获得更好的性能。 Yolov8改进---注意力机制ICASSP2023 EMA基于跨空间学习的高效多尺度注意力、效果优于ECA、CBAM、CA | 小目标涨点明显-CSDN博客
mAP0.5从原始的0.815提升至0.818 4.2 加入GPFN FPN旨在对CNN骨干网络提取的不同分辨率的多尺度特征进行融合。上图给出了FPN的进化从最初的FPN到PANet再到BiFPN。我们注意到这些FPN架构仅聚焦于特征融合缺少了块内连接。因此我们设计了一种新的路径融合GFPN包含跳层与跨尺度连接见上图d。
Yolov8改进小目标到大目标一网打尽轻骨干重Neck的轻量级目标检测器GiraffeDet-CSDN博客
实验结果
mAP0.5从原始的0.815提升至0.831