【YOLOv8训练和验证教程】

时间:2025-01-17 14:28:29

前言

本次是2024.0429最新更新。YOLOv8经过一年的沉淀,也已经逐渐成熟。YOLOv8论文还没出,猜测U神团队没打算写论文。目前最新的论文是YOLOv9,但v9需要的算力太高了,普通人还是抱以欣赏态度吧。

代码下载

目前最新版本的YOLOv8公开版是8.2.0版本
官方Github下载地址:/ultralytics/ultralytics
在这里插入图片描述

YOLOv8结构图

图片来源于:/qq_37706472/article/details/128679699
在这里插入图片描述

YOLOv8实操过程

(1)安装环境依赖,输入命令 :

pip install ultralytics

(2) 训练train

数据集格式跟v5相同,数据集这里不多赘述,不懂的可以搜一下。
主讲一下需要注意的地方:
第一,第一次用v8的童鞋们,可能找不到在哪。v8的根目录不像v5直接有
在v8中,要先进入路径:ultralytics/models/yolo/v8/detect,就可以看到文件;

第二,直接输入命令python 或者直接运行都是不行的。而且,v8的找不到类似v5那种参数设置,如batchsize、workers等。
如何解决?
YOLOv8将超参数和其他参数的设置全部集成到了ultralytics/yolo/cfg/(注意看清路径,别找半天找不到);
其中,文件的参数如下:
注意黄色框的几个参数,task是选择训练任务类型,detect是目标检测,segment是分割任务;mode参数,train是训练,val是验证,predict是推理测试;model是使用的网络结构;data是数据集的设置;

在这里插入图片描述

第三,参数都设置好之后,可以直接输入命令,即可开始训练:
yolo cfg=ultralytics/yolo/cfg/ (没看错,不用怀疑,就是这个命令,不用什么.py)

重点!!!重点!!!重点!!!
以上训练命令,改参数太麻烦了,还费劲。
推荐使用以下方式:
直接自己在根目录下新建一个****文件,内容如下:

from ultralytics import YOLO

# Load a model
model = YOLO("ultralytics/cfg/models/v8/")  # build a new model from scratch
model = YOLO("")  # load a pretrained model 不使用预训练权重,就注释这一行即可
# train
model.train(data='dataset/',
                cache=False,
                imgsz=640,
                epochs=100,
                batch=16,
                close_mosaic=0,
                workers=4,
                device='0',
                optimizer='SGD', # using SGD
                amp=False, # close amp
                project='runs/train',
                name='exp',
                )

然后,直接在命令窗口输入python 或者直接运行即可

(3)验证val

注意,这里直接写推荐的方式。
直接根目录新建一个文件,直接运行即可:

from ultralytics import YOLO

if __name__ == '__main__':
    model = YOLO('runs/train/exp/weights/') # 自己训练结束后的模型权重
    model.val(data='dataset/',
              split='val',
              imgsz=640,
              batch=16,
              save_json=True, # if you need to cal coco metrice
              project='runs/val',
              name='exp',
              )

下面讲解一下参数,以及什么叫“验证”。部分新手不理解这个程序的作用。

首先,在训练时和训练结束后,我知道会直接输出mAP值。但是,这不是最终结果,不能直接用,也不能说这是验证的结果,这些说法都是错的。

什么叫做验证?就是训练完后的模型权重,用跑一遍,才叫验证。(别懒,必须得跑)
我知道,有人会说,之后的mAP结果和训练完后的mAP结果一样,或者相差很小,也有相差大的时候(都不重要,别管,以跑出来的结果为准)
这是因为,你里面split参数设置的是val,代表此时调用的是验证集图像,跑出来的就是验证集mAP结果
如果split参数设置是test,则代表此时调用的是测试集图像,跑出来的就是测试集mAP的结果

还有重要的一点,不知道大家听懂了没。没有什么,验证和测试都是这个这个程序,只是有的人叫法不同。
split参数设置为val,代表测的就是验证集结果,大家就习惯叫成验证结果
split参数设置为test,代表测的就是测试集结果,大家就习惯叫成测试结果
它们两个共用一个程序!!!没有什么所谓的,别被迷惑了!!!
在这里插入图片描述

以上,大家常说的,验证集结果和测试集结果是多少。它们都是用这一个程序跑出来的,split参数不同代表调用的数据集不同。

还有,问的比较多的一点,没有测试集怎么办??没有就不用呗,就把split参数设置为val