建设工程信息服务平台新网站,贵港网站设计,wordpress4.9.6漏洞,单位网站建设规划#x1f4a1;#x1f4a1;#x1f4a1;本文摘要#xff1a;基于YOLOv8的绝缘子小目标检测#xff0c;阐述了整个数据制作和训练可视化过程 1.YOLOv8介绍 Ultralytics YOLOv8是Ultralytics公司开发的YOLO目标检测和图像分割模型的最新版本。YOLOv8是一种尖端的、最先进的本文摘要基于YOLOv8的绝缘子小目标检测阐述了整个数据制作和训练可视化过程 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.绝缘子数据集介绍 aircraft总共包含1631张图片按照721划分了training val test
标签名 0: broken insulator 1: flashover damage 2.1 split_train_val.py
# 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训练的txt
# -*- 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 [broken insulator,flashover damage]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.如何训练YOLOv8
3.1 配置insulator.yaml
ps:建议填写绝对路径 path: F:/ultralytics-insulator/VOC2007 # dataset root dir
train: train.txt # train images (relative to path) 118287 images
val: val.txt # val images (relative to path) 5000 images# number of classes
nc: 2# class names
names:0: broken insulator1: flashover damage3.2 如何训练
from ultralytics import YOLOif __name__ __main__:model YOLO(ultralytics/cfg/models/v8/yolov8.yaml)#model.load(yolov8n.pt) # loading pretrain weightsmodel.train(datadata/insulator.yaml,cacheFalse,imgsz640,epochs200,batch16,close_mosaic10,workers0,device0,optimizerSGD, # using SGDprojectruns/train,nameexp,)
3.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召回率其代表的是精准率与召回率的关系。 预测结果 关注下方名片点击关注即可源码获取途径。