一.准备数据集
正常流程应该是先使用labelimg,给自己的数据集来打上标签。参考以下教程利用labelimg制作自己的深度学习目标检测数据集。
然后把labelimg标注好的voc格式和YOLO格式相互转换。labelimg标注的VOC格式标签xml文件和yolo格式标签txt文件相互转换。
最后将格式转换好的数据集划分为训练集和验证集来训练我们自己的yolov5模型。目标检测算法---将数据集为划分训练集和验证集。
补充:了解 VOC 格式和 YOLO 格式特点:
- VOC 格式:是一种常用的图像标注格式,标注信息通常存储在 XML 文件中。XML 文件中包含了图像的基本信息(如文件名、尺寸等)以及每个目标的标注信息(如类别、边界框坐标等),边界框坐标一般是采用左上角和右下角顶点的坐标形式(xmin, ymin, xmax, ymax)。
- YOLO 格式:是一种相对简洁的标注格式,它将图像的标注信息以文本形式存储在一个.txt 文件中。对于每张图像,每行对应一个目标的标注信息,格式通常为
类别索引 x_center y_center width height
,其中类别索引
是目标所属类别的编号,x_center
、y_center
是目标边界框中心点的归一化坐标(相对于图像宽度和高度),width
、height
是目标边界框的归一化宽度和高度(同样相对于图像宽度和高度)
此处直接用现成的数据集,目录格式如下:
一般情况下, 一个完整的数据集包含三部分内容:
classes.txt
文件,用于记录类别名称images
文件夹,用于保存图片文件labels
文件夹,用于保存标注文件
images
和 labels
文件夹中的文件名应该一一对应,即 images
文件夹中的图片文件和 labels
文件夹中的标注文件应该同名。
其中,数据集中对应的训练集、验证集和测试集分别放在 train
、val
和 test
文件夹中。同样,images
和 labels
文件夹中的结构应该一一对应。数据比例建议 : 70% 用于训练,20% 用于验证,10% 用于测试。 此数据集未设置测试集。
二.训练模型
Github克隆整个YOLOv5项目
- data:主要是存放一些超参数的配置文件(yaml文件)用来配置训练集和测试集还有验证集的路径的,其中还包括目标检测的种类数和种类的名称;还有一些官方提供测试的图片。如果是训练自己的数据集的话,那么就需要修改其中的yaml文件。但是自己的数据集不建议放在这个路径下面,而是建议把数据集放到yolov5项目的同级目录下面。
- models:里面主要是一些网络构建的配置文件和函数,其中包含了该项目的四个不同的版本,分别为是s、m、l、x。从名字就可以看出,这几个版本的大小。他们的检测度分别都是从快到慢,但是精确度分别是从低到高。这就是所谓的鱼和熊掌不可兼得。如果训练自己的数据集的话,就需要修改这里面相对应的yaml文件来训练自己模型。
- utils:存放的是工具类的函数,里面有loss函数,metrics函数,plots函数等等。
- weights:放置训练好的权重参数。
- detect.py:利用训练好的权重参数进行目标检测,可以进行图像、视频和摄像头的检测。
- train.py:训练自己的数据集的函数。
- test.py:测试训练的结果的函数。
- requirements.txt:这是一个文本文件,里面写着使用yolov5项目的环境依赖包的一些版本,可以利用该文本导入相应版本的包。
下载预训练权重 yolov5s.pt 节约训练时间
训练目标检测模型需要修改两个yaml文件中的参数。一个是data目录下的相应的yaml文件,一个是model目录文件下的相应的yaml文件。
- 修改数据配置文件: 修改data目录下的相应的yaml文件。找到目录下的voc.yaml文件,将该文件复制一份,将复制的文件重命名为king.yaml。修改数据集路径,数据集中的训练集路径,数据集中的验证集路径,标签种类数,标签种类名。
2. 修改模型配置文件: 此项目使用的是 yolov5s.pt 这个预训练权重,故要使用models目录下的yolov5s.yaml文件中的相应参数(因为不同的预训练权重对应着不同的网络层数,所以用错预训练权重会报错)。将yolov5s.yaml文件复制一份,重命名为King.yaml。修改nc类别为12。
运行 train.py 就训练自己的模型了,yolov5里面有写好的 tensorbord 函数,terminal里运行以下命令
tensorboard --logdir=runs/train
然后打开http://localhost:6006/如下:
数据训练好了以后,就会在主目录下产生一个run文件夹,在run/train/exp/weights目录下会产生两个权重文件,一个是最后一轮的权重文件,一个是最好的权重文件,一会我们就要利用这个最好的权重文件来做推理测试。除此以外还会产生一些验证文件的图片等一些文件。
三.推理运行
打开推理文件detect.py 替换权重文件为best.pt,设置检测的视频或者图片路径,或者设置为0表示调用摄像头,运行即可。
运行自录游戏视频: