YOLOX训练自己的数据集(头铁出来的超详细教程)

2024-02-14 00:59

本文主要是介绍YOLOX训练自己的数据集(头铁出来的超详细教程),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这里写自定义目录标题

  • 1.YOLOX环境搭建
    • 1.1新建一个conda环境
    • 1.2安装代码依赖的库文件
    • 1.3通过setup.py安装一些库文件
    • 1.4下载apex文件
    • 1.4下载pycocotools
  • 2.创建自己的数据集
    • 2.1创建VOC格式数据集
  • 3.训练
    • 3.1修改文件代码
    • 3.2开始训练
  • 3.测试
    • 3.1测试自己的训练结果
  • 3.预测结果
      • 参考(侵删)

1.YOLOX环境搭建

首先,搭建YOLOX所需要的环境。这里我使用Anaconda来搭建的。在搭建环境之前,先附上YOLOX的官方代码: 官方代码链接.

1.1新建一个conda环境

conda create -n yolox python=3.8
conda activate yolox   //进入环境

如果你想用原有的环境来搭建,也ok,直接激活你的环境。

1.2安装代码依赖的库文件

用到你下载好的官方文件,在命令行中

cd your/yolox-main/path
pip install -r requirements.txt

1.3通过setup.py安装一些库文件

python3 setup.py develop

1.4下载apex文件

apex下载链接.
下载好后cd到文件夹中并安装

cd path/to/your/apex
python3 setup.py install

安装成功后会显示
在这里插入图片描述

1.4下载pycocotools

pip3 install cython
pip3 install 'git+https://github.com/cocodataset/cocoapi.git#subdirectory=PythonAPI'

2.创建自己的数据集

2.1创建VOC格式数据集

yolox可以跑两种格式的数据集voc和coco,这里我用voc举例。
yolox的预训练模型 下载地址.我用yolox-s.pth举例
在这里插入图片描述
这是目录格式要求,可以自己手动建立。

其中,annotation用于存放xml格式的标签文件,JPEGimage用于存放原始图片。ImageSets/Main下的两个文件可以根据代码建立。

# oding = utf-8
# -*- coding:utf-8 -*-
import os
import randomtrainval_percent = 0.1
train_percent = 0.9
xmlfilepath = r'E:\YOLOX-main\datasets\VOCdevkit\VOC2007\Annotations'
txtsavepath = r'E:\YOLOX-main\datasets\VOCdevkit\VOC2007\ImageSets'
total_xml = os.listdir(xmlfilepath)num = len(total_xml)
list = range(num)
tv = int(num * trainval_percent)
tr = int(tv * train_percent)
trainval = random.sample(list, tv)
train = random.sample(trainval, tr)ftest = open(r'E:\YOLOX-main\datasets\VOCdevkit\VOC2007\ImageSets\Main\test.txt', 'w')
ftrain = open(r'\YOLOX-main\datasets\VOCdevkit\VOC2007\ImageSets\Main\trainval.txt', 'w')for i in list:name = total_xml[i][:-4] + '\n'if i in trainval:ftest.write(name)else:ftrain.write(name)ftrain.close()
ftest.close()

运行此代码后会出现两个.txt文件。

3.训练

3.1修改文件代码

修改 yolox/data/dataloading.py

def get_yolox_datadir():"""get dataset dir of YOLOX. If environment variable named `YOLOX_DATADIR` is set,this function will return value of the environment variable. Otherwise, use data"""yolox_datadir = os.getenv("YOLOX_DATADIR", None)if yolox_datadir is None:import yoloxyolox_path = os.path.dirname(os.path.dirname(yolox.__file__))//修改这里yolox_datadir = os.path.join(yolox_path, "datasets")return yolox_datadir

其次,修改exps/example/yolox_voc/yolox_voc_s.py

class Exp(MyExp):def __init__(self):super(Exp, self).__init__()self.num_classes = 10 #修改类别数目self.depth = 0.33self.width = 0.50self.warmup_epochs = 1

