快速构建 yolo 训练集 测试集

news2024/11/27 21:08:11

在机器学习工作流程中,数据处理是一个关键步骤。通常我们会使用不同的工具来标注数据,而每种工具都有其特定的格式。在这篇文章中,我们将展示如何从数据集中快速抽取样本,构建训练集和测试集。

YOLO简介

YOLO(You Only Look Once)是一种实时对象检测系统,以其速度和精度著称。YOLO将对象检测视为一个回归问题,直接从图像像素中预测边界框和类别概率。与其他检测器不同,YOLO在单一神经网络中完成整个检测过程,因而速度非常快,适用于实时应用。

Show Me the Code

标签合法性检测

在处理数据集时,确保每个图像都有对应的标签文件是至关重要的。以下代码用于检查数据集中图像和标签文件的配对情况:

import os

def check_file_pairs(directory):
    files = os.listdir(directory)
    images = [f for f in files if f.endswith('.jpg')]
    labels = [f for f in files if f.endswith('.txt')]
  
    image_basenames = set(os.path.splitext(f)[0] for f in images)
    label_basenames = set(os.path.splitext(f)[0] for f in labels)
  
    missing_labels = image_basenames - label_basenames
    missing_images = label_basenames - image_basenames
  
    if missing_labels:
        print("Missing label files for images:", missing_labels)
    if missing_images:
        print("Missing image files for labels:", missing_images)
    if not missing_labels and not missing_images:
        print("All image and label files are correctly paired.")

# Example usage
directory = 'F:\\watermeter\\data\\ocr_data\\all'
check_file_pairs(directory)

代码解释

该函数遍历给定目录中的所有文件,分别列出以.jpg结尾的图像文件和以.txt结尾的标签文件。通过集合操作,我们可以找出哪些图像文件缺少对应的标签文件,反之亦然。这样,我们可以确保数据集的完整性,避免后续训练过程中出现错误。

复制样本数据

为了构建训练集和验证集,我们需要将数据集保存在all文件夹中,并按预设比例随机选取样本,分别复制到trainval文件夹中。

import os
import shutil
import random

def create_directories(base_dir):
    train_dir = os.path.join(base_dir, 'train')
    val_dir = os.path.join(base_dir, 'val')
  
    if os.path.exists(train_dir) or os.path.exists(val_dir):
        print("Train or Val directory already exists. Exiting.")
        return False
  
    os.makedirs(train_dir)
    os.makedirs(val_dir)
    return True

def split_data(base_dir, train_ratio=0.8):
    all_dir = os.path.join(base_dir, 'all')
    train_dir = os.path.join(base_dir, 'train')
    val_dir = os.path.join(base_dir, 'val')
  
    images = [f for f in os.listdir(all_dir) if f.endswith('.jpg')]
    random.shuffle(images)
  
    train_size = int(len(images) * train_ratio)
    train_images = images[:train_size]
    val_images = images[train_size:]
  
    for image in train_images:
        label = image.replace('.jpg', '.txt')
        shutil.copy(os.path.join(all_dir, image), train_dir)
        shutil.copy(os.path.join(all_dir, label), train_dir)
  
    for image in val_images:
        label = image.replace('.jpg', '.txt')
        shutil.copy(os.path.join(all_dir, image), val_dir)
        shutil.copy(os.path.join(all_dir, label), val_dir)

base_dir = 'path_to_data'
if create_directories(base_dir):
    split_data(base_dir, train_ratio=0.8)

代码解释

  1. 创建目录create_directories函数用于在指定的基础目录下创建trainval目录。如果目录已存在,函数将退出以防止覆盖现有数据。
  2. 数据分割split_data函数负责将数据集按指定比例分为训练集和验证集。首先,获取所有图像文件并随机打乱顺序。然后,根据比例计算训练集的大小,将图像和对应的标签文件复制到相应的目录中。

通过这些步骤,您可以快速构建适用于YOLO训练的高质量数据集。希望这篇文章能帮助您更高效地进行数据准备工作!


欢迎关注作者公众号,获取更多技术分享
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2189783.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

响应重定向

响应重定向 重定向也可以跳转servlet,也可以跳转页面 (功能与请求转发类似) 使用的方法: resp.sendRedirect("路径"); 测试: 改造登录Servlet,重定向到ListServlet ps: 可以跳转到ListServlet,但是因为请求域数据不能共享,可能会报错 特点 重定向是响应重定向,是浏…

大语言模型的微调方法_大语言模型六种微调方法,零基础入门到精通,收藏这一篇就够了

01 引言 自2018年BERT发布以来,“预训练微调”成为语言模型的通用范式。以ChatGPT为代表的大语言模型针对不同任务构造Prompt来训练,本质上仍然是预训练与微调的使用范式。千亿规模的参数微调需要大量算力,即使提供了预训练的基座模型&…

jQuery——文档的增删改

1、添加 / 替换元素 append(content):向当前匹配的所有元素内部的最后插入指定内容prepend(content):向当前匹配的所有元素内部的最前面插入指定内容before(content):…

一、机器学习算法与实践_06迭代法和KMeans、线性回归、逻辑回归算法笔记

0 迭代法 迭代法不仅是机器学习、深度学习的核心,也是整个人工智能领域的重要概念,其对于算法的设计和实现至关重要 0.1 适合场景 对于不能一次搞定的问题,将其分成多步来解决,逐步逼近解决方案 0.2 典型应用 KMeans 聚类算法…

开放式耳机哪个品牌好?适合运动的开放式蓝牙耳机分享

