数据集构建与训练前准备
训练数据集目录结构与格式
作者笨蛋学法,先将其公式化,后面逐步自己进行修改,读者觉得看不懂可以理解成,由结果去推过程,下面的这个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粘贴到需要的文件夹中

在训练过程中查看数据
转化脚本程序
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()
相关文章:
数据集构建与训练前准备
训练数据集目录结构与格式 作者笨蛋学法,先将其公式化,后面逐步自己进行修改,读者觉得看不懂可以理解成,由结果去推过程,下面的这个yaml文件就是结果,我们去推需要的文件夹(名字可以不固定,但是…...
jenkins+ant+jmeter生成的测试报告空白
Jenkins能正常构建成功,但是打开Jenkins上的测试报告,则显示空白 在网上找了很多文章,结果跟别人对比测试报告的配置,发现自己跟别人写的不一样 所以跟着别人改,改成一样的再试试 结果,好家伙࿰…...
利用阿里云Atlas地区选择器与Plotly.js实现数据可视化与交互
在数据科学与可视化领域,交互式图表和地图应用越来越成为数据分析和展示的重要手段。本文将介绍如何结合阿里云Atlas地区选择器与Plotly.js,创建动态交互式的数据可视化应用。 一、阿里云Atlas地区选择器简介 阿里云Atlas是阿里云的一款数据可视化产品…...
行为级建模
1、结构化过程语句 verilog有两种结构化过程语句: always initial verilog本质上是并发的。 //声明初值//方法一 reg clk ; initialclk 1b0 ;//方法二 reg clk 1b0 ;2、过程赋值语句 阻塞赋值 非阻塞赋值 非阻塞赋值可以避免竞争:…...
linux安装java8 sdk,使用 tar.gz安装包手动安装
1. 下载 Java 8 SDK 首先,需要从 Oracle 的官方网站或 OpenJDK 的网站下载 Java 8 的 .tar.gz 文件。并上传到服务器 2. 解压 JDK 下载完成后,使用 tar 命令解压文件。打开服务器终端,然后使用以下命令: tar -xvzf jdk-8uXXX-…...
6.聊天室环境安装 - Ubuntu22.04 - elasticsearch(es)的安装和使用
目录 介绍安装安装kibana安装ES客户端使用 介绍 Elasticsearch, 简称 ES,它是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,res…...
【python爬虫】酷狗音乐爬取练习
注意:本次爬取的音乐仅有1分钟试听,仅作学习爬虫的原理,完整音乐需要自行下载客户端。 一、 初步分析 登陆酷狗音乐后随机选取一首歌,在请求里发现一段mp3文件,复制网址,确实是我们需要的url。 复制音频的…...
计算机视觉cv2入门之图像空域滤波(待补充)
空域滤波 空域滤波是指利用像素及像素领域组成的空间进行图像增强的方法。这里之所以用滤波这个词,是因为借助了频域里的概念。事实上空域滤波技术的效果与频域滤波技术的效果可以是等价的,而且有些原理和方法也常借助频域概念来解释。 原理和分类 空域滤波是在图…...
杂项知识笔记搜集
1.pygame pygame可以画出来图形界面,pygame Python仓库 PyGame游戏编程_游戏程序设计csdn-CSDN博客 2.V4L2库 V4L2是Linux上的Camera采集器的框架 Video for Linux ,是从Linux2.1版本开始支持的。HDMI视频采集卡采集到的视频通过USB3.0输出࿰…...
代码随想录算法训练营第六十一天 | 108. 冗余连接 109. 冗余连接II
108. 冗余连接 题目链接:KamaCoder 文档讲解:代码随想录 状态:AC Java代码: import java.util.*;class Main {public static int[] father;public static void main(String[] args) {Scanner scan new Scanner(System.in);int n…...
选择排序算法的SIMD优化
一、优化原理 将查找数组最小值索引的SIMD优化的函数嵌入选择排序主循环,优化最耗时的最小值查找环节,同时保留选择排序的交换逻辑。 二、关键改造步骤 1)最小值查找模块化 复用SIMD优化的 find_min_index_simd函数。 2)动态子数组处理 每次循环处理 arr[i..n-1] 子数…...
Java本地方法根据线上地址下载图片到本地然后返回本地可以访问的地址
【需求】A和B两台服务器,A是云服务器,B是本地服务器,A和B上部署了一模一样的springboot代码,代码分为前后端,其中在B上前端请求先请求B的后端然后B转发到A的后端,然后A返回给B,B再返回给B的前端…...
游戏引擎学习第149天
今日回顾与计划 在今天的直播中,我们将继续进行游戏的开发工作,目标是完成资产文件(pack file)的测试版本。目前,游戏的资源(如位图和声音文件)是直接从磁盘加载的,而我们正在将其转…...
SpringBoot Test详解
目录 spring-boot-starter-test 1、概述2、常用注解 2.1、配置类型的注解2.2、Mock类型的注解2.3、自动配置类型的注解2.4、启动测试类型的注解2.5、相似注解的区别和联系 3、SpringBootTest和Junit的使用 3.1、单元测试3.2、集成测试 4、MockMvc 4.1、简单示例4.2、自动配置4…...
PyCharm 接入 DeepSeek、OpenAI、Gemini、Mistral等大模型完整版教程(通用)!
PyCharm 接入 DeepSeek、OpenAI、Gemini、Mistral等大模型完整版教程(通用)! 当我们成功接入大模型时,可以选中任意代码区域进行解答,共分为三个区域,分别是选中区域、提问区域以及回答区域,我…...
升级到碳纤维齿轮是否值得?
引言:当齿轮开始“减肥” 在F1赛车的变速箱里,一个齿轮的重量减轻100克,就能让圈速提升0.1秒; 在无人机旋翼传动系统中,轻量化齿轮可延长续航时间15%; 甚至在高端机械腕表中,碳纤维齿轮的引入…...
基于SpringBoot+Vue的瑜伽课体验课预约系统【附源码】
基于SpringBootVue的瑜伽课体验课预约系统 一、系统技术说明二、运行说明三、系统的演示四、系统的核心代码演示 一、系统技术说明 框架:SpringbootVue 数据库:mysql 5.7(一定要5.7版本) 数据库工具:Navicat11 开发软…...
文章被检测出是AI写的怎么办?
随着人工智能技术的飞速发展,AI辅助写作工具逐渐普及,为学生、科研人员以及创作者带来了诸多便利。然而,随之而来的是对学术诚信和内容原创性的担忧。当文章被检测出是AI写作时,应该如何应对?本文将探讨这一问题&#…...
DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加列宽调整功能,示例Table14基础固定表头示例
前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 Deep…...
【英伟达AI论文】多模态大型语言模型的高效长视频理解
摘要:近年来,基于视频的多模态大型语言模型(Video-LLMs)通过将视频处理为图像帧序列,显著提升了视频理解能力。然而,许多现有方法在视觉主干网络中独立处理各帧,缺乏显式的时序建模,…...
[Lc10_hash] 总结 | 两数之和 | 字符重排 | 存在重复元素 i ii | 字母异位词分组
目录 1.介绍 2.两数之和 题解 3.面试题 01.02. 判定是否互为字符重排 题解 4.存在重复元素 题解 5.存在重复元素 II 题解 ⭕6.字母异位词分组 题解 1.介绍 哈希表是什么? 存储数据的容器前文:[C_] set | map | unordered_map 有什么用呢?…...
缓存之美:Guava Cache 相比于 Caffeine 差在哪里?
大家好,我是 方圆。本文将结合 Guava Cache 的源码来分析它的实现原理,并阐述它相比于 Caffeine Cache 在性能上的劣势。为了让大家对 Guava Cache 理解起来更容易,我们还是在开篇介绍它的原理: Guava Cache 通过分段(…...
小组件适配屏幕主题色
iOS 18 新增Home screen Tint Color(色调)选择,用户可以通过以下方式自定义主屏幕颜色,并且小组件,APP 图标也会跟随改颜色。 比如说意料之外的小组件(不兼容) 白色部分内部应该还有其他显示内…...
IO学习---->线程
1.创建两个线程,分支线程1拷贝文件的前一部分,分支线程2拷贝文件的后一部分 #include <head.h> sem_t sem; long half_size 0; // 全局变量,供所有线程共享void* product(void *arg) {FILE *src fopen("IO.text", "…...
个人记录,Unity资源解压和管理插件
就是经典的两个AssetStudio 和 Ripper 没有什么干货,就是记录一下,内容没有很详细 AssetStudio 说错了,AssetStudio比较出名(曾经),但好像堕落了 这个工具有个好处就是分类选择,(…...
Synology 部署的 WordPress 無法升級至最新版本時,可以透過以下改良版指南進行排查和解決。
當 Synology 部署的 WordPress 無法升級至最新版本時,可以透過以下改良版指南進行排查和解決。我對內容進行了補充和重新組織,希望能幫助你更高效地處理這類問題: 權限相關問題處理 檢查文件和目錄權限: 確保 WordPress 安裝目錄…...
Java反射与动态代理:框架设计的基石
一、反射机制深度解剖(Java 17新特性) 1. Class对象获取六大途径 // 1. 类名.class Class<?> clazz1 String.class; // 2. 对象.getClass() String str ""; Class<?> clazz2 str.getClass(); // 3. Class.forName(…...
day19-前端Web——Vue3+TS+ElementPlus
目录 1. Vue工程化1.1 介绍1.2 环境准备1.2.1 NodeJS安装双击安装包选择安装目录验证NodeJS环境变量配置npm的全局安装路径 1.3 Vue项目-创建1.4 Vue项目开发流程1.5 API风格1.6 案例 2. TS2.1 概述2.2 快速入门2.3 常用类型2.3.1 基础类型2.3.2 联合类型2.3.3 函数类型2.3.4 对…...
隐私保护在 Facebook 用户身份验证中的应用
在这个数字化的时代,个人隐私保护成为了公众关注的焦点。社交媒体巨头 Facebook 作为全球最大的社交平台之一,拥有数十亿用户,其在用户身份验证过程中对隐私保护的重视程度直接影响着用户的安全感和信任度。本文将探讨 Facebook 在用户身份验…...
【JavaWeb学习Day23】
Maven高级 分模块设计与开发 分模块设计:将一个大项目分成若干个子模块,方便项目的维护、扩展,也方便模块间的相互引用,资源共享。 策略: 1.策略一:按照功能模块拆分,比如:公共组…...

