最近又需要训练图像识别模型,之前体验过yolov5,yolox也出来很久了还没来得及认识,这次就体验下,参考项目地址:https://github.com/Megvii-BaseDetection/YOLOX
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。
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-main文件夹,内部文件如下:
yolox提供多种模型,本次体验yolox_nano,进入链接下载,以上传资源,下载地址yolox_nano。
代码中有自带的图片,可以进行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数据,已划分训练集合测试集,文档结构如下:
下载的VOC格式的分布如上图所示
images:存放数据集图片
annotations文件夹:存放与图片对应的xml文件
根目录文件夹:存放train_list.txt和val_list.txt
根据自己数据集的类别,修改yolox/data/datasets/voc_classes.py中的标签信息,这里是两类。
第一处,修改exps/example/yolox_voc/yolox_voc_s.py中的self.num_classes
在这里插入图片描述
第二处,修改exps/example/yolox_voc/yolox_voc_s.py中的VOCDection,根据自己路径修改
第三处,修改exps/example/yolox_voc/yolox_voc_s.py中的get_eval_loader函数
第四处,修改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/exp/yolox_base.py中的self.num_classes
第二处,修改yolox/exp/yolox_base.py中的,self.depth和self.width
修改yolox/data/datasets/voc.py中,VOCDection函数中的读取txt文件,根据自己数据集路径修改,改的面目全非。(下次做建议数据集直接按照yolox数据集目录整理,不改来改去了)
修改yolox/data/datasets/voc.py中,_get_voc_results_file_template函数
修改yolox/data/datasets/voc.py中_do_python_eval函数,一共三处需要修改,rootpath,name,cachedir
修改yolox/evaluators/voc_eval.py,因为fire_smoke数据集里面不仅仅有id,还有其他信息,所以拆分。
执行代码
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中修改输入的默认值
如果训练中断
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中。