一:运行train.py
在train.py文件,在前面的地方,加入os.environ["GIT_PYTHON_REFRESH"] = "quiet"
在我下载的yolov5的代码里,我并没有看见import os
二:划分数据集
建立datasets文件夹,放入images和Annotions文件夹,里面放好图片和标注的文件(txt),在建立一个空的文件夹ImageSets,放入一会儿划分的数据集
具体如何划分:
【yolov5】将标注好的数据集进行划分(附完整可运行python代码)
但这几行代码需要修改,
- file_path: 图片所在位置,就是image文件夹
- xml_path: 标签所在位置,就是Annotation文件夹
- new_file_path: 划分后三个文件的保存位置,就是ImageSets文件夹
- 最后一行是设置划分比例,这里的比例分配大家可以随便划分,我选取的是7:1:2。
三:修改配置文件
1.修改数据集配置文件
在data文件夹下,建立自己数据的yaml文件,按照自己的数据集修改
注意:冒号后面需要加空格,否则会被认为是字符串而不是字典。
2.修改模型配置文件
在models文件夹下,有不同网络模型大小的结构,因为使用的是 yolov5s.pt 这个预训练权重,所以yolo5s.yaml文件进行修改,先复制一份,再重新命名。
nc:类别个数
四:训练模型
打开train.py,在参数这,进行修改
-weight : 先选用官方的yolov5s.pt权重,当自己的训练完成后可更换为自己的权重
--cfg: 选用上一步model目录下我们刚才改好的模型配置文件
parser.add_argument("--cfg", type=str, default=ROOT / "models/yolo5s.yaml", help="model.yaml path")
--data: 选用上一步data目录下我们刚才改好的数据集配置文件
parser.add_argument("--data", type=str, default=ROOT / "data/.。。.yaml", help="dataset.yaml path")
--epoch: 指的就是训练过程中整个数据集将被迭代多少轮,默认是100,显卡不行就调小点
parser.add_argument("--epochs", type=int, default=100, help="total training epochs")
-batch-size: 一次看完多少张图片才进行权重更新,默认是16,显卡不行就调小点
--workers: dataloader的最大worker数量,一般用来处理多线程问题,默认是8,显卡不行就调小点
然后就可以运行train.py文件了,训练结果会保存在 runs 的 train文件 里。
五:启用tensorboard查看参数
yolov5里面有写好的tensorbord函数,可以运行命令就可以调用tensorbord,然后查看tensorbord了。首先打开pycharm的命令控制终端,输入如下命令,就会出现一个网址地址,将那行网址复制下来到浏览器打开就可以看到训练的过程了
tensorboard --logdir=runs/train
但是出现了问题:
按 ctrl+c 终端可进行再次输入,目前还没找到解决方法
六:结果分析
- box_loss: 推测为GIoU损失函数均值,越小方框越准;
- obj_loss: 推测为目标检测loss均值,越小目标检测越准;
- cls_loss: 推测为分类loss均值,越小分类越准;
- precision: 准确率(找对的/找到的);
- recall: 召回率(找对的/该找对的);
- mAP@0.5 & mAP@0.5:0.95: 就是mAP是用Precision和Recall作为两轴作图后围成的面积,m表示平均,@后面的数表示判定iou为正负样本的阈值,@0.5:0.95表示阈值取0.5:0.05:0.95后取均值。(0.5是iou阈值=0.5时mAP的值),mAP只是一个形容PR曲线面积的代替词叫做平均准确率,越高越好。
七:Val
修改data:
parser.add_argument("--data", type=str, default=ROOT / "data/coco.yaml", help="dataset.yaml path")
修改weights:
parser.add_argument("--weights", nargs="+", type=str, default=ROOT / "runs/train/exp2/weights/best.pt", help="model path(s)")