【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】自定义应用层协议,常见端口号
互联网中,主流的是 TCP/IP 五层协议 5G/4G 上网,是有自己的协议栈,要比 TCP/IP 更复杂(能够把 TCP/IP 的一部分内容给包含进去了) 应用层 可以代表我们所编写的应用程序,只要应用程序里面用到了网络通信…...
Frida 的下载和安装
首先要安装好 python 环境 安装 frida 和 工具包 pip install frida frida-tools 查看版本: frida --version 16.4.8 然后到 github 上下载对应 server ( 和frida 的版本一致 16.4.8) Releases frida/frida (github.com) 查看手机或…...
后端开发刷题 | 链表内指定区间反转【链表篇】
描述 将一个节点数为 size 链表 m 位置到 n 位置之间的区间反转,要求时间复杂度 O(n)O(n),空间复杂度 O(1)O(1)。 例如: 给出的链表为 1→2→3→4→5→NULL1→2→3→4→5→NULL, m2,n4 返回 1→4→3→2→5→NULL 数据范围: 链表…...
【NVMe系列-提问页与文章总结页面】
NVMe系列-提问页与文章总结页面 问题汇总NVMe协议是什么?PRP 与 PRP List是做什么的? 已写文章汇总 问题汇总 NVMe协议是什么? PRP 与 PRP List是做什么的? 已写文章汇总...
用生成器函数生成表单各字段
生成器函数生成表单字段是非常合适的用法,避免你要用纯javascript做后台时频繁的制作表单,而不能重复利用 //这里是javascript部分,formfiled.js //生成器函数对字段的处理,让各字段name\className\label\value\placeholder赋值到input的属性…...
【xilinx】O-RAN 无线电接口 - Vivado 2020.1 及更新工具版本的发行说明
描述 记录包含 O-RAN 无线电接口 LogiCORE IP 的发行说明和已知问题,包括以下内容: 一般信息已知和已解决的问题 解决方案 一般信息 可以在以下三个位置找到支持的设备: O-RAN 无线电接口 IP 产品指南(需要访问O-RAN 安全站点&…...
结营考试- 算法进阶营地 - DAY11
结营考试 - 算法进阶营地 - DAY11 测评链接; A - 打卡题 考点:枚举; 分析 枚举 a _①_ b _②_ c d,中两个运算符的 3 3 3 种可能性,尝试寻找一种符合要求的答案。 参考代码 #include <bits/stdc.h> usi…...
设计模式: 访问者模式
文章目录 一、介绍二、模式结构三、优缺点1、优点2、缺点 四、应用场景 一、介绍 Visitor 模式(访问者模式)是一种行为设计模式,它允许在不修改对象结构的前提下,增加作用于一组对象上新的操作。就增加新的操作而言,V…...
selenium底层原理详解
目录 1、selenium版本的演变 1.1、Selenium 1.x(Selenium RC时代) 1.2、Selenium 2.x(WebDriver整合时代) 1.3、Selenium 3.x 2、selenium原理说明 3、源码说明 3.1、启动webdriver服务建立连接 3.2、发送操作 1、seleni…...
【Solidity】继承
继承 Solidity 中使用 is 关键字实现继承: 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服务,启动报错: Fatal glibc error: CPU does not support x86-64-v2 原因 Docker 镜像中的 glibc 版本要求 CPU 支持 x86-64-v2 指令集,而你的硬件不支持。 解决办法 降低minio对应的镜像版本 经过验证:qu…...
地图相册系统的设计与实现
摘 要 随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生,各行各业相继进入信息管理时代&a…...
使用vh和rem实现元素响应式布局
示例代码 height: calc(100vh 30rem) vh(Viewport Height):vh是一个相对单位,代表浏览器窗口高度的百分比,例如20vh就是浏览器窗口高度的20%。 rem(root em):rem是通过html根元素…...
螺旋矩阵 II(LeetCode)
题目 给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 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 ,ramgpiotimerpower 明确哪些资源是项目开发需要的 认真理解相关资料模块 开始编程 编写特别的验证程序(项目不紧)按照自己的理解编写(老司机,时间紧张) 掌握MCU基本功能 定时器 固…...
XSS-DOM
文章目录 源码SVG标签Dom-Clobbringtostring 源码 <script>const data decodeURIComponent(location.hash.substr(1));;const root document.createElement(div);root.innerHTML data;// 这里模拟了XSS过滤的过程,方法是移除所有属性,sanitize…...
uniapp去掉页面导航条
在pages.json文件中,globalStyle中添加 ”app-plus“:{"titleNView":false }...
告别手描!用ArcGIS的ArcScan插件5分钟搞定等高线矢量化(附详细参数设置)
高效地形图处理:ArcScan插件等高线矢量化全流程解析 在测绘与地理信息系统工作中,纸质地形图的数字化一直是基础却耗时的环节。传统手工矢量化不仅效率低下,还容易引入人为误差。ArcGIS平台中的ArcScan插件为解决这一痛点提供了专业方案&…...
Grounding DINO实战评测:对比GLIP、OV-DETR,在COCO和LVIS数据集上到底强在哪?
Grounding DINO技术解析:多模态开放集检测的突破与实践 在计算机视觉与自然语言处理的交叉领域,开放集目标检测正经历着前所未有的技术革新。传统检测模型受限于预定义类别集的桎梏,而新一代多模态大模型通过融合视觉与语言信号,实…...
Lusca CSP策略完全指南:构建安全的内容安全策略
Lusca CSP策略完全指南:构建安全的内容安全策略 【免费下载链接】lusca Application security for express apps. 项目地址: https://gitcode.com/gh_mirrors/lu/lusca Lusca是一款专为Express应用打造的安全中间件,提供了全面的内容安全策略&…...
别再手动拖拽了!用Java POI + XSSFDrawing,5行代码搞定Excel单元格图片批量插入(附完整源码)
5行代码实现Excel图片批量插入:Java POI XSSFDrawing高效开发指南 1. 为什么需要自动化Excel图片插入? 在日常报表开发中,我们经常遇到需要将大量图片(如用户头像、产品图)嵌入Excel单元格的场景。传统手动操作存在三…...
软件设计师下午题训练2-3题+2020下上午题错题解析 练习真题训练15
一、训练题2 1、2021上 (1) (2) a:团购点编号 b:客户电话 供货 主键 :(供货商编号,团购点编号) 外键:供货商编号、团购点编号 订单 主键:订单编号…...
基于 HarmonyOS 6.0 的家政服务预约页面实战开发:ArkUI 页面构建与跨端设计深度解析
基于 HarmonyOS 6.0 的家政服务预约页面实战开发:ArkUI 页面构建与跨端设计深度解析 前言 随着 HarmonyOS 生态逐渐成熟,HarmonyOS NEXT 与 HarmonyOS 6.0 的持续推进,越来越多开发者开始从传统 Android、Flutter、Web 技术栈逐步迁移到鸿蒙原…...
LeetCode 重新安排行程题解
LeetCode 重新安排行程题解 题目描述 给定一个机票列表,从起点出发,重新安排行程。 示例: 输入:tickets [["MUC","LHR"],["JFK","MUC"],["SFO","SJC"],["LHR&…...
为什么你的Perplexity自定义主题总被覆盖?揭秘其CSS优先级陷阱与3层覆盖防护机制
更多请点击: https://codechina.net 第一章:Perplexity自定义主题失效的典型现象与归因初判 当用户在 Perplexity 桌面端或浏览器扩展中配置了 CSS 主题(如通过 userChrome.css 或注入式样式脚本),却未观察到预期视觉…...
别再死记硬背了!用Pointer Network让AI学会‘抄作业’,搞定文本摘要和对话生成
别再死记硬背了!用Pointer Network让AI学会‘抄作业’,搞定文本摘要和对话生成 想象一下,当你面对一篇冗长的技术文档时,最有效的学习方法是什么?不是逐字背诵,而是用荧光笔划出关键概念——这正是Pointer …...
Java Stream流式编程实战
前言 在现代软件开发中,Java Stream流式编程实战是一个非常重要的技术点。本文将从原理到实践,带你深入理解这一技术,并通过完整的代码示例帮助你快速掌握核心知识点。 核心概念 基本原理 Java Stream流式编程实战的核心在于理解其底层机制。…...