如今,开放式耳机的购买量呈现出持续上升的趋势,变得越来越多。而随着人们对音频设备需求的不断提升以及对舒适佩戴体验和自然聆听感受的日益追求,开放式耳机也以其独特的优势逐渐走进大众的视野,成为众多消费者的新宠。 在各大电…

中文llama3仿openai api实战

课程介绍 本次课属于【大模型本地部署应用】,基于Chinese-LLaMA-Alpaca-3(GitHub - ymcui/Chinese-LLaMA-Alpaca-3: 中文羊驼大模型三期项目 (Chinese Llama-3 LLMs) developed from Meta Llama 3)项目,介绍如何封装一个私有的兼容…

谷歌收录批量查询,谷歌收录批量查询的简单方法

谷歌收录批量查询是网站管理员和SEO优化人员常见的需求,以下提供几种简单且高效的批量查询方法: 一、使用Google Search Console(谷歌搜索控制台) 注册并验证网站: 首先,确保你已经在Google Search Conso…

常用正则匹配中国手机号码

正则表达式匹配中国的手机号码。 我可以提供一些匹配中国手机号码的常用正则表达式: 仅匹配11位数字的手机号码:^1[3456789]\d{9}$匹配以1开头的11位数字手机号码:^1\d{10}$更宽松的匹配规则,允许0开头的手机号码:^(?:0|86|+?86)?1[3-9]\d{9}$ 这些正则表达式可…

Java基础知识总结(超详细整理)

Java基础知识总结(超详细整理) Java语言的特点 1.面向对象 面向对象(OOP)就是Java语言的基础,也是Java语言的重要特性。面向对象的概念:生活中的一切事物都可以被称之为对象,生活中随处可见的事物就是一个对象&#…

CMSIS-RTOS V2封装层专题视频,一期视频将常用配置和用法梳理清楚,适用于RTX5和FreeRTOS(2024-09-28)

【前言】 本期视频就一个任务,通过ARM官方的CMSIS RTOS文档,将常用配置和用法给大家梳理清楚。 对于初次使用CMSIS-RTOS的用户来说,通过梳理官方文档,可以系统的了解各种用法,方便大家再进一步的自学或者应用&#x…

【人工智能深度学习应用】妙策API最佳实践

功能概述 在文章创作过程中,用户可以借助AI妙策来辅助创作。AI妙策主要集中在聚合热点话题榜和平台话题榜两个方面。 具体功能 话题分析 AI妙策中的话题分析可以作为创作的灵感来源,通过网页视角选题、热门视角选题、时效视角选题、新颖视角选题&…

网站建设中,如何处理多语言版本?

在全球化的今天,网站多语言版本的处理成为了一项基本要求,尤其是对于面向国际用户的企业来说。以下是一些关于网站建设中如何处理多语言版本问题的建议: 使用URL国际化:通过在URL中添加语言代码(如example.com/en/表示…

【文心智能体】猫咪用品购物指南搭建教程

前言 随着科技的飞速发展和人们生活水平的提高,越来越多的家庭开始养宠物,其中猫咪因其可爱、独立和温顺的性格而备受青睐。然而,面对市场上琳琅满目的猫咪用品,如何为自家的“喵星人”挑选最合适的商品,成为了许多宠…

vue3学习:axios输入城市名称查询该城市天气

说来惭愧,接触前端也有很长一段时间了,最近才学习axios与后端的交互。今天学习了一个查询城市天气的案例,只需输入城市名称,点击“查询”按钮便可以进行查询。运行效果如下: 案例只实现了基本的查询功能,没…

51单片机的金属探测器【proteus仿真+程序+报告+原理图+演示视频】

1、主要功能 该系统由AT89C51/STC89C52单片机LCD1602显示模块金属检测传感器继电器LED、蜂鸣器等模块构成。适用于金属探测仪、检测金属、剔除金属等相似项目。 可实现功能: 1、LCD1602实时显示是否检测到金属 2、金属检测传感器(按键模拟)检测是否有…

利用 Python 爬虫采集 1688商品详情

1688是中国的一个大型B2B电子商务平台,主要用于批发和采购各种商品。对于需要从1688上获取商品详情数据、工程数据或店铺数据的用户来说,可以采用以下几种常见的方法: 官方API接口:如果1688提供了官方的API接口,那么可…

Java | Leetcode Java题解之第456题132模式

题目&#xff1a; 题解&#xff1a; class Solution {public boolean find132pattern(int[] nums) {int n nums.length;List<Integer> candidateI new ArrayList<Integer>();candidateI.add(nums[0]);List<Integer> candidateJ new ArrayList<Integer…

【华为HCIP实战课程四】OSPF邻居关系排错时间和区域问题,网络工程师

一、OSPF邻居关系排错 1、MA网络(默认的以太网、FR和ATM)要求掩码一致 2、相邻OSPF设备RID相同不能建立邻居-----上节已经详细演示说明 3、同一链路必须相同区域 4、Hello和死亡时间匹配 5、MTU检测 6、认证 7、Flag位的一致性 8、华为设备上网络类型不一致 二、同一…

红日靶场1学习笔记

一、准备工作 1、靶场搭建 靶场地址 靶场描述 靶场拓扑图 其他相关靶场搭建详情见靶场地址相关说明 2、靶场相关主机信息 后续打靶场的过程中&#xff0c;如果不是短时间内完成&#xff0c;可能ip会有变化 主机ip密码角色win7192.168.122.131hongrisec2019!边界服务器win…

华为OD机试 - 垃圾短信识别(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 2024E卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试真题&#xff08;Python/JS/C/C&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;私信哪吒&#xff0c;备注华为OD&#xff0c;加入华为OD刷题交流群&#xff0c;…