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

您所在的位置:网站首页 侍神令和晴雅集上映时间 YOLOX训练自己的数据集(头铁出来的超详细教程)

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

2023-10-12 19:21| 来源: 网络整理| 查看: 265

这里写自定义目录标题 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 random trainval_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 yolox yolox_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.33 self.width = 0.50 self.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 --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.



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3