【配置 YOLOX 用于按目录分类的图片数据集】

news2025/6/12 20:42:19

现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决

在这里插入图片描述

要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤:

将需要检测的图标截取为独立的图片,放入到对应的目录中,如 banner ,apple 等

1. 准备数据集结构

假设你的原始数据集结构如下:

dataset_root/
    class1/
        img1.jpg
        img2.jpg
        ...
    class2/
        img1.jpg
        img2.jpg
        ...
    ...

2. 转换为 YOLOX 所需的格式

YOLOX 通常需要以下格式:

图片文件

对应的标注文件(每个图片一个 .txt 文件)

训练/验证集的划分文件

创建 Python 转换脚本

import os
import glob
from sklearn.model_selection import train_test_split

def convert_directory_to_yolox(dataset_root, output_dir):
    # 获取所有类别
    classes = [d for d in os.listdir(dataset_root) 
              if os.path.isdir(os.path.join(dataset_root, d))]
    classes.sort()
    
    # 创建类别映射文件
    with open(os.path.join(output_dir, 'classes.txt'), 'w') as f:
        f.write('\n'.join(classes))
    
    # 收集所有图片路径和标签
    image_paths = []
    labels = []
    for class_id, class_name in enumerate(classes):
        class_dir = os.path.join(dataset_root, class_name)
        for img_path in glob.glob(os.path.join(class_dir, '*')):
            if img_path.lower().endswith(('.png', '.jpg', '.jpeg')):
                image_paths.append(img_path)
                labels.append(class_id)
    
    # 划分训练集和验证集
    train_img, val_img, train_lbl, val_lbl = train_test_split(
        image_paths, labels, test_size=0.2, random_state=42)
    
    # 创建标注文件和数据集列表
    def write_dataset(img_list, lbl_list, list_file):
        with open(list_file, 'w') as f_list:
            for img_path, label in zip(img_list, lbl_list):
                # 创建标注文件路径
                base_name = os.path.splitext(os.path.basename(img_path))[0]
                txt_path = os.path.join(output_dir, 'labels', base_name + '.txt')
                
                # 写入标注文件
                os.makedirs(os.path.dirname(txt_path), exist_ok=True)
                with open(txt_path, 'w') as f_txt:
                    # YOLO格式: class_id x_center y_center width height
                    # 对于全图分类,bbox是整张图片
                    f_txt.write(f"{label} 0.5 0.5 1.0 1.0\n")
                
                # 写入数据集列表
                f_list.write(f"{img_path}\n")
    
    os.makedirs(os.path.join(output_dir, 'labels'), exist_ok=True)
    write_dataset(train_img, train_lbl, os.path.join(output_dir, 'train.txt'))
    write_dataset(val_img, val_lbl, os.path.join(output_dir, 'val.txt'))

# 使用示例
convert_directory_to_yolox('path/to/your/dataset_root', 'path/to/yolox_dataset')

3. 配置 YOLOX

修改 exps 中的配置文件

找到或创建你的实验配置文件(如 exps/example/yolox_s.py),修改以下部分:

class Exp(yolox_base.Exp):
    def __init__(self):
        super(Exp, self).__init__()
        self.num_classes = 你的类别数量
        self.data_dir = "转换后的数据集路径"
        self.train_ann = "train.txt"
        self.val_ann = "val.txt"
        self.input_size = (640, 640)  # 根据你的需求调整
        self.test_size = (640, 640)

修改数据加载部分

确保你的数据加载器能够处理这种格式。YOLOX 默认使用 MosaicDetection 数据集,你可能需要自定义:

from yolox.data import get_yolox_datadir
from yolox.data.datasets import DATASET_REGISTRY

@DATASET_REGISTRY.register()
class YourDataset(Dataset):
    def __init__(self, ...):
        # 实现你的数据集加载逻辑
        pass

4. 训练命令

使用修改后的配置运行训练:

python tools/train.py -f exps/example/yolox_s.py -d 1 -b 64 --fp16 -o -c yolox_s.pth

注意事项

