本篇是自己学习过程中的记录,使用的数据集比较小,主要是为了代码分析和简单的提点。代码分析的部分在之前的文章中已经总结了,本篇主要是结果分析和提升map的一些尝试,入门阶段,高手请绕行。
数据集
目标:口罩
标签:mask, no-mask
训练集:123个
验证集:46个
来源:https://app.roboflow.com/yolo-e1ffu/mask-lcllo/2
baseline模型训练
参数:
训练框架:yolov5
模型:yolov5s
显卡:4090
训练命令:
python train.py --data mask/data.yaml --weights yolov5s.pt --cfg models/yolov5s.yaml --epochs 100 --batch-size 24
结果分析:
分析训练的结果,首先看损失曲线。损失曲线都稳定下降,并最终处于一个水平的范围,损失函数、学习率等参数正常。然后看PR曲线,P曲线有点震荡,R曲线正常,随着训练次数逐渐上升。最后看map。mask的map为0.893属于正常,no-mask的map为0.175偏小。
从混淆矩阵来看,no-mask被识别成mask为0.25,这个指标有点偏高,no-mask被识别成background为0.1,也有点高,也就是漏检高。
思路:no-mask的map是主要问题,能够提高no-mask的map就能大幅提高整体map。
分析数据集发现no-mask标签的数据偏少,所以需要增加对应数据集。
第一次增加数据集
标注不带口罩的数据集18张,1:1分为训练集和验证集。
训练:
分析:
粉红色为本次训练,可以看到训练的效果相比较上一次较好。从map来看,从0.534提高到0.711。主要是no-mask类别的map从0.175提高到0.543。
第二次增加数据集
继续新增no-mask相关数据集,共17张。
训练:
分析:
混淆矩阵的变化,no-mask的正检升高,漏检都下降到0.07
将整体map从0.711增加到0.919,no-mask的数据集从0.543上升到0.939。
总结
记录map变换
训练记录 | map@0.5 | mask map | no-mask map |
---|---|---|---|
baseline | 0.534 | 0.893 | 0.175 |
1.0 | 0.711 | 0.88 | 0.543 |
2.0 | 0.919 | 0.9 | 0.939 |
增加数据集是提高map的一种重要方法,特别是在数据集较少的情况下