YOLOv8:官方项目训练

1. 基础解读

        detect/train.py中有DetectionTrainer类,继承自BaseTrainer类,并实现了诸如get_dataloader, get_model等接口。

        setup_model接口用于准备模型,首先会检查self.model是否是torch.nn.Module,即已经是导入的模型。如果不是,检查当前从配置文件导入的模型是pt模型还是yaml模型。之后,会调用get_model接口进行模型的创建(包含load checkpoint)。

2. 配置

        配置文件位于./ultralytics/yolo/cfg/default.yaml

(1)训练配置

        在Train settings部分,配置model, data, model_save_dir,enable_log

和log_dir路径。分别表示训练的算法网络、数据路径、模型存储路径、是否开启日志和日志存储路径。

(2)推理、测试配置

        在Prediction settings部分,配置
predict_model, source, result_dir,此外在Val/Test settings部分配置conf, iou等。

3. 运行记录

运行如下指令训练:

python3 ultralytics/yolo/v8/detect/train.py

(1)错误1

        No module named 'ultralytics'

        解决:

        事实上,YOLOv8源代码中已经包含了ultralytics的一些东西,无需再安装,因此这个时候可以在ultralytics/yolo/v8/detect/train.py文件的起始位置加上如下代码即可。

        import os

        import sys

        sys.path.append("/2T/001_AI/1003_YOLOv8/001_AL/001_YOLOv8")

(2)错误2:

        遇到错误:No module named 'git'

        解决:

        pip3 install gitpython

(3)错误3:

        No module named 'thop'

        解决:

        pip3 install thop

4. 按照示例代码运行

        如果想使用官方代码直接运行,在解决完成上述问题后,直接运行如下代码即可。

python3 ultralytics/yolo/v8/detect/train.py

        此时,终端打印如下:

YOLOv8:官方项目训练_第1张图片

YOLOv8:官方项目训练_第2张图片

YOLOv8:官方项目训练_第3张图片

5. 训练自己的数据

训练自己的数据时,需要根据自己的数据标注格式修改部分代码,主要是ultralytics/yolo/data/datasets/路径下的yaml文件,如添加VOC_Power48.xml。

在配置数据yaml文件之前,需要通过几个步骤预处理,获取train、val、test数据集。本处以VOC数据标注转coco数据格式进行举例说明。

(1)VOC转YOLO格式数据集

YOLO格式仅是一种叫法,形式如下,不必深究。

[class_id, Xcenter, Ycenter, Width, Height]

VOC数据集普遍以LabelImg软件进行标注,获取一份与图像数据同名的标注文件。如000000.jpg对应000000.xml。为了便于YOLO系列使用,普遍会将VOC数据标注转换为YOLO标注形式,即000000.jpg对应000000.txt标注文件。

运行转换脚本:step_1_voc2yolo_convert.py

(2)划分train、val、test

在上一步制作完成YOLO格式的标注文件后,需要将数据集按照一定的比例划分为训练集(train.txt)、评估集(val.txt)和测试集(test.txt)。

划分数据集运行脚本:step_3_split_train_val_test.py

有两点需要注意:

a. 为了尽量增多训练和评估样本数量,测试集可使用未标注的文件;

b. 经过当前脚本生成的是txt文件,内容为路径列表,如图1所示。训练时在VOC_Power48.xml导入该txt文件路径即可(如图2)。

YOLOv8:官方项目训练_第4张图片

图1 训练数据集(train.txt)样例

YOLOv8:官方项目训练_第5张图片

图2 数据文件配置

(3)测试数据

经过第一步的转换(step_1_voc2yolo_convert.py)以后,可通过脚本step_2_optional_draw_for_validate.py指定文件名(.jpg)和标注文件(.txt)进行数据的测试

6. Finetune

执行finetune的时候,只需要将default.py中的model替换成已有的pt模型即可。

7. 训练策略

训练的数据增强部分最后10 epoch关闭Mosaic增强更有利于模型收敛的稳定,同时训练epoch数从300增大到500使得模型训练更充分。

从上面可以看出,YOLOv8集合了之前提出的诸如YOLOX、YOLOv6、YOLOv7和PPYOLOE等算法的相关设计,尤其是Head标签分配和Loss部分以及PP-YOLOE非常相似。YOLOv8集百家所长达到了实时检测界的一个新高度。

8. 继续训练与恢复训练

继续训练是指使用已保存的ckpt中的weights、optimizer和其他等参数,从头开始训练,一般情况下epoch从0开始。

恢复训练是指使用已保存的ckpt中的weights、optimizer和epoch等参数作为(pretrained weights)继续训练,一般情况下epoch>0。

工程中,在resume_training阶段做了修改,当执行resume训练时,start_epoch接上次,当Finetune训练时,start_epoch从0开始。

配置文件中(default.yaml, 或由DEFAULT_CFG_PATH指定的其他配置文件)有以下几个可选的配置:

(1)model为yaml文件(resume==False)

执行Training from scratch。

(2)model为pt模型文件(resume==False)

执行Finetune training。

(3)resume为指定的pt模型文件(忽略model指定内容)

当resume为指定的pt时,执行resume训练。

特别说明

代码初始运行时会有check_amp操作,此时会自动下载yolov8n.pt用于检查。

你可能感兴趣的:(YOLOv8,YOLO)