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

【YOLO】常用脚本

目录

  • VOC转YOLO
  • 划分训练集、测试集与验证集

VOC转YOLO

import os
import xml.etree.ElementTree as ETdef 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(xml_file, output_dir, labels):# 加载XML文件tree = ET.parse(xml_file)root = tree.getroot()# 获取图像尺寸size = root.find('size')w = int(size.find('width').text)h = int(size.find('height').text)# 初始化YOLO格式的标注字符串result_str = ""# 遍历所有对象for obj in root.iter('object'):difficult = obj.find('difficult')if difficult is not None:difficult = difficult.textif int(difficult) == 1:continuecls = obj.find('name').textif cls not in labels:continuecls_id = labels.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)result_str = result_str + " " + " ".join([str(a) for a in bb]) + " " + str(cls_id)# 写入YOLO格式的标注文件file_name = os.path.splitext(os.path.basename(xml_file))[0]with open(os.path.join(output_dir, file_name + ".txt"), "w") as f:f.write(result_str.strip())def main(voc_dir, output_dir, labels):# 遍历Annotations文件夹annotations_dir = os.path.join(voc_dir, "Annotations")for xml_file in os.listdir(annotations_dir):if xml_file.endswith(".xml"):xml_path = os.path.join(annotations_dir, xml_file)convert_annotation(xml_path, output_dir, labels)if __name__ == "__main__":# VOC数据集根目录包含Annotations、JPEGImages等voc_dir = "path_to_your_voc_dataset"  # 存放转换后的YOLO格式标注文件output_dir = "path_to_your_yolo_annotations"# 数据集包含类别  labels = ['nodule']main(voc_dir, output_dir, labels)

划分训练集、测试集与验证集

import os
import random
from shutil import copyfiledef split_dataset(image_folder, txt_folder, output_folder, split_ratio=(0.8, 0.1, 0.1)):# Ensure output folders existfor dataset in ['train', 'val', 'test']:if not os.path.exists(os.path.join(output_folder, dataset, 'images')):os.makedirs(os.path.join(output_folder, dataset, 'images'))if not os.path.exists(os.path.join(output_folder, dataset, 'labels')):os.makedirs(os.path.join(output_folder, dataset, 'labels'))# Get list of image filesimage_files = [f for f in os.listdir(image_folder) if f.endswith(('.jpg', '.jpeg', '.png'))]random.shuffle(image_files)num_images = len(image_files)num_train = int(split_ratio[0] * num_images)num_val = int(split_ratio[1] * num_images)train_images = image_files[:num_train]val_images = image_files[num_train:num_train + num_val]test_images = image_files[num_train + num_val:]# Copy images to respective foldersfor dataset, images_list in zip(['train', 'val', 'test'], [train_images, val_images, test_images]):for image_file in images_list:image_path = os.path.join(image_folder, image_file)copyfile(image_path, os.path.join(output_folder, dataset, 'images', image_file))txt_file = os.path.splitext(image_file)[0] + '.txt'txt_path = os.path.join(txt_folder, txt_file)# Copy corresponding txt file if existsif os.path.exists(txt_path):copyfile(txt_path, os.path.join(output_folder, dataset, 'labels', txt_file))if __name__ == "__main__":# 图片路径image_folder_path = "./JPEGImages"# 标签路径txt_folder_path = "./Labels"# 划分后数据集路径output_dataset_path = "./dataset"split_dataset(image_folder_path, txt_folder_path, output_dataset_path)

相关文章:

【YOLO】常用脚本

目录 VOC转YOLO划分训练集、测试集与验证集 VOC转YOLO import os import xml.etree.ElementTree as ETdef 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…...

Springboot IOC DI理解及实现+JUnit的引入+参数配置

一、JavaConfig 我们通常使用 Spring 都会使用 XML 配置,随着功能以及业务逻辑的日益复杂,应用伴随着大量的 XML 配置文件以及复杂的 bean 依赖关系,使用起来很不方便。 在 Spring 3.0 开始,Spring 官方就已经开始推荐使用 Java…...

CeresPCL 最小二乘插值(曲线拟合)

一、简介 在多项式插值时,当数据点个数较多时,插值会导致多项式曲线阶数过高,带来不稳定因素。因此我们可以通过固定幂基函数的最高次数 m(m < n),来对我们要拟合的曲线进行降阶。之前的函数形式就可以变为: 既然是最小二乘问题,那么就仍然可以使用Ceres来进行求解。 …...

【TCP/IP】自定义应用层协议,常见端口号

互联网中&#xff0c;主流的是 TCP/IP 五层协议 5G/4G 上网&#xff0c;是有自己的协议栈&#xff0c;要比 TCP/IP 更复杂&#xff08;能够把 TCP/IP 的一部分内容给包含进去了&#xff09; 应用层 可以代表我们所编写的应用程序&#xff0c;只要应用程序里面用到了网络通信…...

Frida 的下载和安装

