当前位置: 首页 > news >正文

数据集构建与训练前准备

训练数据集目录结构与格式

作者笨蛋学法,先将其公式化,后面逐步自己进行修改,读者觉得看不懂可以理解成,由结果去推过程,下面的这个yaml文件就是结果,我们去推需要的文件夹(名字可以不固定,但是作者作为笨蛋,在学习的时候将他们作为定量才能理解)

首先建立一个名字为datasets的文件,要求与my_yolov8_train_demo在同一层目录,datasets的目录用于存储几个比较关键的文件,为了便于理解先引申出一个指令

yolo task=detect mode=train model=yolov8n.pt epochs=5 batch=1 data=dataset.yaml

用与训练模型,其中dataset.yaml文件包含了几个重要信息

train: uav_bird_training/data/images/train/
val: uav_bird_training/data/images/valid/

根据这两条信息我们可以知道我们需要的三个文件,分别是uav_bird_training,data,images

其中images的下面有两个子文件分别是trainvalid

里面的train(训练集)和valid(验证集)

train:通过学习训练集中样本,调整自身参数,例如在图像识别中,训练集通过大量带有正确标签的图像,模型通过对这些图像的学习来掌握识别不同的物体

valid:验证集,作用是在模型训练过程中,对模型的性能进行评估和监控。(图片素材不是特别重要但是要与train的格式相同)

在data下面还有一个文件labels,里面和images一样都有train和valid,他们的作用是存储由labelimg标记正确的图像后生成的xml文件由本节最后的脚本生成TXT文件来存储相应图片的关键信息

labelImg使用方法-CSDN博客

uva的记事本存储这训练模型的id,有几个分类就在nc上面改,同时修改name的名字,要做到和txt同步

最后将dataset.yaml粘贴到my_yolov8_train_demo形成闭环

运行时有可能出现字体下载失败,从C:\Windows\Fonts中找到Arial.ttf粘贴到需要的文件夹中

在训练过程中查看数据

tensorboard --logdir D:\python\ultralytics\runs\detect\train3
可视化: http://localhost:6006/


转化脚本程序

import xml.etree.ElementTree as ET
import cv2 as cv
import os


def xml2txt():
    ann_dir = "D:/bird_test/voc_data"
    train_label_dir = "D:/python/yolov5-6.1/uav_bird_training/data/labels/train"
    valid_label_dir = "D:/python/yolov5-6.1/uav_bird_training/data/labels/valid"
    files = os.listdir(ann_dir)
    for xml_file in files:
        if xml_file.endswith(".xml") is not True:
            continue
        if os.path.isfile(os.path.join(ann_dir, xml_file)):
            xml_path = os.path.join(ann_dir, xml_file)
            tree = ET.parse(xml_path)
            root = tree.getroot()
            for elem in root.iter('filename'):
                img_name = elem.text
                print(os.path.join(ann_dir, elem.text))
                image = cv.imread(os.path.join(ann_dir, elem.text))
                h, w, c = image.shape
                if img_name.endswith("bmp"):
                    img_name = img_name.replace("bmp", "jpg")
                if img_name.endswith("png"):
                    img_name = img_name.replace("png", "jpg")
                data_label_text_f = os.path.join(train_label_dir, img_name.replace(".jpg", ".txt"))
                file_write_obj = open(data_label_text_f, 'w')

            for elem in root.iter("object"):
                # 获取标签中内容 # bird,drone
                name = elem.find('name').text
                print("class name: ", name)
                if name == "bird":
                    clazz_index = 0
                if name == "drone":
                    clazz_index = 1
                x1 = float(elem.find("bndbox").find("xmin").text)
                y1 = float(elem.find("bndbox").find("ymin").text)
                x2 = float(elem.find("bndbox").find("xmax").text)
                y2 = float(elem.find("bndbox").find("ymax").text)
                cx = (x1 + (x2 - x1) / 2) / w
                cy = (y1 + (y2 - y1) / 2) / h
                sw = (x2 - x1) / w
                sh = (y2 - y1) / h
                file_write_obj.write("%d %f %f %f %f\n" % (clazz_index, cx, cy, sw, sh))
            file_write_obj.close()
            print("processed image : ", img_name)


if __name__ == "__main__":
    xml2txt()

相关文章:

  • VIC模型有哪些优势?适用哪些范围?基于QGIS的VIC模型建模;未来气候变化模型预测;基于R语言VIC参数率定和优化
  • 【Academy】Web 缓存欺骗 ------ Web cache deception
  • 如何实现wordpress搜索自字义字段内容
  • 分享最佳ChatGPT替代11个方案(2025)
  • 计算机组成原理(第六章 总线)
  • 关于在electron(Nodejs)中使用 Napi 的简单记录
  • 内容中台的核心架构是什么?
  • 【在校课堂笔记】Python 第 3 节课 总结
  • FlinkSQL源码笔记
  • ~(取反)在算法竞赛中的常见用法和注意事项
  • 线程管理操作
  • 【CSS3】金丹篇
  • 3.3.5 VO-O语法- 高级语法
  • 大语言模型中Token的输出过程
  • vue+dhtmlx-gantt 实现甘特图-快速入门【甘特图】
  • Python 编程题 第八节:字符串变形、压缩字符串、三个数的最大乘积、判定字符是否唯一、IP地址转换
  • KL散度详解与应用
  • FTP 与 TFTP 的详细异同点
  • 信号与系统笔记——第二章 连续系统的时域分析(三)
  • 复现无人机的项目,项目名称为Evidential Detection and Tracking Collaboration
  • 葡萄牙三年第三次大选:“三分天下”已定,“欧洲例外”不再
  • 国家话剧院发讣告悼念朱媛媛:始终秉持“戏比天大”的信念
  • 人民日报:莫让“假自杀”淹没“真求助”
  • 三部门印发《2025年深入推进IPv6规模部署和应用工作要点》
  • 欧洲加大力度招募美国科研人员
  • 对话作家吉井忍:“滚石”般的生活,让我看到多种人生可能