【YOLO 项目实战】(11)YOLO8 数据集与模型训练

news2024/12/22 1:49:17

欢迎关注『youcans动手学模型』系列
本专栏内容和资源同步到 GitHub/youcans
【YOLO 项目实战】(1)YOLO5 环境配置与检测
【YOLO 项目实战】(10)YOLO8 环境配置与推理检测
【YOLO 项目实战】(11)YOLO8 数据集与模型训练


【YOLO5 项目实战】(11)YOLO8 数据集与模型训练

    • 1. 准备训练数据集
      • 1.1 YOLOv8 数据集的格式
      • 1.2 下载 YOLOv8 数据集
      • 1.3 整理 YOLOv8 数据集
    • 3. YOLOv8 自定义数据集的训练
      • 3.1 下载 YOLOv8 预训练模型
      • 3.2 命令行(CLI)接口的模型训练
      • 3.3 使用 Python 接口的模型推理
      • 3.4 模型训练参数说明
      • 3.5 训练结果文件说明
    • 4. 模型验证与模型预测
      • 4.1 模型验证
      • 4.2 模型预测


上节介绍了 YOLOv8 的下载、配置和推理,本节介绍用本地数据集训练 YOLOv8 模型,建立特定任务的私有模型。
创建自定义模型来检测对象是一个迭代过程,包括收集和组织图像、标注对象、训练模型、模型部署,使用部署的模型进行推理。


1. 准备训练数据集

YOLOv8 项目中提供了不同数据集转换的指南和例程,位于 “.\docs\en\datasets” 路径,例如在文件 coco.md 中介绍了使用 COCO 数据集来训练 YOLOv8 目标检测模型。

在这里插入图片描述


1.1 YOLOv8 数据集的格式

  1. 数据集的组织
    YOLOv8数据集通常包含图像文件和标注文件。图像文件通常是 jpg、png 等图像格式,包含了待检测的目标。标注文件则是包含每张图像中目标对象的类别和位置信息的文本文件。

YOLOv8 默认使用 COCO2017 数据集进行训练,结构如下。

  • images 下包含 train、val 文件夹,这两个文件夹下包含此次需要的 图片信息
  • labels 下包含 train、val 文件夹,这两个文件夹下包含此次需要的 对应图片的标注信息
  • test_images 下包含的是提供测试的数据集
dataset
├── images
│   ├── train
│   ├── val
│   ├── test (option)
├── labels
│   ├── train
│   ├── val
│   ├── test (option)
  1. 标注文件的格式

YOLO格式的标注文件通常是一个文本文件,每一行代表一个目标物体的标注信息。
标注信息通常包含类别编号、目标中心横坐标(相对于图像宽度)、目标中心纵坐标(相对于图像高度)、目标宽度(相对于图像宽度)和目标高度(相对于图像高度),具体格式如下:

<object-class-id> <x> <y> <width> <height>

其中:

<object-class-id>是目标对象的类别编号,整数表示。
<x>和<y>是目标中心位置的坐标,经过归一化处理(即目标的真实x、y值除以图像的宽度和高度),是小于1的浮点数。
<width>和<height>是目标的宽度和高度(同样经过归一化处理),也是小于1的浮点数。

例如,一行标注信息为 “0 0.5 0.6 0.3 0.4”,其中“0”表示类别编号,后面的数字表示目标在图像中的位置和大小信息‌。


1.2 下载 YOLOv8 数据集

Roboflow Annotate是一个简单的基于网络的工具,用于管理和标记用户的图像集,并以YOLO的注释格式导出。无论是否使用 Roboflow 标记图像,都可以使用它将数据集转换为YOLO格式,创建YOLOv8 YAML配置文件,并将其托管以导入训练脚本。

  1. 打开 Roboflow 网站,从Roboflow 公开数据集中选择一个数据集,下载到本地。

本文选择 “水族馆数据集(Aquarium Dataset)”。该数据集由 Roboflow 从美国两个水族馆收集的 638 张图像组成:Henry Doorly Zoo 和 National Aquarium in Baltimore。Roboflow对这些图像进行了标记,以便进行物体检测。图像和注释在知识共享署名许可下发布。

该数据集标记了 7 个类别:鱼类(fish)、水母(jellyfish)、企鹅(penguins)、鲨鱼(sharks)、海雀(puffins)、黄貂鱼(stingrays)和海星(starfish)。大多数图像包含多个边界框。

  1. Roboflow 提供了多种下载格式,主要是数据集组织和标注格式的区别。注意要以YOLOv8 格式导出,如下图所示。

在这里插入图片描述

选择 YOLOv8格式,下载 水族馆数据集(Aquarium Dataset)。

在这里插入图片描述

  1. 下载后将数据集解压缩。

