1. 代码获取
https://github.com/Le0v1n/ml_code/tree/main/ObjectDetection/YOLOX
如果代码对你有用,请
star
一下❤️
2. 预测
2.1 图片预测
- 下载权值文件:https://github.com/Megvii-BaseDetection/YOLOX/releases/download/0.1.1rc0/yolox_s.pth
- 将权值文件放在
weights
目录下 - 运行以下命令
python tools/demo.py image -n yolox-s -c ./weights/yolox_s.pth --path assets/dog.jpg --conf 0.25 --nms 0.45 --tsize 640 --save_result --device gpu
之后可以得到图片的结果。
2.2 视频预测
执行的命令进行更改:
python tools/demo.py webcam -n yolox-s -c ./weights/yolox_s.pth --conf 0.25 --nms 0.45 --tsize 640 --device gpu
3. 模型训练 —— 以口罩检测数据集为例
3.1 数据集下载
https://www.kaggle.com/datasets/andrewmvd/face-mask-detection
3.2 数据集处理
- 将标签文件夹名改为
Annotations
- 将图片存放文件夹改名为
JPEGImages
- 创建文件夹
VOCdevkit/VOC2012
- 将口罩数据集放到创建的VOC2012文件夹中
- 运行
get_trainval_test_txt.py
文件夹
└─VOCdevkit
├─VOC2012
├─Annotations
├─ImageSets
│ └─Main
└─JPEGImages
3.3 修改参数(Epoch、WarmUp、Eval_Epoch…)
在yolox\yolox\exp\yolox_base.py
文件中修改!
4. 实验结果
训练命令:
python tools/train.py -f exps/example/yolox_voc/yolox_voc_s.py -b 8 --fp16 -expn maskdataset_pretrained -c weights/yolox_s.pth
其中:
-f
: 实验配置文件-b
: Batch Size--fp16
: 是否使用AMP-expn
: 本次训练的名称-c
: ckpt路径
- 网络:YOLOX-s
- Batch Size:8
- Epoch:100
- basic_lr_per_img:0.00015625
- num_classes: 3
- warmup_epoch: 0
- min_lr_ratio: 0.05
- scheduler: yoloxwarmcos -> Cosine
- EMA: True
- no_aug_epochs: 15
- weight_decay: 0.0005
- momentum: 0.9
- eval_interval: 1
- depth: 0.33
- act: SILU
- num_workers: 4
- input_size: (640, 640)
- test_size: (640, 640)
- test_conf: 0.01
- nms_threash: 0.65
- mosaic_prob: 1.0
- mixup_prob: 1.0
- flip_prob: 0.5
4.1 从头开始训练
很明显模型并没有拟合,不想跑了😂
4.2 迁移学习
- map_5095: 0.6153292356822907
- map_50: 0.8694843116680683
可以看到,添加预训练模型后,模型收敛的确快!
4.3 添加SE注意力机制后
将yolox\yolox\models\network_blocks.py
中的attention
改为True
即可开启SE注意力,如下:
module_list = [
Bottleneck(
hidden_channels, hidden_channels, shortcut, 1.0, depthwise, act=act, attention=True
)
for _ in range(n)
]
- map_5095: 0.536522477369094
- map_50: 0.8082459511249596
由于100个Epoch使得模型欠拟合,所以添加了SE注意力只能有微小的提升,结果证明并不充分,有条件的可以多训练几次。
5. 总结
- YOLOX训练速度的确很慢,原因可能是使用了大量的数据增强方式
- YOLOX的backbone和YOLO v5是一样的,因此修改起来比较容易
- YOLOX提供了NANO和Tiny规格的模型,因此更有利于模型的部署
- YOLOX提供了很多部署方法,如TensorRT