首先要安装好 python 环境 安装 frida 和 工具包 pip install frida frida-tools 查看版本&#xff1a; frida --version 16.4.8 然后到 github 上下载对应 server &#xff08; 和frida 的版本一致 16.4.8&#xff09; Releases frida/frida (github.com) 查看手机或…...

后端开发刷题 | 链表内指定区间反转【链表篇】

描述 将一个节点数为 size 链表 m 位置到 n 位置之间的区间反转&#xff0c;要求时间复杂度 O(n)O(n)&#xff0c;空间复杂度 O(1)O(1)。 例如&#xff1a; 给出的链表为 1→2→3→4→5→NULL1→2→3→4→5→NULL, m2,n4 返回 1→4→3→2→5→NULL 数据范围&#xff1a; 链表…...

【NVMe系列-提问页与文章总结页面】

NVMe系列-提问页与文章总结页面 问题汇总NVMe协议是什么&#xff1f;PRP 与 PRP List是做什么的&#xff1f; 已写文章汇总 问题汇总 NVMe协议是什么&#xff1f; PRP 与 PRP List是做什么的&#xff1f; 已写文章汇总...

用生成器函数生成表单各字段

生成器函数生成表单字段是非常合适的用法,避免你要用纯javascript做后台时频繁的制作表单&#xff0c;而不能重复利用 //这里是javascript部分&#xff0c;formfiled.js //生成器函数对字段的处理&#xff0c;让各字段name\className\label\value\placeholder赋值到input的属性…...

【xilinx】O-RAN 无线电接口 - Vivado 2020.1 及更新工具版本的发行说明

描述 记录包含 O-RAN 无线电接口 LogiCORE IP 的发行说明和已知问题&#xff0c;包括以下内容&#xff1a; 一般信息已知和已解决的问题 解决方案 一般信息 可以在以下三个位置找到支持的设备&#xff1a; O-RAN 无线电接口 IP 产品指南&#xff08;需要访问O-RAN 安全站点&…...

结营考试- 算法进阶营地 - DAY11

结营考试 - 算法进阶营地 - DAY11 测评链接&#xff1b; A - 打卡题 考点&#xff1a;枚举&#xff1b; 分析 枚举 a _①_ b _②_ c d&#xff0c;中两个运算符的 3 3 3 种可能性&#xff0c;尝试寻找一种符合要求的答案。 参考代码 #include <bits/stdc.h> usi…...

设计模式: 访问者模式

文章目录 一、介绍二、模式结构三、优缺点1、优点2、缺点 四、应用场景 一、介绍 Visitor 模式&#xff08;访问者模式&#xff09;是一种行为设计模式&#xff0c;它允许在不修改对象结构的前提下&#xff0c;增加作用于一组对象上新的操作。就增加新的操作而言&#xff0c;V…...

selenium底层原理详解

目录 1、selenium版本的演变 1.1、Selenium 1.x&#xff08;Selenium RC时代&#xff09; 1.2、Selenium 2.x&#xff08;WebDriver整合时代&#xff09; 1.3、Selenium 3.x 2、selenium原理说明 3、源码说明 3.1、启动webdriver服务建立连接 3.2、发送操作 1、seleni…...

【Solidity】继承

继承 Solidity 中使用 is 关键字实现继承&#xff1a; contract Father {function getNumber() public pure returns (uint) {return 10;}function getNumber2() public pure virtual returns (uint) {return 20;} }contract Son is Father {}现在 Son 就可以调用 Father 的 …...

docker 安装mino服务,启动报错: Fatal glibc error: CPU does not support x86-64-v2

背景 docker 安装mino服务&#xff0c;启动报错&#xff1a; Fatal glibc error: CPU does not support x86-64-v2 原因 Docker 镜像中的 glibc 版本要求 CPU 支持 x86-64-v2 指令集&#xff0c;而你的硬件不支持。 解决办法 降低minio对应的镜像版本 经过验证&#xff1a;qu…...

地图相册系统的设计与实现

摘 要 随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&#xff0c;各行各业相继进入信息管理时代&a…...

使用vh和rem实现元素响应式布局

示例代码 height: calc(100vh 30rem) vh&#xff08;Viewport Height&#xff09;&#xff1a;vh是一个相对单位&#xff0c;代表浏览器窗口高度的百分比&#xff0c;例如20vh就是浏览器窗口高度的20%。 rem&#xff08;root em&#xff09;&#xff1a;rem是通过html根元素…...

螺旋矩阵 II(LeetCode)

题目 给你一个正整数 n &#xff0c;生成一个包含 1 到 n2 所有元素&#xff0c;且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 解题 def generateMatrix(n):matrix [[0] * n for _ in range(n)]top, bottom 0, n - 1left, right 0, n - 1num 1while top <…...

如何快速掌握一款MCU

了解MCU特点 rom &#xff0c;ramgpiotimerpower 明确哪些资源是项目开发需要的 认真理解相关资料模块 开始编程 编写特别的验证程序&#xff08;项目不紧&#xff09;按照自己的理解编写&#xff08;老司机&#xff0c;时间紧张&#xff09; 掌握MCU基本功能 定时器 固…...