下载 Aquarium 数据集的文件路径如下:

- Dataset_Aquarium
   - test
      - images
      - labels
   - train
      - images
      - labels
   - valid
      - images
      - labels
   - data.yaml

下载的 Aquarium 数据集设有 test,train,valid 三个文件夹,分别用作测试、训练和检验,每个文件夹下设有 images,labels 两个文件夹,分别保存图像文件和标注文件。

一个典型的标注文件的内容如下。共有 3行,每行表示一个检测目标。每行有 5个参数,第1列是类别标签(Yes/No),后 4个参数是 BoundingBox 的坐标位置。

0 0.31875 0.5976190476190476 0.05583333333333333 0.13174603174603175
0 0.31916666666666665 0.2912698412698413 0.12833333333333333 0.3253968253968254
0 0.5270833333333333 0.16746031746031745 0.12416666666666666 0.2841269841269841

如果自己收集和标注数据集,也要按照以上格式来组织数据集和标注文件。

  1. 数据集配置文件 .yaml

数据集配置文件中给出了数据集的路径,训练集、检验集和验证集的路径,分类任务的类别数量 nc 和类名列表 names。

Aquarium Dataset 数据集配置文件 data.yaml 位于数据集的根目录,内容如下:

train: ../train/images
val: ../valid/images
test: ../test/images

nc: 7
names: ['fish', 'jellyfish', 'penguin', 'puffin', 'shark', 'starfish', 'stingray']

其中,train 表示训练集图像文件夹的路径,val 表示验证集图像文件夹的路径,test 表示测试集图像文件夹的路径。nc:7 表示类别数为 7,names 表示类别名。

注意,nc 是由数据集的标注内容决定的,不能自行修改。


1.3 整理 YOLOv8 数据集

YOLOv8 模型训练对于格式的要求非常严格:数据集要保存在项目的指定路径 datasets 下,并按照

  1. 数据集要保存在项目的指定路径 datasets 下,并按下面的格式组织样本图片和标签。
- yolov8
   - datasets
      - Aquarium
         - images
            - test
            - train
            - val
         - labels
            - test
            - train
            - val
         - dataAquarium.yaml
   - ultralytics
   - yolov8n.pt
  1. 编写数据集配置文件 YAML 文件( .yaml)。

YOLO 模型训练时,要调用数据集配置文件 YAML 文件( .yaml),指定数据集的路径和分类类别。

在 YOLOv8 项目中,提供了多个数据集配置文件,例如:“\YOLOv8\ultralytics\cfg\datasets\coco8.yaml” 可供参考。根据Aquarium Dataset 数据集配置文件 data.yaml ,编写本项目的数据集配置文件 dataAquarium.yaml,保存到数据集的根目录,内容如下。

# Ultralytics YOLO 🚀, AGPL-3.0 license
# Aquarium dataset 
# parent
# ├── ultralytics
# └── datasets
#     └── Aquarium

# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: Aquarium  # dataset root dir
train: images/train  # train images (relative to 'path')
val: images/val  # val images (relative to 'path')
test:  # test images (optional)

# Classes
names:
  0: fish
  1: jellyfish
  2: penguin
  3: puffin
  4: shark
  5: starfish
  6: stingray

3. YOLOv8 自定义数据集的训练

3.1 下载 YOLOv8 预训练模型

在 YOLO/GitHub 项目仓,提供了检测(Detection)、分类(Classification)、分割(Segmentation)、姿态估计(Pose)、定向边界框检测(OBB)等任务的预训练模型。YOLOv8 有多个不同规模的模型,从小到大依次是:YOLOv8n、YOLOv8s、YOLOv8m、YOLOv8l、YOLOv8x。这些模型与各种操作模式兼容,包括推理、验证、训练和导出,便于在部署和开发的不同阶段使用。

由于 YOLO 更新频繁,预训练模型的入口不容易找,现将下载地址列表如下。

https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8n-pose.pt
https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8s-pose.pt
https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8m-pose.pt
https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8l-pose.pt
https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8x-pose.pt
https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8n-seg.pt
https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8s-seg.pt
https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8m-seg.pt
https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8l-seg.pt
https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8x-seg.pt
https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8n-cls.pt
https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8s-cls.pt
https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8m-cls.pt
https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8l-cls.pt
https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8x-cls.pt
https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8n.pt
https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8s.pt
https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8m.pt
https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8l.pt
https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8x.pt
https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8n-obb.pt
https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8s-obb.pt
https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8m-obb.pt
https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8l-obb.pt
https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8x-obb.pt

本文选择 YOLOv8n,参数约 6M。下载完成后,将下载的预训练模型文件 yolov8n.pt 放在 YOLOv8 项目的根目录路径下,例如 “C:\Python\PythonProjects\YOLOv8”。