这种方法将整个图像作为一个"边界框"处理,适用于图像分类任务

如果你需要真正的目标检测(图像中有多个对象),需要为每个对象提供精确的边界框标注

考虑调整输入尺寸以适应你的图像比例

对于分类任务,可能需要修改损失函数为更适合分类的损失(如交叉熵)

如果你需要真正的目标检测而不是图像分类,则需要为每个图像提供包含对象位置和类别的详细标注文件。

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

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

相关文章

从零实现STL哈希容器:unordered_map/unordered_set封装详解

本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍

文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结&#xff1a; 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析&#xff1a; 实际业务去理解体会统一注…

2025盘古石杯决赛【手机取证】

前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来&#xff0c;实在找不到&#xff0c;希望有大佬教一下我。 还有就会议时间&#xff0c;我感觉不是图片时间&#xff0c;因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…

DBAPI如何优雅的获取单条数据

API如何优雅的获取单条数据 案例一 对于查询类API&#xff0c;查询的是单条数据&#xff0c;比如根据主键ID查询用户信息&#xff0c;sql如下&#xff1a; select id, name, age from user where id #{id}API默认返回的数据格式是多条的&#xff0c;如下&#xff1a; {&qu…

04-初识css

一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…

uniapp微信小程序视频实时流+pc端预览方案

方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度​WebSocket图片帧​定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐​RTMP推流​TRTC/即构SDK推流❌ 付费方案 &#xff08;部分有免费额度&#x…

ElasticSearch搜索引擎之倒排索引及其底层算法

文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…

Linux-07 ubuntu 的 chrome 启动不了

文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了&#xff0c;报错如下四、启动不了&#xff0c;解决如下 总结 问题原因 在应用中可以看到chrome&#xff0c;但是打不开(说明&#xff1a;原来的ubuntu系统出问题了&#xff0c;这个是备用的硬盘&a…

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成

厌倦手动写WordPress文章&#xff1f;AI自动生成&#xff0c;效率提升10倍&#xff01; 支持多语言、自动配图、定时发布&#xff0c;让内容创作更轻松&#xff01; AI内容生成 → 不想每天写文章&#xff1f;AI一键生成高质量内容&#xff01;多语言支持 → 跨境电商必备&am…

PL0语法,分析器实现!

简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践

6月5日&#xff0c;2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席&#xff0c;并作《智能体在安全领域的应用实践》主题演讲&#xff0c;分享了在智能体在安全领域的突破性实践。他指出&#xff0c;百度通过将安全能力…

Ascend NPU上适配Step-Audio模型

1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统&#xff0c;支持多语言对话&#xff08;如 中文&#xff0c;英文&#xff0c;日语&#xff09;&#xff0c;语音情感&#xff08;如 开心&#xff0c;悲伤&#xff09;&#x…

【Java_EE】Spring MVC

目录 Spring Web MVC ​编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 ​编辑参数重命名 RequestParam ​编辑​编辑传递集合 RequestParam 传递JSON数据 ​编辑RequestBody ​…

ardupilot 开发环境eclipse 中import 缺少C++

目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…

12.找到字符串中所有字母异位词

&#x1f9e0; 题目解析 题目描述&#xff1a; 给定两个字符串 s 和 p&#xff0c;找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义&#xff1a; 若两个字符串包含的字符种类和出现次数完全相同&#xff0c;顺序无所谓&#xff0c;则互为…

MySQL 8.0 OCP 英文题库解析(十三)

Oracle 为庆祝 MySQL 30 周年&#xff0c;截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始&#xff0c;将英文题库免费公布出来&#xff0c;并进行解析&#xff0c;帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…

C++ 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战

“&#x1f916;手搓TuyaAI语音指令 &#x1f60d;秒变表情包大师&#xff0c;让萌系Otto机器人&#x1f525;玩出智能新花样&#xff01;开整&#xff01;” &#x1f916; Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制&#xff08;TuyaAI…

《基于Apache Flink的流处理》笔记

思维导图 1-3 章 4-7章 8-11 章 参考资料 源码&#xff1a; https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…