YOLOX改进之模型轻量化(Lite)

YOLOX改进之模型轻量化(Lite),第1张

文章内容:给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,如下图:

三、运行代码命令
# 命令:
# 一、v5系列改进
# v5Lite-c:(8.66M)
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

# v5Lite-e:(1.62M)
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

# v5Lite-g:(10.7M)
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

# v5Lite-s:(3.25M)
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


# 二、yolox及改进系列:

# yoloxs-office(纯silu,数据增强、精度与官网接近)(17.2M)
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

# yoloxs_rslu(激活函数:relu+silu,且数据增强有所更改,权重不变,推理速度加快,由于激活函数改变,精度稍微降低)(17.2M)
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

# yoloxs(激活函数:纯silu,且数据增强有所更改,权重不变,修改后训练速度加快,精度与官网接近)(17.2M)
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


# 【改进1】:前面v5的改进换上了yoloxs(头部通道为128)的head,anchor_free锚框机制

# yoloxs_Lite-c:(12.1M)
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

# yoloxs_Lite-e:(5.04M)
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

# yoloxs_Lite-g:(14.2M)
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

# yoloxs_Lite-s:(6.70M)
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


# 【改进2】:e和s系列换上了yolox-nano(头部通道为64)的head
# yoloxnano_Lite-e:(2.46M)
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

# yoloxnano_Lite-s:(4.10M)
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

github链接:https://github.com/Bigtuo/YOLOX-Lite

写的比较急,不喜勿喷,有错误恳求批评指正!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/916827.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-16
下一篇 2022-05-16

发表评论

登录后才能评论

评论列表(0条)

保存