3.2 命令行(CLI)接口的模型训练

YOLOv8 支持使用命令行接口(command line interface, CLI)对模型进行训练、验证或运行推断。

YOLOv8 命令行接口(CLI)方便在各种任务和版本上训练、验证或推断模型,不需要定制或代码,可以使用 yolo 命令从终端运行所有任务。

语法:

yolo task=detect    mode=train    model=yolov8n.yaml      args...
          classify       predict        yolov8n-cls.yaml  args...
          segment        val            yolov8n-seg.yaml  args...
                         export         yolov8n.pt        format=onnx  args...

使用 Aquarium 数据集进行模型训练的具体操作步骤如下:

  1. 使用 miniconda Prompt 命令行,或使用 PyCharm 的命令行窗口;
  2. 激活 YOLO8 虚拟环境;
  3. 输入如下命令就可以进行模型训练。注意其中的 model 和 data 的文件路径与用户的具体设置有关。

conda activate yolo8
yolo task=detect mode=train model=./yolov8n.pt data=./datasets/Aquarium/dataAquarium.yaml epochs=10 workers=1 batch=16

注意:
(1)必须先激活 YOLO 虚拟环境。
(2)当前路径必须是 YOLOv8 项目所在的目录,例如 “C:\Python\PythonProjects\YOLOv8”。
(3)预训练模型 yolov8n.pt 必须保存在模型配置参数 “model” 指定的路径。例如,如果预训练模型保存在 “C:\Python|PythonProjects\YOLOv8\model\yolov8n.pt”,则将模型配置参数修改为 “model=.\model\yolov8n.pt”。
(4)训练好的模型及训练日志保存在 “.\runs\detect\train” 目录下。

运行结果如下。

(base) C:\Python\PythonProjects\YOLOv8>conda activate yolo8

(yolo8) C:\Python\PythonProjects\YOLOv8>yolo task=detect mode=train model=./yolov8n.pt data=./datasets/Aquarium/dataAquarium.yaml epochs=10 workers=1 batch=16
Ultralytics YOLOv8.1.0 🚀 Python-3.8.20 torch-2.4.1+cu121 CUDA:0 (NVIDIA GeForce RTX 3060, 12288MiB)
engine\trainer: task=detect, mode=train, model=./yolov8n.pt, data=./datasets/Aquarium/dataAquarium.yaml, epochs=10, time=None, patience=50, batch=16, imgsz=640, save=True, save_period=-1, cache=False, device=None, workers=1, project=None, name=train4, exist_ok=False, pretrained=True, optimizer=auto, verbose=True, seed=0, deterministic=True, single_cls=False, rect=False, cos_lr=False, close_mosaic=10, resume=False, amp=True, fraction=1.0, profi
le=False, freeze=None, multi_scale=False, overlap_mask=True, mask_ratio=4, dropout=0.0, val=True, split=val, save_json=False, save_hybrid=False, conf=None, iou=0.7, max_det=300, half=False, dnn=False, plots=True, source=None, vid_stride=1, stream_buffer=False, visualize=False, augment=False, agnostic_nms=False, classes=None, retina_masks=False, embed=None, show=False, save_frames=False, save_txt=False, save_conf=False, save_crop=False, show_labels=True, show_conf=True, show_boxes=True, line_width=None, format=torchscript, keras=False, optimize=False, int8=False, dynamic=False, simplify=False, opset=None, workspace=4, nms=False, lr0=0.01, lrf=0.01, momentum=0.937, weight_decay=0.0005, warmup_epochs=3.0, warmup_momentum=0.8, warmup_bias_lr=0.1, box=7.5, cls=0.5, dfl=1.5, pose=12.0, kobj=1.0, label_smoothing=0.0, nbs=64, hsv_h=0.015, hsv_s=0.7, hsv_v=0.4, degrees=0.0, translate=0.1, scale=0.5, shear=0.0, perspective=0.0, flipud=0.0, fliplr=0.5, mosaic=1.0, mixup=0.0, copy_paste=0.0, auto_augment=randaugment, erasing=0.4, crop_fraction=1.0, cfg=None, tracker=botsort.yaml, save_dir=runs\detect\train4
Overriding model.yaml nc=80 with nc=7

                   from  n    params  module                                       arguments
  0                  -1  1       464  ultralytics.nn.modules.conv.Conv             [3, 16, 3, 2]
  1                  -1  1      4672  ultralytics.nn.modules.conv.Conv             [16, 32, 3, 2]
  2                  -1  1      7360  ultralytics.nn.modules.block.C2f             [32, 32, 1, True]
  3                  -1  1     18560  ultralytics.nn.modules.conv.Conv             [32, 64, 3, 2]
  4                  -1  2     49664  ultralytics.nn.modules.block.C2f             [64, 64, 2, True]
  5                  -1  1     73984  ultralytics.nn.modules.conv.Conv             [64, 128, 3, 2]
  6                  -1  2    197632  ultralytics.nn.modules.block.C2f             [128, 128, 2, True]           
  7                  -1  1    295424  ultralytics.nn.modules.conv.Conv             [128, 256, 3, 2]
  8                  -1  1    460288  ultralytics.nn.modules.block.C2f             [256, 256, 1, True]
  9                  -1  1    164608  ultralytics.nn.modules.block.SPPF            [256, 256, 5]
 10                  -1  1         0  torch.nn.modules.upsampling.Upsample         [None, 2, 'nearest']
 11             [-1, 6]  1         0  ultralytics.nn.modules.conv.Concat           [1]
 12                  -1  1    148224  ultralytics.nn.modules.block.C2f             [384, 128, 1]
 13                  -1  1         0  torch.nn.modules.upsampling.Upsample         [None, 2, 'nearest']
 14             [-1, 4]  1         0  ultralytics.nn.modules.conv.Concat           [1]
 15                  -1  1     37248  ultralytics.nn.modules.block.C2f             [192, 64, 1]
 16                  -1  1     36992  ultralytics.nn.modules.conv.Conv             [64, 64, 3, 2]
 17            [-1, 12]  1         0  ultralytics.nn.modules.conv.Concat           [1]
 18                  -1  1    123648  ultralytics.nn.modules.block.C2f             [192, 128, 1]
 19                  -1  1    147712  ultralytics.nn.modules.conv.Conv             [128, 128, 3, 2]
 20             [-1, 9]  1         0  ultralytics.nn.modules.conv.Concat           [1]
 21                  -1  1    493056  ultralytics.nn.modules.block.C2f             [384, 256, 1]
 22        [15, 18, 21]  1    752677  ultralytics.nn.modules.head.Detect           [7, [64, 128, 256]]           
