YOLOv5 毕设论文参考的网络资料
github YOLOv5
google colab
用yolov5在colab上训练自己的数据集
一天完成口罩佩戴识别Demo,开源我做的数据集 | 深度学习、 YOLO
毕业设计之 ---- 基于深度学习图像识别的垃圾分类系统
YOLO系列综述:从V1到V4
深度学习笔记----单阶段检测模型YOLO
最新效果
将 detect 中的 thickness 调成 1 不然框太粗会挡住,并把置信度显示给关了。
以前的训练
-
使用的数据
三百多个文件的数据,就花了一小时不到,效果很差。 -
https://www.kaggle.com/andrewmvd/face-mask-detection 这个数据集包括了没正确佩戴口罩的类别,我觉得没太大必要就把所有没正确佩戴的都设成了戴上了的。里面的数据还是不错的。
-
自己电脑里之前下载的图片,分为mask和without_mask两个文件夹每种有一千多张图。用labelImg标注了一千多张到without_mask文件夹部分的时候发现这些图出现了之前标注过的框,原来是两个文件夹图片的名字重复了。。标注第二个文件夹的时候就在把第一个文件夹覆盖,还好没标注几张就发现问题。数据集这么大还是得分开标不然搞错了心态都不好了。关闭后想把开头几张重复的标注给改回来,改了一张点下一张的时候Python 报错终端显示是索引错误,打开标签的文件夹打开 classes.txt 发现里面的 class 只有一个,就把另一个给加上去了。再次打开就可以切换图片了。然而改了第二张图片的标签后再点下一张又报错。索性把重复标签错的那十几张图和对应的 txt 标签文件给删了。。。
-
前面几个 exp 就是乱训,有些结果不好就把文件给删了
-
exp 7 结果精度太低,detect框出不来,之前批量重命名的时候images 和 labels 不是对应修改成同一个名字导致框不匹配,然后是批量打标签的时候把全部框起来实际只要框人头,还是不能太心急,只得自己一张张修改。
-
exp 8 好像过拟合了?只放了 val 一百张戴口罩的没放不戴口罩的,detect 出来效果还不如别人三百张训练的。
-
exp 9 多整了 60 张不戴口罩的 valid,但这人工智障把我自己戴口罩的自拍识别成没戴口罩,难道因为口罩颜色是粉色的?
-
用之前的 best.pt训从 GitHub 下的别的数据集,里面图片不多但是都标注好了,而且,有多人同框的图!报错说找不到 dataset,才发现自己上传的时候把 mask2 中间加了个空格…
-
exp10
-
exp11
-
exp12
检测的效果,单人人脸识别率很高,但是多人的时候会有误识别的情况。 -
exp14 上传了好多网上的单人口罩集,p 已经很高了…
-
exp15 用了多人的数据集训练,约 700 张, 100 轮,刚开始练了一大半发现 p 连 0.1 不到,可能是自己当时用的别人的数据 label,mask 和without 顺序颠倒了,自己写了段代码把所有 txt 的 0 和 1 换过来后 p 就大多了。多人的效果不错,可是单人大头照就出现了很多错误,而且之前很多大头照都检不出了。
胡子都能被当成口罩…不愧是人工智障
-
试了一下实时摄像头发现exp16效果还不错,exp12 会把正常人脸当成戴口罩的,估计是因为之前大头照训太多了以为有头就是。exp16 离 1-2m 远后有时候没带口罩会跳变成戴口罩,可能受光线影响眼镜被识别上去了…不过总体还是很满意的。
-
exp18 之前因为中断了一次所以从 17 的基础上多了一个 exp,120 轮自己选了单人多人照片都有train 和 valid 都有一千多张。结果的 p 和 r 基本都是在 0.5 左右…
-
左边为 train 的 exp16,detect 的 exp15,右边为 train 的 exp18,detect 的 exp16
可以看到后面有个很小的戴口罩的也被检出来了少了个别误检
终于不会把眼睛识别成没戴口罩了
没遮住鼻子也算成没戴口罩
多了别的误检情况。。
最右的那个大哥把口罩挂在下巴之前识别成戴口罩现在识别成没带了。
基于 exp18 的权重训练发现口罩佩戴的精度太低了,平均下来才 0.5 就收敛,看来下次要修改一下数据集
exp21:valid 全放了单人大头照,train 放了大概一半大头一半的多人。效果还是不错的,就是偶尔出现一些误检比如背景模糊时、有时候把伸出的手当成没戴口罩的鼻子。不过感觉问题不大,自己对着摄像头实时测时,用手遮挡嘴和鼻子也不会被识别成佩戴口罩,用平板遮挡和露出鼻子也不会被识别,这样的效果已经大致完成了预期目标,接下来要先学一下服务器部署了。
exp23:从 0 开始训练 100轮,到大概 50就已经很高了。
exp24 基于 exp23 将loss.py的 139行一大段objectness注释掉 然后改成
tobj[b, a, gj, gi] =1
训练 50 轮 没什么变化
exp27 发现之前从头训练的训练集和验证集有很多的重复,所以修改了一下,并改变了两个数据集的比例,并删除了个别很多人的图片。到三十多轮就已经在 0.8 左右徘徊了,感觉不太妙,结果也最佳就 0.8 几,可能是口罩没遮住鼻子的和单独手的照片因为之前图片格式问题没送进去所以效果不太好,结果是置信度倒是挺高的,就是人多时可能会出现一张脸有两个框。。。或者是把手当做没戴口罩 and花纹背景当做口罩。
总结
-
数据集的选择
- 今天发现最近那一次的从 0 开始训练的训练和验证重复了好几百张,回去检查也发现了有两三张漏了或是多画了个很小的框,不知道会不会有影响,但还是要谨慎一点吧。
- 之前标的有些因为是大头照,所以框特别大,我感觉其实不用把耳朵也包进去。。。
- 有好多张带有墨镜的照片,可能会对模型有些影响,参考之前的结果把墨镜当成了口罩
-
欠拟合:
在训练集上表现很差,测试集上表现也很差的现象可能是欠拟合导致的,是因为泛化能力太强,误识别率较高
解决办法:
1)增加数据集的正样本数, 增加主要特征的样本数量
2)增加训练次数
3)减小正则化参数 -
过拟合
在训练集上表现很好,在测试集上表现很差(模型太复杂)
解决办法:
1)增加其他的特征的样本数, 重新训练网络
2)训练数据占总数据的比例过小,增加数据的训练量 -
loss值不再变小就说明训练好了
损失值并未出现增长,表明模型未过拟合,可能可以继续训练
损失函数
参考run/train文件夹的各图片分析
Real-ESRGAN
问题:
ModuleNotFoundError: No module named ‘realesrgan.version’ 进去 realesrgan 文件夹把 init 里 version 注释掉。
No module named ‘gfpgan’ 要 pip install。
不小心把终端关了,重装了一遍,应该是路径问题?
做完图找不到了。。只记得拍了 QQ 给同学看