yolov5 口罩检测模型训练及测试
一、数据集准备
1.利用网上公开数据集
2.xml转txt
可以看到公开数据集标注保存的为xml文件格式,利用上一篇文章中所述的python脚本文件,将xml文件转txt文件如下:
3.数据集分类处理
将上述图片文件和标注的txt文件分为训练集train和验证集valid,train文件夹和valid文件夹下均有images文件夹和labels文件夹,images文件夹中为图片文件,labels文件夹中为标签文件,两个文件夹中的文件名称和数量须相同。
新建data.yaml配置文件,内容如下
train: C:/Users/Desktop/yolov5/mask/train/images
val: C:/Users/Desktop/yolov5/mask/valid/images
nc: 3
names: [‘mask’, ‘nomask’,‘worongmask’]
注明训练集和验证集图片位置、分类数量、分类名称即可
二、开始训练
打开源码中的train.py文件修改以下文件对应位置即可
另注意修改bach-size参数,works参数可能要为0,否则报错缺失dll
源码路径下cmd ,运行 python train.py文件即可进入训练
终端运行:tensorboard --logdir=训练路径,复制链接打开即可看到可视化参数面板
若报错,按以下方法处理:
再次重新输入tensorboard --logdir=训练路径即可
运行若报以下错误:
RuntimeError: result type Float can‘t be cast to the desired output type long int
可参考原文
修改【utils】中的【loss.py】里面的两处内容
1.打开你的【utils】文件下的【loss.py】
2.按【Ctrl】+【F】打开搜索功能,输入【for i in range(self.nl)】找到下面的一行内容:
(上面的代码在【loss.py】的后半部分)
将下面的代码替换掉上图中的红圈部分:
anchors, shape = self.anchors[i], p[i].shape
替换之后的效果是这样的:
3.按【Ctrl】+【F】打开搜索功能,输入【indices.append】找到下面的一行内容:
(上面的代码在【loss.py】的最后部分,具体位置在上一处搜索位置的下面10行左右)
将下面的代码替换掉上图中的红圈部分:
indices.append((b, a, gj.clamp_(0, shape[2] - 1), gi.clamp_(0, shape[3] - 1))) # image, anchor, grid
替换之后的效果是这样的:
4.保存刚才的两个替换操作
5.再次运行【train.py】文件,问题解决!!!代码跑通!!!
注意代码对齐!!!
三、测试
更改detect.py 文件的权重文件路径 与 测试图片路径即可
yolov5 源码文件下cmd ,运行python detect.py