XSS-DOM

文章目录 源码SVG标签Dom-Clobbringtostring 源码 <script>const data decodeURIComponent(location.hash.substr(1));;const root document.createElement(div);root.innerHTML data;// 这里模拟了XSS过滤的过程&#xff0c;方法是移除所有属性&#xff0c;sanitize…...

uniapp去掉页面导航条

在pages.json文件中&#xff0c;globalStyle中添加 ”app-plus“:{"titleNView":false }...

告别手描!用ArcGIS的ArcScan插件5分钟搞定等高线矢量化(附详细参数设置)

高效地形图处理&#xff1a;ArcScan插件等高线矢量化全流程解析 在测绘与地理信息系统工作中&#xff0c;纸质地形图的数字化一直是基础却耗时的环节。传统手工矢量化不仅效率低下&#xff0c;还容易引入人为误差。ArcGIS平台中的ArcScan插件为解决这一痛点提供了专业方案&…...

Grounding DINO实战评测:对比GLIP、OV-DETR,在COCO和LVIS数据集上到底强在哪?

Grounding DINO技术解析&#xff1a;多模态开放集检测的突破与实践 在计算机视觉与自然语言处理的交叉领域&#xff0c;开放集目标检测正经历着前所未有的技术革新。传统检测模型受限于预定义类别集的桎梏&#xff0c;而新一代多模态大模型通过融合视觉与语言信号&#xff0c;实…...

Lusca CSP策略完全指南:构建安全的内容安全策略

Lusca CSP策略完全指南&#xff1a;构建安全的内容安全策略 【免费下载链接】lusca Application security for express apps. 项目地址: https://gitcode.com/gh_mirrors/lu/lusca Lusca是一款专为Express应用打造的安全中间件&#xff0c;提供了全面的内容安全策略&…...

别再手动拖拽了!用Java POI + XSSFDrawing,5行代码搞定Excel单元格图片批量插入(附完整源码)

5行代码实现Excel图片批量插入&#xff1a;Java POI XSSFDrawing高效开发指南 1. 为什么需要自动化Excel图片插入&#xff1f; 在日常报表开发中&#xff0c;我们经常遇到需要将大量图片&#xff08;如用户头像、产品图&#xff09;嵌入Excel单元格的场景。传统手动操作存在三…...

软件设计师下午题训练2-3题+2020下上午题错题解析 练习真题训练15

一、训练题2 1、2021上 &#xff08;1&#xff09; &#xff08;2&#xff09; a:团购点编号 b:客户电话 供货 主键 &#xff1a;&#xff08;供货商编号&#xff0c;团购点编号&#xff09; 外键&#xff1a;供货商编号、团购点编号 订单 主键&#xff1a;订单编号…...

基于 HarmonyOS 6.0 的家政服务预约页面实战开发:ArkUI 页面构建与跨端设计深度解析

基于 HarmonyOS 6.0 的家政服务预约页面实战开发&#xff1a;ArkUI 页面构建与跨端设计深度解析 前言 随着 HarmonyOS 生态逐渐成熟&#xff0c;HarmonyOS NEXT 与 HarmonyOS 6.0 的持续推进&#xff0c;越来越多开发者开始从传统 Android、Flutter、Web 技术栈逐步迁移到鸿蒙原…...

LeetCode 重新安排行程题解

LeetCode 重新安排行程题解 题目描述 给定一个机票列表&#xff0c;从起点出发&#xff0c;重新安排行程。 示例&#xff1a; 输入&#xff1a;tickets [["MUC","LHR"],["JFK","MUC"],["SFO","SJC"],["LHR&…...

为什么你的Perplexity自定义主题总被覆盖?揭秘其CSS优先级陷阱与3层覆盖防护机制

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;Perplexity自定义主题失效的典型现象与归因初判 当用户在 Perplexity 桌面端或浏览器扩展中配置了 CSS 主题&#xff08;如通过 userChrome.css 或注入式样式脚本&#xff09;&#xff0c;却未观察到预期视觉…...

别再死记硬背了!用Pointer Network让AI学会‘抄作业’,搞定文本摘要和对话生成

别再死记硬背了&#xff01;用Pointer Network让AI学会‘抄作业’&#xff0c;搞定文本摘要和对话生成 想象一下&#xff0c;当你面对一篇冗长的技术文档时&#xff0c;最有效的学习方法是什么&#xff1f;不是逐字背诵&#xff0c;而是用荧光笔划出关键概念——这正是Pointer …...

Java Stream流式编程实战

前言 在现代软件开发中&#xff0c;Java Stream流式编程实战是一个非常重要的技术点。本文将从原理到实践&#xff0c;带你深入理解这一技术&#xff0c;并通过完整的代码示例帮助你快速掌握核心知识点。 核心概念 基本原理 Java Stream流式编程实战的核心在于理解其底层机制。…...