文章内容:给YOLOv5-Lite系列轻量级模型换上YOLOX头部 环境:pytorch1.7+cuda11.0 注意:YOLOv5版本为5.0,可以匹配YOLOX的主干网络与neck部分
一、参考资料
参考资料1:
YOLOv5-Lite: 代码链接:https://github.com/ppogg/YOLOv5-Lite 文章链接:https://blog.csdn.net/weixin_45829462/article/details/119767896?spm=1001.2014.3001.5502
参考资料2: YOLOv5-YOLOX(yolov5代码风格复现版): 代码链接:https://gitee.com/SearchSource/yolov5_yolox 文章链接:https://www.yuque.com/yerunyuan/ar9831/tsm0id#Kfi4w
参考资料3: YOLOX原理解析(大白老师版):https://zhuanlan.zhihu.com/p/397993315
二、代码修改位置
运行代码:YOLOv5-YOLOX版本(把YOLOv5-Lite改进代码移过来更方便) YOLOv5-Lite:(先让改进的Lite代码在YOLOv5-YOLOX版本上运行起来) 1、移动YOLOv5-Lite中模型结构改进代码(位于common.py中) 2、修改yolo.py代码,添加新的yaml模型文件读取模块(如:RepVGG等,位于300多行),可以参考YOLOv5代码修改。 YOLOv5-Lite各系列性能: (图来自https://github.com/ppogg/YOLOv5-Lite)
YOLOX_s-Lite: (在改进的Lite模型上更换YOLOX-s头部,包括c、e、g、s) 很简单,直接添加和简略修改,仔细观察yolox.yaml文件格式,对应修改,yoloxs的头部通道为128;其次保证yolox.py代码中通道为128(33行左右)。yaml文件修改如下图:
YOLOX_nano-Lite: (在改进的Lite模型上更换YOLOX-s头部,包括e、s) 修改位置同上,yaml文件的head通道均改成64;以及yolox.py代码(33行左右)head通道修改为64,如下图:
三、运行代码命令
python train.py --img-size 640 --data PCB.yaml --cfg models/v5Lite-c.yaml --hyp data/hyps/hyp.scratch.yaml --weights v5lite-c.pt --batch-size 8 --epochs 1 --device 0
python train.py --img-size 640 --data PCB.yaml --cfg models/v5Lite-e.yaml --hyp data/hyps/hyp.scratch.yaml --weights v5lite-e.pt --batch-size 8 --epochs 1 --device 0
python train.py --img-size 640 --data PCB.yaml --cfg models/v5Lite-g.yaml --hyp data/hyps/hyp.scratch.yaml --weights v5lite-g.pt --batch-size 8 --epochs 1 --device 0
python train.py --img-size 640 --data PCB.yaml --cfg models/v5Lite-s.yaml --hyp data/hyps/hyp.scratch.yaml --weights v5lite-s.pt --batch-size 8 --epochs 1 --device 0
python train.py --noautoanchor --img-size 640 --data PCB.yaml --cfg models/yoloxs_official.yaml --hyp data/hyps/hyp.scratch.yolox.official.yaml --weights yolox-s.pt --batch-size 8 --epochs 1 --device 0
python train.py --noautoanchor --img-size 640 --data PCB.yaml --cfg models/yoloxs_rslu.yaml --hyp data/hyps/hyp.scratch.yolox.yaml --weights yolox-s.pt --batch-size 8 --epochs 1 --device 0
python train.py --noautoanchor --img-size 640 --data PCB.yaml --cfg models/yoloxs.yaml --hyp data/hyps/hyp.scratch.yolox.yaml --weights yolox-s_rslu.pt --batch-size 8 --epochs 1 --device 0
python train.py --noautoanchor --img-size 640 --data PCB.yaml --cfg models/yoloxs_Lite_c.yaml --hyp data/hyps/hyp.scratch.yolox.yaml --weights v5lite-c.pt --batch-size 8 --epochs 1 --device 0
python train.py --noautoanchor --img-size 640 --data PCB.yaml --cfg models/yoloxs_Lite_e.yaml --hyp data/hyps/hyp.scratch.yolox.yaml --weights v5lite-e.pt --batch-size 8 --epochs 1 --device 0
python train.py --noautoanchor --img-size 640 --data PCB.yaml --cfg models/yoloxs_Lite_g.yaml --hyp data/hyps/hyp.scratch.yolox.yaml --weights v5lite-g.pt --batch-size 8 --epochs 1 --device 0
python train.py --noautoanchor --img-size 640 --data PCB.yaml --cfg models/yoloxs_Lite_s.yaml --hyp data/hyps/hyp.scratch.yolox.yaml --weights v5lite-s.pt --batch-size 8 --epochs 1 --device 0
python train.py --noautoanchor --img-size 640 --data PCB.yaml --cfg models/yoloxnano_Lite_e.yaml --hyp data/hyps/hyp.scratch.yolox.yaml --weights v5lite-e.pt --batch-size 8 --epochs 1 --device 0
python train.py --noautoanchor --img-size 640 --data PCB.yaml --cfg models/yoloxnano_Lite_s.yaml --hyp data/hyps/hyp.scratch.yolox.yaml --weights v5lite-s.pt --batch-size 8 --epochs 1 --device 0
【注意】:预训练权重不是lite给的,也能进行训练,上面PCB.yaml就是自己的训练数据集内容。数据集制作与训练可以参考:https://blog.csdn.net/weixin_45679938/article/details/118803745 【使用心得】: 1、在我的数据集上,yoloxs-lite-g精度与yolox齐平,高于yolov5有2个点,并且模型大小与yolov5差不多大,模型大小减少了3.2M,其他的没有进行测试,换头后应该都会有提升,毕竟YOLOX相对于v5的改进就在头部; 2、在这个上面添加另外一些trick,如注意力机制、CIOU等,精度有提升(200epoch以上),而相应改进用于官方代码没有提升(原因不明); 3、这边修改模型结构相比官方代码更为简便。
已修改的代码百度网盘链接:(包含v5-Lite系列权重) 链接:https://pan.baidu.com/s/1UfuJWdpkvSvTtjlsDgzLlA 提取码:b718
写的比较急,不喜勿喷,有错误恳求批评指正!
|