数据集构建与训练前准备

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

作者笨蛋学法,先将其公式化,后面逐步自己进行修改,读者觉得看不懂可以理解成,由结果去推过程,下面的这个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的下面有两个子文件分别是train和valid

里面的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()

相关推荐
万粉变现经纪人5 分钟前
如何解决 pip install 安装报错 ModuleNotFoundError: No module named ‘tokenizers’ 问题
python·selenium·测试工具·scrapy·beautifulsoup·fastapi·pip
西阳未落2 小时前
C++基础(21)——内存管理
开发语言·c++·面试
编程武士2 小时前
从50ms到30ms:YOLOv10部署中图像预处理的性能优化实践
人工智能·python·yolo·性能优化
我的xiaodoujiao2 小时前
Windows系统Web UI自动化测试学习系列2--环境搭建--Python-PyCharm-Selenium
开发语言·python·测试工具
max5006002 小时前
基于Meta Llama的二语习得学习者行为预测计算模型
人工智能·算法·机器学习·分类·数据挖掘·llama
callJJ2 小时前
从 0 开始理解 Spring 的核心思想 —— IoC 和 DI(2)
java·开发语言·后端·spring·ioc·di
月疯3 小时前
OPENCV摄像头读取视频
人工智能·opencv·音视频
王哥儿聊AI3 小时前
Lynx:新一代个性化视频生成模型,单图即可生成视频,重新定义身份一致性与视觉质量
人工智能·算法·安全·机器学习·音视频·软件工程
hsjkdhs4 小时前
万字详解C++之构造函数析构函数
开发语言·c++
lisw054 小时前
连接蓝牙时“无媒体信号”怎么办?
人工智能·机器学习·微服务