图像识别(四):记录基于yolox训练自己的数据集

yolox训练自己的数据

最近又需要训练图像识别模型,之前体验过yolov5,yolox也出来很久了还没来得及认识,这次就体验下,参考项目地址:https://github.com/Megvii-BaseDetection/YOLOX


文章目录

  • yolox训练自己的数据
  • 前言
  • 一、环境工作
  • 二、数据准备
  • 三、先测试体验yolox
    • 1.下载Yolox的pth文件
    • 2.demo测试
  • 四、准备自有数据集
  • 五、修改配置文件
    • 1.voc_classes.py
    • 2.yolox_voc_s.py
    • 3.yolox_base.py
    • 4.voc.py
    • 5.voc_eval.py(针对本次数据集)
  • 五、开始训练
  • 五、其他问题


前言

例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


一、环境工作

yolox 是源码是基于pytorch框架的,之前文章已写过配置过程,不赘述,安装下其他依赖环境,进入文件夹,执行以下命令,完善环境。

pip3 install -U pip && pip3 install -r requirements.txt
python3 setup.py develop(or pip3 install -v -e .)
git clone https://github.com/NVIDIA/apex
cd apex
python3 setup.py install

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

二、数据准备

本次至少体验,所以下载了网上公开数据集,资源已上传,https://download.csdn.net/download/h363924219/85124119
烟火数据集

三、先测试体验yolox

确认环境,安装必要的包。下载yolox源码后,解压后得到YOLOX-main文件夹,内部文件如下:
在这里插入图片描述

1.下载Yolox的pth文件

yolox提供多种模型,本次体验yolox_nano,进入链接下载,以上传资源,下载地址yolox_nano。
图像识别(四):记录基于yolox训练自己的数据集_第1张图片

2.demo测试

代码中有自带的图片,可以进行Demo测试,这里以yolox-nano为例,cpu可以根据需要改。

python3 tools/demo.py image -n yolox-nano -c yolox_nano.pth --path assets/dog.jpg --conf 0.3 --nms 0.5 --tsize 640 --save_result --device [gpu]

四、准备自有数据集

数据集格式:
Yolox的代码中有VOC、和COCO两个数据集加载的格式,这里主要以VOC的格式来建立文件夹和修改代码,本次下载的fire_smoke数据,已划分训练集合测试集,文档结构如下:
图像识别(四):记录基于yolox训练自己的数据集_第2张图片
下载的VOC格式的分布如上图所示

images:存放数据集图片

annotations文件夹:存放与图片对应的xml文件

根目录文件夹:存放train_list.txt和val_list.txt

五、修改配置文件

1.voc_classes.py

根据自己数据集的类别,修改yolox/data/datasets/voc_classes.py中的标签信息,这里是两类。
图像识别(四):记录基于yolox训练自己的数据集_第3张图片

2.yolox_voc_s.py

第一处,修改exps/example/yolox_voc/yolox_voc_s.py中的self.num_classes
在这里插入图片描述
图像识别(四):记录基于yolox训练自己的数据集_第4张图片
第二处,修改exps/example/yolox_voc/yolox_voc_s.py中的VOCDection,根据自己路径修改
图像识别(四):记录基于yolox训练自己的数据集_第5张图片
第三处,修改exps/example/yolox_voc/yolox_voc_s.py中的get_eval_loader函数
图像识别(四):记录基于yolox训练自己的数据集_第6张图片
第四处,修改exps/example/yolox_voc/yolox_voc_s.py中的,self.depth和self.width。需要匹配在exps/default/中,找到对应网络的self.depth和self.width的信息,在nano.py中,self.depth=0.33,self.width=0.25。
图像识别(四):记录基于yolox训练自己的数据集_第7张图片

3.yolox_base.py

第一处,修改yolox/exp/yolox_base.py中的self.num_classes
图像识别(四):记录基于yolox训练自己的数据集_第8张图片
第二处,修改yolox/exp/yolox_base.py中的,self.depth和self.width
图像识别(四):记录基于yolox训练自己的数据集_第9张图片

4.voc.py

修改yolox/data/datasets/voc.py中,VOCDection函数中的读取txt文件,根据自己数据集路径修改,改的面目全非。(下次做建议数据集直接按照yolox数据集目录整理,不改来改去了)
图像识别(四):记录基于yolox训练自己的数据集_第10张图片
修改yolox/data/datasets/voc.py中,_get_voc_results_file_template函数
图像识别(四):记录基于yolox训练自己的数据集_第11张图片
修改yolox/data/datasets/voc.py中_do_python_eval函数,一共三处需要修改,rootpath,name,cachedir
图像识别(四):记录基于yolox训练自己的数据集_第12张图片

5.voc_eval.py(针对本次数据集)

修改yolox/evaluators/voc_eval.py,因为fire_smoke数据集里面不仅仅有id,还有其他信息,所以拆分。
图像识别(四):记录基于yolox训练自己的数据集_第13张图片

五、开始训练

执行代码

python3 tools/train.py -f exps/example/yolox_voc/yolox_voc_s.py -d 0 -b 64 -c yolox_nano.pth 

正常情况下可以之前训练,我的显卡显存太小,所以后面指定了 batch_size大小,
–batch-size 10

也可以在tools/train.py中修改输入的默认值
图像识别(四):记录基于yolox训练自己的数据集_第14张图片
如果训练中断

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

训练结束后查看mAP

python tools/eval.py -f exps/example/yolox_voc/yolox_voc_s.py -c <best_ckpt.pth.tar的路径> -d 0 -b 8 --conf 0.001 --fp16 --fuse

五、其他问题

1.如果找不到包,可以在yolox/data/datasets/init.py中添加调用的路径;
2.修改yolox/models/darknet.py,修改115行的self.stem(不修改也可以);
3.修改training config,在yolox/exp/yolox_base.py的class Exp中。

你可能感兴趣的:(深度学习,图像识别,人工智能,深度学习)