然后,修改这里,这块复制就好了

        with wait_for_the_master(local_rank):dataset = VOCDetection(data_dir=os.path.join(get_yolox_datadir(), "VOCdevkit"),//修改这里image_sets=[('2007', 'trainval')],#, ('2012', 'trainval')img_size=self.input_size,preproc=TrainTransform(max_labels=50,flip_prob=self.flip_prob,hsv_prob=self.hsv_prob),cache=cache_img,)

修改yolox/data/datasets/voc_classes.py为自己的类别。

VOC_CLASSES = ('1','2','3','4','5','6','7','8','9','10',
)

最后,修改yolox/evaluators/voc_eval.py,添加root为annotation的绝对路径。

#修改yolox/evaluators/voc_eval.py,添加root为annotation的绝对路径。
root = r'E:\YOLOX-main\datasets\VOCdevkit\VOC2007\Annotations\\'
def parse_rec(filename):""" Parse a PASCAL VOC xml file """tree = ET.parse(root + filename)

3.2开始训练

超参数设置:

python tools/train.py -f exps/example/yolox_voc/yolox_voc_s.py -d 0 -b 4 --fp16  -c yolox_s.pth

在这里插入图片描述

在这里插入图片描述
如果训练中断,开启,resume

python3 tools/train.py -f exps/example/yolox_voc/yolox_voc_s.py -d 0 -b 64 -c <last_epoch_ckpt.pth的路径> --resume

3.测试

3.1测试自己的训练结果

修改yolox/data/datasets/下的init.py文件,添加:
from .voc_classes import VOC_CLASSES
在这里插入图片描述

之后在toos/demo.py文件中将COCO_CLASSES全部修改为VOC_CLASSES
直接在此文件find下COCO_CLASSES然后全部修改为VOC_CLASSES就好了。
在这里插入图片描述

python tools/demo.py image -f exps/example/yolox_voc/yolox_voc_s.py -c weights/best_ckpt.pth --path assets/class01.jpg --conf 0.25 --nms 0.45 --tsize 640 --save_result --device [cpu/gpu]

-c 代表训练好的权重,-path 代表你要预测的图片存放的文件夹,
若想进行视频预测,只需将下面的 image 更换为 video;
若想预测整个文件夹,将.jpg去掉,只留 --path assets/

3.预测结果

跑了300个epoch训练了两个类,一个是飞机一个是油罐,感觉精度在280个epoch的时候明显上升,但是最终的结果不如v5好,不知道是因为我将.txt转xml出错了还是果真效果就是不太行,这个我还没分析。上图:
在这里插入图片描述
上图是yolox-s的效果,我人麻了……
在这里插入图片描述
上图是yolov5-x的效果。。。

好了我继续trick了,感兴趣的小伙伴来一起交流
持续更新中……

参考(侵删)

文献1.
文献2.
文献3.
文献4.

这篇关于YOLOX训练自己的数据集(头铁出来的超详细教程)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/707103

相关文章

SpringBoot整合liteflow的详细过程

《SpringBoot整合liteflow的详细过程》:本文主要介绍SpringBoot整合liteflow的详细过程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋...  liteflow 是什么? 能做什么?总之一句话:能帮你规范写代码逻辑 ,编排并解耦业务逻辑,代码

MyBatisPlus如何优化千万级数据的CRUD

《MyBatisPlus如何优化千万级数据的CRUD》最近负责的一个项目,数据库表量级破千万,每次执行CRUD都像走钢丝,稍有不慎就引起数据库报警,本文就结合这个项目的实战经验,聊聊MyBatisPl... 目录背景一、MyBATis Plus 简介二、千万级数据的挑战三、优化 CRUD 的关键策略1. 查

python实现对数据公钥加密与私钥解密

《python实现对数据公钥加密与私钥解密》这篇文章主要为大家详细介绍了如何使用python实现对数据公钥加密与私钥解密,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录公钥私钥的生成使用公钥加密使用私钥解密公钥私钥的生成这一部分,使用python生成公钥与私钥,然后保存在两个文

mysql中的数据目录用法及说明

《mysql中的数据目录用法及说明》:本文主要介绍mysql中的数据目录用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、版本3、数据目录4、总结1、背景安装mysql之后,在安装目录下会有一个data目录,我们创建的数据库、创建的表、插入的

浏览器插件cursor实现自动注册、续杯的详细过程

《浏览器插件cursor实现自动注册、续杯的详细过程》Cursor简易注册助手脚本通过自动化邮箱填写和验证码获取流程,大大简化了Cursor的注册过程,它不仅提高了注册效率,还通过友好的用户界面和详细... 目录前言功能概述使用方法安装脚本使用流程邮箱输入页面验证码页面实战演示技术实现核心功能实现1. 随机

Navicat数据表的数据添加,删除及使用sql完成数据的添加过程

《Navicat数据表的数据添加,删除及使用sql完成数据的添加过程》:本文主要介绍Navicat数据表的数据添加,删除及使用sql完成数据的添加过程,具有很好的参考价值,希望对大家有所帮助,如有... 目录Navicat数据表数据添加,删除及使用sql完成数据添加选中操作的表则出现如下界面,查看左下角从左

深度解析Spring AOP @Aspect 原理、实战与最佳实践教程

《深度解析SpringAOP@Aspect原理、实战与最佳实践教程》文章系统讲解了SpringAOP核心概念、实现方式及原理,涵盖横切关注点分离、代理机制(JDK/CGLIB)、切入点类型、性能... 目录1. @ASPect 核心概念1.1 AOP 编程范式1.2 @Aspect 关键特性2. 完整代码实

SpringBoot中4种数据水平分片策略

《SpringBoot中4种数据水平分片策略》数据水平分片作为一种水平扩展策略,通过将数据分散到多个物理节点上,有效解决了存储容量和性能瓶颈问题,下面小编就来和大家分享4种数据分片策略吧... 目录一、前言二、哈希分片2.1 原理2.2 SpringBoot实现2.3 优缺点分析2.4 适用场景三、范围分片

Java Web实现类似Excel表格锁定功能实战教程

《JavaWeb实现类似Excel表格锁定功能实战教程》本文将详细介绍通过创建特定div元素并利用CSS布局和JavaScript事件监听来实现类似Excel的锁定行和列效果的方法,感兴趣的朋友跟随... 目录1. 模拟Excel表格锁定功能2. 创建3个div元素实现表格锁定2.1 div元素布局设计2.

Redis分片集群、数据读写规则问题小结

《Redis分片集群、数据读写规则问题小结》本文介绍了Redis分片集群的原理,通过数据分片和哈希槽机制解决单机内存限制与写瓶颈问题,实现分布式存储和高并发处理,但存在通信开销大、维护复杂及对事务支持... 目录一、分片集群解android决的问题二、分片集群图解 分片集群特征如何解决的上述问题?(与哨兵模