Model summary: 225 layers, 3012213 parameters, 3012197 gradients, 8.2 GFLOPs

Transferred 319/355 items from pretrained weights
Freezing layer 'model.22.dfl.conv.weight'

train: Scanning C:\Python\PythonProjects\YOLOv8\datasets\Aquarium\labels\train.cache... 448 images, 1 backgrounds, 0 corrupt: 100%|██████████| 448/4
val: Scanning C:\Python\PythonProjects\YOLOv8\datasets\Aquarium\labels\val.cache... 127 images, 0 backgrounds, 0 corrupt: 100%|██████████| 127/127 [
Plotting labels to runs\detect\train4\labels.jpg... 
optimizer: 'optimizer=auto' found, ignoring 'lr0=0.01' and 'momentum=0.937' and determining best 'optimizer', 'lr0' and 'momentum' automatically... 
optimizer: AdamW(lr=0.000909, momentum=0.9) with parameter groups 57 weight(decay=0.0), 64 weight(decay=0.0005), 63 bias(decay=0.0)
10 epochs...
Closing dataloader mosaic

      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size
       1/10      2.55G      1.545      3.855      1.274        130        640: 100%|██████████| 28/28 [00:05<00:00,  4.79it/s]
                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100%|██████████| 4/4 [00:00<00:00,  5.93it/s]
                   all        127        909     0.0114      0.505     0.0551      0.029

...

      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size
      10/10      2.53G      1.367      1.593      1.156        116        640: 100%|██████████| 28/28 [00:05<00:00,  5.30it/s]
                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100%|██████████| 4/4 [00:00<00:00,  5.98it/s]
                   all        127        909      0.688      0.594      0.629      0.365

10 epochs completed in 0.018 hours.
Optimizer stripped from runs\detect\train4\weights\last.pt, 6.2MB
Optimizer stripped from runs\detect\train4\weights\best.pt, 6.2MB

Validating runs\detect\train4\weights\best.pt...
Ultralytics YOLOv8.1.0 🚀 Python-3.8.20 torch-2.4.1+cu121 CUDA:0 (NVIDIA GeForce RTX 3060, 12288MiB)
Model summary (fused): 168 layers, 3007013 parameters, 0 gradients, 8.1 GFLOPs
                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100%|██████████| 4/4 [00:01<00:00,  3.34it/s]
                   all        127        909      0.692      0.597      0.634      0.365
                  fish        127        459      0.762       0.61      0.709      0.381
             jellyfish        127        155      0.687      0.836      0.817      0.437
               penguin        127        104      0.489       0.76      0.647      0.275
                puffin        127         74      0.578      0.338      0.371       0.17
                 shark        127         57       0.63      0.579      0.593      0.351
              starfish        127         27      0.914      0.393       0.57       0.45
              stingray        127         33      0.786      0.667      0.732      0.495
Speed: 0.1ms preprocess, 1.6ms inference, 0.0ms loss, 2.5ms postprocess per image
Results saved to runs\detect\train
💡 Learn more at https://docs.ultralytics.com/modes/train

在这里插入图片描述


3.3 使用 Python 接口的模型推理

YOLOv8 也提供了 Python 接口的调用方式。它提供了加载和运行模型以及处理模型输出的函数。该界面设计易于使用,以便用户可以在他们的项目中快速实现目标检测。

使用 Aquarium 数据集进行模型训练的 Python 参考例程如下。

from ultralytics import YOLO

if __name__ == '__main__':
   # 创建 YOLO 模型对象,加载指定的模型配置
   model = YOLO('./ultralytics/cfg/models/v8/yolov8.yaml')
   # 加载预训练的权重文件,加速训练并提升模型性能
   model.load('yolov8n.pt')
   # 用指定数据集训练模型
   model.train(data="./datasets/Aquarium/dataAquarium.yaml",  # 指定训练数据集的配置文件路径
               cache=False,  # 是否缓存数据集以加快后续训练速度
               imgsz=640,  # 指定训练时使用的图像尺寸
               epochs=100,  # 设置训练的总轮数为100轮
               batch=16,  # 设置每个训练批次的大小为16
               close_mosaic=10,  # 设置在训练的最后 10 轮中关闭 Mosaic 数据增强
               workers=4,  # 设置用于数据加载的线程数为4
               device='0',  # 指定使用的 GPU 设备
               optimizer='SGD'  # 设置优化器为SGD(随机梯度下降)
               )

注意:
(1)使用项目默认路径自带的模型配置文件 “./ultralytics/cfg/models/v8/yolov8.yaml” 。
(2)训练数据集的配置文件路径为 “./datasets/Aquarium/dataAquarium.yaml”。
(3)训练好的模型及训练日志保存在 “./runs/detect/train” 目录下。

在 PyCharm 编译并运行程序,就实现对 Aquarium 数据集进行模型训练,并将训练结果保存到 “./runs/detect/train/weights/best.py”。

在这里插入图片描述

在这里插入图片描述

请添加图片描述

在这里插入图片描述


3.4 模型训练参数说明

YOLOv8 在默认配置文件 “./ultralytics/cfg/default.yaml” 中给出了模型训练参数的说明。

参数默认值描述设置建议
modelNone模型文件路径,如 yolov8n.pt, yolov8n.yaml根据需要选择合适的预训练模型文件
dataNone数据文件路径,如 coco128.yaml选择合适的数据集配置文件
epochs100训练的周期数根据数据集大小和模型复杂度调整
timeNone训练时间(小时),如果提供,将覆盖epochs参数根据实际训练时间需求设置
patience50早停的周期数,等待无显著改进的周期数根据模型训练动态调整
batch16每个批次的图像数量根据硬件资源调整
imgsz640输入图像的尺寸根据硬件和模型性能要求调整
saveTrue是否保存训练检查点和预测结果通常保持默认
save_period-1每x周期保存检查点,如果<1则禁用根据需要设置
cacheFalse是否使用数据加载缓存,选项:True/ram, disk 或 False根据硬件资源和数据集大小决定
deviceNone运行设备,如 cuda device=0 或 device=cpu根据可用的硬件资源设置
workers8数据加载的工作线程数根据系统资源调整
projectNone项目名称根据需要自定义
nameNone实验名称自定义实验名以便识别
exist_okFalse是否覆盖现有实验如果需要重复实验,设置为True
pretrainedTrue是否使用预训练模型通常对于新的训练任务保持True
optimizer‘auto’优化器,可选项:SGD, Adam等根据模型和数据集特性选择合适的优化器
verboseFalse是否打印详细输出开发和调试时可设为True
seed0重现性的随机种子需要重现结果时设置确定值
deterministicTrue是否启用确定性模式需要确保结果一致性时设置为True
single_clsFalse是否将多类数据作为单类训练特定应用场景下调整
rectFalse矩形训练,每个批次为最小填充特定应用场景下调整
cos_lrFalse是否使用余弦学习率调度器根据训练策略调整
close_mosaic10关闭马赛克增强的最后周期数根据训练需求调整
resumeFalse从最后检查点恢复训练需要从中断的训练继续时设置为True
ampTrue是否使用自动混合精度训练根据硬件支持选择
fraction1.0训练的数据集比例如需使用数据集的子集进行训练,调整此值
profileFalse训练期间记录ONNX和TensorRT速度性能分析时启用
freezeNone冻结训练期间的前n层或特定层特定模型调整时使用
lr00.01初始学习率根据模型和数据集特性调整
lrf0.01最终学习率根据训练策略调整
momentum0.937SGD动量/Adam beta1根据优化器类型调整
weight_decay0.0005优化器权重衰减通常保持默认值
warmup_epochs3.0热身周期数根据模型特性调整
warmup_momentum0.8热身初始动量根据训练策略调整
warmup_bias_lr0.1热身初始偏置学习率根据训练策略调整
box7.5盒子损失增益根据模型特性和训练数据调整
cls0.5类别损失增益根据分类任务的复杂性调整
dfl1.5DFL损失增益根据具体应用调整
pose12.0姿态损失增益(仅限姿态)仅在姿态检测任务中使用
kobj2.0关键点目标损失增益(仅限姿态)仅在姿态检测任务中使用
label_smoothing0.0标签平滑(比例)根据训练策略调整
nbs64标称批量大小根据硬件资源调整
overlap_maskTrue掩码在训练期间是否重叠(仅限分割训练)仅在分割任务中使用
mask_ratio4掩码下采样比例(仅限分割训练)仅在分割任务中使用
dropout0.0使用dropout正则化(仅限分类训练)仅在分类任务中使用
valTrue训练期间进行验证/测试通常保持默认
plotsFalse训练/验证期间保存图表和图像需要可视化训练过程时设置为True

3.5 训练结果文件说明

训练日志的图表对于评估和理解模型的性能非常重要,可以帮助我们分析模型的优势和弱点。

  • weights 文件夹
    • best.pt:损失值最小的模型文件
    • last.pt:训练到最后的模型文件
  • args.yaml:模型训练的配置参数
  • confusion_matrix.png:混淆矩阵,展示了分类模型的性能。
    每一行代表模型预测的类别,每一列代表实际的类别。对角线上的数值表示模型正确预测的数量。对角线上较深的颜色表示该类别预测正确的数量较多。
  • confusion_matrix_normalized.png:标准化混淆矩阵,显示每个类别的预测正确比例。
  • F1_curve.png:F1-置信度曲线,显示了F1得分随着置信度阈值的变化。
    F1得分是精确度和召回率的调和平均值,曲线的峰值表示给定置信度阈值下精确度和召回率的最佳平衡点。
  • labels.jpg:标签分布图和边界框分布图。
    柱状图显示了不同类别的实例分布数量。散点图则展示了目标检测任务中边界框的空间分布情况,反映了常见的尺寸和长宽比。
  • labels_correlogram.jpg:标签相关图
    相关图提供了不同类别标签之间的关系,以及它们在图像中位置的相关性。这有助于理解模型在识别不同类别时可能出现的关联或混淆。
  • P_curve.png:精确度-置信度曲线,展示了模型预测的精确度随着置信度阈值的变化。
    精确度是模型预测正确正例与预测为正例总数的比值。
  • PR_curve.png:精确度-召回曲线,展示了模型的精确度与召回率之间的关系。
    理想情况下,模型应在精确度和召回率之间保持良好的平衡。
  • R_curve.png:召回-置信度曲线,显示了模型的召回率随置信度阈值的变化。
    召回率是模型正确预测的正例与实际正例总数的比值。
  • results.png 和 results.csv:训练结果图表和数据
    展示了模型在训练过程中的性能变化,包括损失函数的变化和评估指标(如精确度、召回率和mAP)的变化。

4. 模型验证与模型预测

4.1 模型验证

训练后验证。

  1. 将训练好的模型 best.pt 保存在项目的根目录,并改名为 “yolov8nAquarium.pt”。
  2. 模型验证程序如下。
from ultralytics import YOLO

if __name__ == '__main__':
    # 读取模型,传入训练好的模型
    model = YOLO('yolov8nAquarium.pt')
    # 验证模型
    metrics = model.val()  # 无需参数,使用 best.pt中的配置文件
  1. 运行模型验证程序,结果保存在 “.\runs\detect\val” 文件夹。
C:\Users\Administrator\.conda\envs\yolo8\python.exe C:\Python\PythonProjects\YOLOv8\YOLOv8_val1.py 
Ultralytics YOLOv8.1.0 🚀 Python-3.8.20 torch-2.4.1+cu121 CUDA:0 (NVIDIA GeForce RTX 3060, 12288MiB)
YOLOv8 summary (fused): 168 layers, 3007013 parameters, 0 gradients, 8.1 GFLOPs
val: Scanning C:\Python\PythonProjects\YOLOv8\datasets\Aquarium\labels\val.cache... 127 images, 0 backgrounds, 0 corrupt: 100%|██████████| 127/127 [00:00<?, ?it/s]
                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100%|██████████| 8/8 [00:01<00:00,  4.73it/s]
                   all        127        909      0.804      0.697       0.76      0.449
                  fish        127        459      0.804      0.721       0.81      0.449
             jellyfish        127        155       0.86      0.871      0.926      0.545
               penguin        127        104      0.746      0.735       0.75      0.331
                puffin        127         74      0.771      0.568      0.626      0.309
                 shark        127         57      0.773      0.579      0.618      0.386
              starfish        127         27      0.907      0.704      0.802      0.585
              stingray        127         33      0.768      0.701      0.785       0.54
Speed: 1.1ms preprocess, 5.8ms inference, 0.0ms loss, 2.2ms postprocess per image
Results saved to runs\detect\val2

在这里插入图片描述


4.2 模型预测

训练后验证。

  1. 将训练好的模型 best.pt 保存在项目的根目录,并改名为 “yolov8nAquarium.pt”。
  2. 模型预测程序如下。
    参数 source 可以是一个或多个图片文件,一个视频文件,也可以是一个文件夹,或视频采集设备。
from ultralytics import YOLO

if __name__ == '__main__':
    # 读取模型,传入训练好的模型
    model = YOLO('yolov8nAquarium.pt')
    outputs = model.predict(source="./datasets/Aquarium/images/val", save=True)  # treat predict as a Python generator
    for output in outputs:
        # each output here is a dict.
        # for detection
        print(output["det"])  # np.ndarray, (N, 6), xyxy, score, cls
  1. 运行模型预测程序,结果保存在 “.\runs\detect\predict” 文件夹。

>


【本节完】


版权声明:
欢迎关注『youcans动手学模型』系列
转发请注明原文链接:
【YOLO 项目实战】(11)YOLO8 数据集与模型训练
Copyright 2024 youcans
Crated:2024-12-20


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2263528.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Ubuntu22.04上安装esp-idf

一、安装准备# 建议使用Ubuntu 20.04 或 Ubuntu 22.04 操作系统 为了在 Ubuntu 22.04 中使用 esp-idf&#xff0c;需要安装一些依赖包 sudo apt-get install git wget flex bison gperf python3\python3-pip python3-venv cmake ninja-build ccache\libffi-dev libssl-dev dfu…

nginx-虚拟主机配置笔记

目录 nginx的安装可以查看nginx安装https://blog.csdn.net/m0_68472908/article/details/144609023?spm1001.2014.3001.5501 一、 基于域名 二、 基于IP 三、 基于端口 nginx的安装可以查看nginx安装https://blog.csdn.net/m0_68472908/article/details/144609023?spm100…

AlipayHK支付宝HK接入-商户收款(PHP)

一打开支付宝国际版 二、点开商户服务 三、下载源码

Soul Android端稳定性背后的那些事

前言&#xff1a;移动应用的稳定性对于用户体验和产品商业价值都有着至关重要的作用。应用崩溃会导致关键业务中断、用户留存率下降、品牌口碑变差、生命周期价值下降等影响&#xff0c;甚至会导致用户流失。因此&#xff0c;稳定性是APP质量构建体系中最基本和最关键的一环。当…

深度学习模型 DeepSeek-VL2 及其消费级显卡需求分析

DeepSeek-VL2 是由 DeepSeek 团队开发的一款先进的视觉语言模型&#xff0c;采用了混合专家&#xff08;MoE&#xff09;架构&#xff0c;旨在提升多模态理解能力。该模型包括三个版本&#xff1a;DeepSeek-VL2-Tiny、DeepSeek-VL2-Small 和 DeepSeek-VL2。每个版本具有不同的模…

首批|云轴科技ZStack成为开放智算产业联盟首批会员单位

近日 &#xff0c;在Linux基金会AI & Data及中国开源软件推进联盟的指导之下&#xff0c;开放智算产业联盟成立大会在北京成功召开。在大会上&#xff0c;联盟首次公布了组织架构并颁发了首批会员单位证书。凭借ZStack AIOS平台智塔和在智算领域的技术创新&#xff0c;云轴…

word实现两栏格式公式居中,编号右对齐

1、确定分栏的宽度 选定一段文字 点击分栏&#xff1a;如本文的宽度为22.08字符 2、将公式设置为 两端对齐&#xff0c;首行无缩进。 将光标放在 公式前面 点击 格式-->段落-->制表位 在“制表位位置”输入-->11.04字符&#xff08;22.08/211.04字符&#xff09;&…

go语言zero框架中config读取不到.env文件问题排查与解决方案

在Go语言中&#xff0c;如果你使用.env文件来存储环境变量&#xff0c;通常会用到一些第三方库&#xff0c;例如github.com/joho/godotenv&#xff0c;它可以帮助我们从.env文件中读取环境变量。然而&#xff0c;在使用godotenv时&#xff0c;可能会遇到一些问题&#xff0c;导…

修改vscode设置的原理

转载请标明出处&#xff1a;小帆的帆的专栏 修改vscode设置 首先需要理解的是&#xff0c;vscode的系统设置和插件设置都是通过settings.json文件管理的。 vscode中有三个Settings&#xff0c;三个Settings分别对应三个settings.json文件 Default Settings&#xff1a;默认…

Qt之修改窗口标题、图标以及自定义标题栏(九)

Qt开发 系列文章 - titles-icons-titlebars&#xff08;九&#xff09; 目录 前言 一、修改标题 二、添加图标 三、更换标题栏 1.效果演示 2.创建标题栏类 3.定义相关函数 4.使用标题栏类 总结 前言 在我们利用Qt设计软件时&#xff0c;经常需要修改窗口标题、更改软…

环境变量的知识

目录 1. 环境变量的概念 2. 命令行参数 2.1 2.2 创建 code.c 文件 2.3 对比 ./code 执行和直接 code 执行 2.4 怎么可以不带 ./ 2.4.1 把我们的二进制文件拷贝到 usr/bin 路径下&#xff0c;也不用带 ./ 了 2.4.2 把我们自己的路径添加到环境变量里 3. 认识PATH 3.…

【时时三省】(C语言基础)通讯录1

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ----CSDN 时时三省 通讯录 1 .通讯录中能够存放1000个人的信息 每个人的信息&#xff1a; 名字年龄性别电话地址 2、增加人的信息 3、删除指定人的信息 4、修改指定人的信息 5&#xff0c;查找指定人的信…

Vulhub:Redis[漏洞复现]

4-unacc(Redis未授权代码执行) 启动漏洞环境 docker-compose up -d 阅读vulhub给出的漏洞文档 cat README.zh-cn.md # Redis 4.x/5.x 主从复制导致的命令执行 Redis是著名的开源Key-Value数据库&#xff0c;其具备在沙箱中执行Lua脚本的能力。 Redis未授权访问在4.x/5.0.5以…

【PGCCC】Postgresql Varlena 结构

前言 postgresql 会有一些变长的数据类型&#xff0c;存储都是采用 varlena 格式的&#xff08;除了 cstring 类型&#xff09;&#xff0c;通过语句 SELECT typname FROM pg_type WHERE typlen -1就可以看到所有采用 varlena 格式的数据类型&#xff0c;比如常见的 text &am…

Ubuntu搭建ES8集群+加密通讯+https访问

目录 写在前面 一、前期准备 1. 创建用户和用户组 2. 修改limits.conf文件 3. 关闭操作系统swap功能 4. 调整mmap上限 二、安装ES 1.下载ES 2.配置集群间安全访问证书密钥 3.配置elasticsearch.yml 4.修改jvm.options 5.启动ES服务 6.修改密码 7.启用外部ht…

LeetCode:144.前序遍历

跟着carl学算法&#xff0c;本系列博客仅做个人记录&#xff0c;建议大家都去看carl本人的博客&#xff0c;写的真的很好的&#xff01; 代码随想录 LeetCode&#xff1a;144. 二叉树的前序遍历 给你二叉树的根节点 root &#xff0c;返回它节点值的 前序 遍历。 示例 1&#x…

git remote -v(--verbose)显示你的 Git 仓库配置的远程仓库的详细信息

git remote -v 是一个 Git 命令&#xff0c;用于显示你的 Git 仓库配置的远程仓库的详细信息。 当你执行 git remote -v 命令时&#xff0c;你会看到类似以下的输出&#xff1a; origin https://github.com/your-username/your-repo.git (fetch) origin https://github.com…

Gin-vue-admin(4):项目创建前端一级页面和二级页面

目录 创建一级页面创建二级页面 创建一级页面 view目录下新建一个my&#xff0c;Index.vue <template></template><script> export default {name:My, } </script><script setup> import {ref} from vue const myNameref("name") &…

数据结构漫游记:初识vector

​ 嘿&#xff0c;各位技术潮人&#xff01;好久不见甚是想念。生活就像一场奇妙冒险&#xff0c;而编程就是那把超酷的万能钥匙。此刻&#xff0c;阳光洒在键盘上&#xff0c;灵感在指尖跳跃&#xff0c;让我们抛开一切束缚&#xff0c;给平淡日子加点料&#xff0c;注入满满的…

R语言混合模型回归GBTM群组轨迹模型绘图可视化研究

全文链接&#xff1a;https://tecdat.cn/?p38581 在回归分析的广袤领域中&#xff0c;面对具有多条未知函数线的复杂数据时&#xff0c;传统方法常常捉襟见肘。混合模型作为一种强有力的分析手段应运而生&#xff0c;其在处理此类复杂情境时展现出独特的优势与潜力&#xff08…