【跟我学YOLO】YOLO12(3)训练自己的数据集


欢迎关注『跟我学 YOLO』系列
【跟我学YOLO】(1)YOLO12:以注意力为中心的物体检测
【跟我学YOLO】(2)YOLO12 环境配置与基本应用
【跟我学YOLO】(3)YOLO12 训练自己的数据集


【跟我学YOLO】(3)YOLO12 训练自己的数据集

    • 1. 创建和配置 YOLO12 使用环境
    • 2. 准备 YOLO12 训练数据集
      • 2.1 YOLOv12 数据集的格式
      • 2.2 下载 YOLO 数据集
      • 2.3 重新整理 YOLOv11 数据集
    • 3. 自有数据集的训练
      • 3.1 下载 YOLO12 预训练模型
      • 3.2 使用 Python 接口的模型训练
      • 3.4 训练日志
      • 3.5 断点训练
    • 4. 模型验证与模型预测
      • 4.1 模型验证
      • 4.2 模型预测
    • 5. 报错处理
      • 5.1 路径配置报错:RuntimeError: Dataset 'data.yaml' error
      • 5.2 拉取 Arial.ttf 报错:Downloading https://ultralytics.com/assets/Arial.ttf to...
      • 5.3 虚拟内存不足报错:OSError: [WinError 1455]


YOLO12 引入了一种以注意力为中心的架构,该模型通过对注意力机制和整体网络架构进行新颖的方法创新,实现了最先进的物体检测精度,同时保持了实时性能。YOLO12 支持一系列核心计算机视觉任务:物体检测、实例分割、图像分类、姿态估计和定向物体检测 (OBB)。YOLO12 效率更高,部署灵活。

上节介绍了 YOLO12 的下载、配置和推理,本节介绍使用用户自己的数据集训练 YOLO12 模型,建立特定任务的私有模型。创建自定义模型来检测对象,包括图像的采集和标注、训练模型、模型部署,以及使用部署的模型进行推理。

YOLOv12 下载:GitHub - YOLO12
Ultralytics 官方文档: YOLO12 使用指南(中文版)


1. 创建和配置 YOLO12 使用环境

官方参考步骤如下,主要包括 创建虚拟环境和安装项目依赖。但考虑国内安装环境问题,以及使用的操作系统(官方步骤针对 Linux 系统),直接使用 requirements.txt 安装项目依赖可能报错,推荐按照 【跟我学YOLO】(2)YOLO12 环境配置与基本应用 中“3. 虚拟环境的创建与配置” 的步骤操作,准备 YOLO12 环境。

# 创建conda环境
conda create -n yolov12 python=3.8
conda activate yolov12# 安装PyTorch (根据CUDA版本选择)
pip install torch torchvision torchaudio# 克隆YOLOv12代码库
git clone https://github.com/xxx/yolov12.git
cd yolov12# 安装依赖
pip install -r requirements.txt

2. 准备 YOLO12 训练数据集

YOLO11 项目中提供了不同数据集转换的指南和例程,位于 “.\docs\en\datasets” 路径,例如在文件 coco.md 中介绍了使用 COCO 数据集来训练 YOLOv11 目标检测模型。YOLO12 项目没有提供数据集转换的指南和例程,但方法与 YOLO11 是一致的,可以参考使用。


2.1 YOLOv12 数据集的格式

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

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

  • images 目录包含 train、valid 文件夹,这两个文件夹下包含模型训练所需要的图片文件;
  • labels 目录包含 train、valid 文件夹,这两个文件夹下包含模型训练图片所对应的标注文件;
  • images 目录可以包含 test 文件夹,其中包含测试所用的图片文件。
dataset/
├── images/
│   ├── train/
│   └── val/
│   └── test/  # (option)
└── labels/├── train/└── val/

2、标注文件的格式

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

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

其中:

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

例如,某一行的标注信息为 “2 0.3 0.6 0.25 0.40”,其中“2”表示类别编号,后面的 4个数字表示目标在图像中的位置 <x> <y> 和宽高 <width> <height>。

3、XML 标注文件的格式转换

对于 Pascal VOC数据集,常用XML格式的标注文件,需要将文件夹下的所有类别的 xml 格式的标注转换成为yolo格式。转换后的标签要保存在 labels文件夹文件夹下。

将 xml 格式的标注转换成为yolo格式的例程如下。

import os
import xml.etree.ElementTree as ET
import globdef convert_coordinates(size, box):"""将XML中的边界框坐标转换为YOLO格式"""dw = 1.0/size[0]dh = 1.0/size[1]# XML格式为 xmin, ymin, xmax, ymaxx = (box[0] + box[2])/2.0y = (box[1] + box[3])/2.0w = box[2] - box[0]h = box[3] - box[1]# 归一化x = x*dww = w*dwy = y*dhh = h*dhreturn (x,y,w,h)def convert_xml_to_yolo(xml_path, class_mapping):"""转换单个XML文件到YOLO格式"""tree = ET.parse(xml_path)root = tree.getroot()# 获取图像尺寸size = root.find('size')width = int(size.find('width').text)height = int(size.find('height').text)# 创建对应的txt文件路径txt_path = xml_path.replace('Annotations', 'Labels').replace('.xml', '.txt')# 确保Labels目录存在os.makedirs(os.path.dirname(txt_path), exist_ok=True)with open(txt_path, 'w') as txt_file:# 处理每个目标for obj in root.iter('object'):# 获取类别名称class_name = obj.find('name').text# 获取类别IDif class_name not in class_mapping:continueclass_id = class_mapping[class_name]# 获取边界框坐标xmlbox = obj.find('bndbox')xmin = float(xmlbox.find('xmin').text)ymin = float(xmlbox.find('ymin').text)xmax = float(xmlbox.find('xmax').text)ymax = float(xmlbox.find('ymax').text)# 转换坐标bb = convert_coordinates((width,height), (xmin,ymin,xmax,ymax))# 写入txt文件txt_file.write(f"{class_id} {bb[0]:.6f} {bb[1]:.6f} {bb[2]:.6f} {bb[3]:.6f}\n")def main():# 定义类别映射class_mapping = {'missing_hole': 0,'mouse_bite': 1,'open_circuit': 2,'short': 3,'spur': 4,'spurious_copper': 5}# 获取所有XML文件xml_files = glob.glob('Annotations/*/*.xml')# 转换每个XML文件for xml_file in xml_files:try:convert_xml_to_yolo(xml_file, class_mapping)print(f"成功转换: {xml_file}")except Exception as e:print(f"转换失败 {xml_file}: {str(e)}")if __name__ == "__main__":main() 

2.2 下载 YOLO 数据集

  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 提供了多种下载格式,主要是数据集组织和标注格式的区别。注意要以YOLOv12 格式导出,如下图所示。

在这里插入图片描述

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

在这里插入图片描述

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

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

DatasetAquariumYolo/
├── train/
│   ├── images/
│   └── labels/
├── valid/
│   ├── images/
│   └── labels/
├── test/ (option)
│   ├── images/
│   └── labels/
└── data.yaml

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

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

3 0.5 0.5361328125 0.08854166666666667 0.1142578125
3 0.30859375 0.3115234375 0.09244791666666667 0.103515625
3 0.71875 0.5859375 0.15104166666666666 0.0888671875
3 0.3072916666666667 0.494140625 0.10807291666666667 0.0693359375

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

  1. 数据集配置文件 .yaml

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

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

train: ../train/images
val: ../valid/images
test: ../test/imagesnc: 7
names: ['fish', 'jellyfish', 'penguin', 'puffin', 'shark', 'starfish', 'stingray']roboflow:workspace: brad-dwyerproject: aquarium-combinedversion: 2license: CC BY 4.0url: https://universe.roboflow.com/brad-dwyer/aquarium-combined/dataset/2

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

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


2.3 重新整理 YOLOv11 数据集

YOLO13 模型训练对于格式的要求非常严格,需要重新组织样本图片和标签。

  1. 为了方便在不同项目中使用数据集,将 YOLO12_Aquarium 项目和 DatasetAquariumYolo12 数据集都保存在 Projects 目录下。其中,我们把 YOLO12 项目另存为 YOLO12_Aquarium,以便与下载的 YOLO12 区别。
- Projects- DatasetAquarium- YOLO12_Aquarium
  1. 按照 YOLO12 的数据格式组织数据集的样本图片和标签。
- PyProjects- DatasetAquarium- test- images- labels- train- images- labels- valid- images- labels- YOLO12_Aquarium- dataAquariumYolo12.yaml- Yolo12_train.py
  1. 编写数据集配置文件 YAML(dataAquariumYolo12.yaml )。

YOLO12 模型训练时,要调用数据集配置文件 YAML 文件,用于指定数据集的路径和分类类别。

在 YOLO12 项目中,提供了多个数据集配置文件,例如:“\YOLOv12\ultralytics\cfg\datasets\coco8.yaml” 可供参考。其内容如下。

# 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: ../datasets/coco8 # dataset root dir
train: images/train # train images (relative to 'path') 4 images
val: images/val # val images (relative to 'path') 4 images
test: # test images (optional)# Classes
names:0: person1: bicycle2: car3: motorcycle4: airplane5: bus6: train7: truck8: boat9: traffic light10: fire hydrant...

现在,我们根据Aquarium Dataset 数据集配置文件 data.yaml ,编写本项目的数据集配置文件 dataAquarium.yaml,保存到 YOLO12_Aquarium 项目的根目录,内容如下。

# Ultralytics YOLO 🚀, AGPL-3.0 license
# 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: ../DatasetAnimalYolo  # The database root directory is located one level below the YOLO12 root directory
path: C:/Python/PyProjects2025/DatasetAquarium  # The database root directory is located at the same level as the YOLO12 root directory
train: train/images  # train images (relative to 'path')
val: valid/images  # val images (relative to 'path')
test: test/images # test images (optional)# Classes
names:0: fish1: jellyfish2: penguin3: puffin4: shark5: starfish6: stingray

在这里插入图片描述


3. 自有数据集的训练

3.1 下载 YOLO12 预训练模型

在 YOLO12/GitHub 项目仓,提供了在 COCO数据集上训练达到的检测(Detection)、分类(Classification)、分割(Segmentation)、姿态估计(Pose)、定向边界框检测(OBB)等任务的预训练模型。
YOLO12 有多个不同规模的模型,从小到大依次是:YOLO12n、YOLO12s、YOLO12m、YOLO12l、YOLO12x。这些模型与各种操作模式兼容,包括推理、验证、训练和导出,便于在部署和开发的不同阶段使用。在 下载 YOLO12 项目 中的 Readme.md 文件中可以找到以下内容(包括模型下载地址): YOLO12n , YOLO12s, YOLO12m, YOLO12l , YOLO12x。

以检测任务为例,如下图所示,点击所需的模型即可下载相应的预训练模型。
在这里插入图片描述

说明:YOLO12 在运行时如果在本地没有检测到预训练模型,,将会自动从网络下载并保存,但下载速度可能很慢甚至连接失败(视网络条件和限制),因此推荐先将 YOLO12 预训练模型下载到本地。

本文选择检测任务模型 YOLO12n,参数约 2.5M。下载完成后,将模型文件保存在 YOLO12 项目的根目录路径下,即 “.\YOLOv12_Aquarium\yolov12n.pt”。


3.2 使用 Python 接口的模型训练

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

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

from ultralytics import YOLOif __name__ == '__main__':# 创建 YOLO12 模型对象,加载指定的模型配置model = YOLO('ultralytics/cfg/models/v12/yolov12.yaml')# 加载预训练的权重文件,加速训练并提升模型性能model.load(f'yolov12n.pt')# 用指定数据集训练模型results = model.train(data=f'dataAquariumYolo12.yaml',  # 指定训练数据集的配置文件路径epochs=100,  # 设置训练的总轮数为100轮batch=64,  # 设置每个训练批次的大小为16imgsz=640,  # 指定训练时使用的图像尺寸workers=4,  # 设置用于数据加载的线程数为4cache=True,  # 是否缓存数据集以加快后续训练速度device='0',  # 运行设备, 指定使用 GPU 设备optimizer='SGD',  # 设置优化器为SGD(随机梯度下降)freeze=10       # ✅ 冻结模型前10层(backbone部分))

注意:
(1)本例程使用的 YOLOv12 项目的路径为 “C:\Python\Projects\YOLOv12_Aquarium” 。
(2)本例程使用的训练数据集配置文件路径为 “C:\Python\Projects\YOLOv12_Aquarium\dataAnimalYolo12.yaml” 。
(3)本例程运行后的训练模型及训练日志保存在 “C:\Python\Projects\YOLOv12_Aquarium\runs\detect\train” 目录下。


在这里插入图片描述


在 PyCharm 编译并运行程序,就实现对 Aquarium数据集进行模型训练。运行时在 PyCham 窗口中输出模型训练的信息如下。

C:\Python\Miniconda3\envs\YOLO12\python.exe C:\Python\PyProjects2025\Yolov12-Aquarium\Yolo12_train01.py 
WARNING ⚠️ no model scale passed. Assuming scale='n'.
Transferred 739/739 items from pretrained weights
New https://pypi.org/project/ultralytics/8.3.169 available 😃 Update with 'pip install -U ultralytics'
Ultralytics 8.3.63 🚀 Python-3.11.13 torch-2.6.0+cu124 CUDA:0 (NVIDIA GeForce RTX 4060 Ti, 16380MiB)
engine\trainer: task=detect, mode=train, model=ultralytics/cfg/models/v12/yolov12.yaml, data=dataAquariumYolo12.yaml, epochs=200, time=None, patience=100, batch=64, imgsz=640, save=True, save_period=-1, cache=True, device=0, workers=4, project=None, name=train, exist_ok=False, pretrained=yolov12n.pt, optimizer=SGD, verbose=True, seed=0, deterministic=True, single_cls=False, rect=False, cos_lr=True, close_mosaic=10, resume=False, amp=True, fraction=1.0, profile=False, freeze=10, 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=True, opset=None, workspace=None, 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.0, box=7.5, cls=0.5, dfl=1.5, pose=12.0, kobj=1.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, bgr=0.0, mosaic=1.0, mixup=0.0, copy_paste=0.1, copy_paste_mode=flip, auto_augment=randaugment, erasing=0.4, crop_fraction=1.0, cfg=None, tracker=botsort.yaml, save_dir=runs\detect\train
Overriding model.yaml nc=80 with nc=7
WARNING ⚠️ no model scale passed. Assuming scale='n'.from  n    params  module                                       arguments                     0                  -1  1       464  ultralytics.nn.modules.conv.Conv             [3, 16, 3, 2]                 1                  -1  1      2368  ultralytics.nn.modules.conv.Conv             [16, 32, 3, 2, 1, 2]          2                  -1  1      6640  ultralytics.nn.modules.block.C3k2            [32, 64, 1, False, 0.25] ...Logging results to runs\detect\train
Starting training for 200 epochs...Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size1/200      5.52G      1.534      4.307      1.379        749        640: 100%|██████████| 7/7 [00:03<00:00,  2.21it/s]Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100%|██████████| 1/1 [00:00<00:00,  1.65it/s]all        127        909     0.0024      0.149    0.00428     0.0022...Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size200/200      5.28G      1.037     0.7246      1.001        488        640: 100%|██████████| 7/7 [00:02<00:00,  2.54it/s]Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100%|██████████| 1/1 [00:00<00:00,  1.18it/s]all        127        909      0.734      0.691      0.744      0.443Validating runs\detect\train\weights\best.pt...
Ultralytics 8.3.63 🚀 Python-3.11.13 torch-2.6.0+cu124 CUDA:0 (NVIDIA GeForce RTX 4060 Ti, 16380MiB)
YOLOv12 summary (fused): 376 layers, 2,509,709 parameters, 0 gradients, 5.8 GFLOPsClass     Images  Instances      Box(P          R      mAP50  mAP50-95): 100%|██████████| 1/1 [00:01<00:00,  1.07s/it]all        127        909      0.787      0.671      0.744      0.451fish         63        459      0.845      0.678      0.785      0.429jellyfish          9        155      0.839      0.876      0.912      0.508penguin         17        104      0.702      0.644      0.675        0.3puffin         15         74       0.72      0.417      0.556      0.283shark         28         57      0.832      0.579      0.733      0.494starfish         17         27      0.835      0.748       0.82       0.63stingray         23         33      0.737      0.758       0.73      0.512
Speed: 0.2ms preprocess, 1.7ms inference, 0.0ms loss, 1.0ms postprocess per image
Results saved to runs\detect\train

3.4 训练日志

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

训练结果保存在 runs\detect\train,训练日志的图表如下图所示。

请添加图片描述

  1. 训练完成后,训练的最优模型保存为文件: “./Projects/YOLO12_Animal/runs/detect/train/weights/best.py”。
- weights 文件夹- best.pt:损失值最小的模型文件- last.pt:训练到最后的模型文件
- args.yaml:模型训练的配置参数

  1. 混淆矩阵
  • confusion_matrix.png 展示了分类模型的性能。图中的每一行代表模型预测的类别,每一列代表实际的类别。对角线上的数值表示模型正确预测的数量。对角线上较深的颜色表示该类别预测正确的数量较多。
  • confusion_matrix_normalized.png:标准化混淆矩阵,显示每个类别的预测正确比例。

  1. F1-置信度曲线
  • F1_curve.png:F1-置信度曲线,显示了F1得分随着置信度阈值的变化。
    F1得分是精确度和召回率的调和平均值,曲线的峰值表示给定置信度阈值下精确度和召回率的最佳平衡点。

  1. 标签分布图和标签相关图
  • labels.jpg:标签分布图和边界框分布图。
    柱状图显示了不同类别的实例分布数量。散点图则展示了目标检测任务中边界框的空间分布情况,反映了常见的尺寸和长宽比。
  • labels_correlogram.jpg:标签相关图
    相关图提供了不同类别标签之间的关系,以及它们在图像中位置的相关性。这有助于理解模型在识别不同类别时可能出现的关联或混淆。
  1. P/PR/R 曲线
  • P_curve.png:精确度-置信度曲线,展示了模型预测的精确度随着置信度阈值的变化。
    精确度是模型预测正确正例与预测为正例总数的比值。
  • PR_curve.png:精确度-召回曲线,展示了模型的精确度与召回率之间的关系。
    理想情况下,模型应在精确度和召回率之间保持良好的平衡。
  • R_curve.png:召回-置信度曲线,显示了模型的召回率随置信度阈值的变化。
    召回率是模型正确预测的正例与实际正例总数的比值。

  1. 训练结果图表和数据
  • results.png 和 results.csv:训练结果图表和数据
    展示了模型在训练过程中的性能变化,包括损失函数的变化和评估指标(如精确度、召回率和mAP)的变化。

3.5 断点训练

YOLO11 提供了参数 “resume” 进行断点训练。

对于大型数据集,使用 YOLO11 进行模型训练所需的时间很长,如果训练中断或者出现异常,可以接着从上一次中断时的模型继续训练。

  1. 将 “resume” 参数修改为 “True”,则会加载上一次训练的模型权重和优化器状态,继续从断点开始训练。

  2. 加载预训练模型权重文件时,使用上次中断的模型或最后一次训练的权重(last.pt)。

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

关键参数说明:

–img: 输入图像尺寸
–batch: 批次大小
–epochs: 训练轮数
–data: 数据集配置文件
–cfg: 模型配置文件
–weights: 预训练权重路径,''表示从零开始
–name: 实验名称

4. 模型验证与模型预测

4.1 模型验证

训练后验证。

  1. 将训练好的模型 best.pt 保存在项目的根目录,并将文件名改为 “yolo11nAnimal.pt”。
  2. 模型验证程序如下。
from ultralytics import YOLOif __name__ == '__main__':# 读取模型,传入训练好的模型model = YOLO('yolo11nAnimal.pt')# 验证模型metrics = model.val()  # 无需参数,使用 best.pt中的配置文件
  1. 运行模型验证程序,结果保存在 “.\runs\detect\val” 文件夹。
C:\Python\miniconda3\envs\yolo11\python.exe C:\Python\Projects\YOLOv11_Animal\test01.py 
Ultralytics 8.3.57 🚀 Python-3.8.20 torch-2.4.1+cpu CPU (Intel Core(TM) i7-4790 3.60GHz)
YOLO11_Animal summary (fused): 238 layers, 2,583,517 parameters, 0 gradients, 6.3 GFLOPs
val: Scanning C:\Python\Projects\DatasetAnimalYolo11\labels\valid.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:12<00:00,  1.51s/it]all        127        909      0.568      0.441      0.469      0.216fish         63        459      0.654      0.458      0.531      0.243jellyfish          9        155      0.595      0.748      0.766      0.379penguin         17        104      0.356      0.538      0.419      0.146puffin         15         74      0.541      0.175      0.234       0.08shark         28         57      0.651      0.351      0.424      0.184starfish         17         27      0.584      0.333       0.38      0.243stingray         23         33      0.592      0.485      0.531      0.236
Speed: 1.3ms preprocess, 70.8ms inference, 0.0ms loss, 7.0ms postprocess per image
Results saved to runs\detect\val

在这里插入图片描述


4.2 模型预测

训练后验证。

  1. 将训练好的模型 best.pt 保存在项目的根目录,并改名为 “yolo12nAquarium.pt”。
  2. 模型预测程序如下。
    参数 source 可以是一个或多个图片文件,一个视频文件,也可以是一个文件夹,或视频采集设备。
from ultralytics import YOLOif __name__ == '__main__':# 读取模型,传入训练好的模型model = YOLO('yolo12nAquarium.pt')outputs = model.predict(source=f"C:\\Python\\PyProjects2025\\DatasetAquarium\\test\\images", save=True) 
  1. 运行模型预测程序,结果保存在 “.\runs\detect\predict” 文件夹。

在这里插入图片描述


5. 报错处理

5.1 路径配置报错:RuntimeError: Dataset ‘data.yaml’ error

raise RuntimeError(emojis(f"Dataset '{clean_url(self.args.data)}' error ❌ {e}")) from e
RuntimeError: Dataset 'dataAnimalYolo11.yaml' error  
Dataset 'dataAnimalYolo12.yaml' images not found , missing path 'C:\Python\Projects\Yolo12\DatasetAnimalYolo\images\valid'
Note dataset download directory is 'C:\Python\Projects\Yolo12\datasets'. You can update this in 'C:\Users\David Huang\AppData\Roaming\Ultralytics\settings.json'

问题分析与解决方法:
这是由于路径配置错误或数据集结构不正确。需要用户检查YAML文件中的路径配置,并验证实际文件结构,确保程序在正确的位置寻找数据集。

具体地,以 YOLO 项目绝对路径 “C:\Python\Projects\YOLO12_Animal”、数据集绝对路径 “C:\Python\Projects\DatasetAnimalYolo” 为例,检查用户目录下 “AppData\Roaming\Ultralytics\settings.json” 中的下载目录设置,修改 “datasets_dir” 如下:

{..."datasets_dir": "C:\\Python\\Projects",...
}

5.2 拉取 Arial.ttf 报错:Downloading https://ultralytics.com/assets/Arial.ttf to…

在 Downloading https://ultralytics.com/assets/Arial.ttf to /home/zelan/.config/Ultralytics/Arial.ttf…卡住并报错:“Remote Disconnected: Remote end closed connection without response”。

问题分析与解决方法:

进行训练时会自动下载 Arial.ttf 字体,可能由于网络原因无法下载或者下载很慢。可以预先下载 Arial.ttf 并保存到用户目录下 “AppData\Roaming\Ultralytics\Arial.ttf”。注意不是保存到当前的 YOLO12 项目的根目录下。

Arial.ttf 下载地址


5.3 虚拟内存不足报错:OSError: [WinError 1455]

Error loading “C:\Python\Anaconda\anaconda3\envs\torch1.8\lib\site-packages\torch\lib\cudnn_cnn_infer64_8.dll” or one of its dependencies

问题分析与解决方法:
dll 文件或其依赖项时出现了问题,原因是页面文件(即虚拟内存)的大小不足以完成操作。通过降低数据加载的线程数可以解决这个问题。

例如设置线程数 “workers” 为 1,减小每个训练批次的大小 “batch”:

               batch=4,  # 设置每个训练批次的大小为4close_mosaic=10,  # 设置在训练的最后 10 轮中关闭 Mosaic 数据增强workers=1,  # 设置用于数据加载的线程数为1

【本节完】

版权声明:
欢迎关注『跟我学YOLO』系列
转发必须注明原文链接:
【跟我学YOLO】(3)YOLO12 训练自己的数据集
Copyright by youcans@qq.com 2025
Crated:2025-07

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

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

相关文章

【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - 微博舆情分析实现

大家好&#xff0c;我是java1234_小锋老师&#xff0c;最近写了一套【NLP舆情分析】基于python微博舆情分析可视化系统(flaskpandasecharts)视频教程&#xff0c;持续更新中&#xff0c;计划月底更新完&#xff0c;感谢支持。今天讲解微博舆情分析实现 视频在线地址&#xff1…

【C++】手搓一个STL风格的vector容器

TOC(手搓一个STL风格的vector容器) 手搓一个STL风格的vector容器 github地址 有梦想的电信狗 0. 前言&#xff1a;动态数组的工程实践 ​ 在C标准库中&#xff0c;vector容器作为最核心的序列式容器&#xff0c;其设计融合了动态数组的高效性与安全性。本文将通过完整实现…

24. 了解过 webp 吗

总结 一种图片格式 一、什么是 WebP&#xff1f; WebP&#xff08;发音为 “weppy”&#xff09;是由 Google 推出的一种现代图片格式&#xff0c;支持有损压缩和无损压缩&#xff0c;旨在提供更小的文件体积和更高质量的图像显示。 它兼容常见的图片功能&#xff0c;如&#…

【Unity笔记】Unity Camera.cullingMask 使用指南:Layer 精准控制、XR 多视图与性能提升

Unity Camera.cullingMask 使用指南&#xff1a;Layer 精准控制、XR 多视图与性能提升 关键词&#xff1a;Unity、Camera、Culling Mask、Layer 控制、XR 渲染分离、UI 显隐、性能优化 特别说明&#xff1a; 本文为近期项目所遇问题的总结&#xff0c;仅纯文字记录&#xff0c;…

携带参数的表单文件上传 axios, SpringBoot

页面上的表单如上图, 点击确定按钮需要把参数统一传给后端.前端代码:表单的提交方法const submit async () > {const formData new FormData();formData.append("bookName", bookForm.value.bookName);formData.append("author", bookForm.value.auth…

黑马JavaWeb【复习到哪更新到哪】

登录认证&#xff08;复习Javaweb的登录校验&#xff09; 登录功能 思路就是loginController->service层->mapper层&#xff0c;从数据库中查找username和password是否和前端用户提交的表单内容一致&#xff0c;一致就登录成功&#xff0c;否则就返回登录失败的信息。 登…

NVMe高速传输之摆脱XDMA设计21:PCIe请求模块设计(下)

在接收到请求总线接口的请求事务后&#xff0c;当请求类型的值为0时&#xff0c;表示通过PCIE硬核的配置管理接口发送请求&#xff0c;由于请求接口的接口和时序与配置管理接口基本一致&#xff0c;因此此时直接将请求接口信号驱动到配置管理接口完成请求的发送&#xff0c;请求…

机器学习sklearn:不纯度与决策树构建

不纯度与决策树构建不纯度概念&#xff1a;决策树通过不纯度指标来选择最佳分割节点和分枝方式不纯度衡量节点中样本类别的混杂程度不纯度越低&#xff0c;节点中样本类别越纯净&#xff0c;拟合效果越好常用不纯度指标&#xff1a;信息熵(Entropy)&#xff1a;基于信息论的概念…

rk356x IR红外发射与接收之NEC协议

红外接收红外接收头解码器&#xff08;红外信号解码&#xff0c;主要是NEC解码&#xff09;红外发射器红外发光二极管晶振NEC编码组成共32位&#xff08;4bit&#xff09;&#xff1a;由8位用户码1 8位用户码2 8位命令码 8位命令码反码有时会存在按键一直按下的一帧信息&…

C++算法之单调栈

C算法中的单调栈&#xff1a;从入门到实战指南 大家好&#xff01;今天我们来聊聊C算法中一个超级实用的工具——单调栈。别被名字吓到&#xff0c;它其实很简单&#xff0c;就像排队买奶茶一样&#xff1a;队伍总是从矮到高&#xff08;或从高到矮&#xff09;排得整整齐齐&a…

React入门指南——指北指南(第二节)

React 实践:创建你的第一个待办事项列表 在前面的章节中,我们学习了 React 的核心概念(组件、Props、State 等)。本节将通过一个实际案例——创建待办事项列表(Todo List),帮助你巩固这些概念,并掌握 React 中处理用户交互、动态数据的基本方法。 案例目标 我们将构…

WAIC看点:可交付AI登场,场景智能、专属知识将兑现下一代AI价值

7月28日&#xff0c;为期三天的2025世界人工智能大会&#xff08;WAIC 2025&#xff09;在上海落下帷幕。作为全球 AI 领域最受关注的盛会之一&#xff0c;今年 WAIC 聚焦 AI 关键命题&#xff0c;围绕大模型与智能体应用、算力新基建及大数据、智能终端与具身智能、AI金融、AI…

设计模式(十一)结构型:外观模式详解

设计模式&#xff08;十一&#xff09;结构型&#xff1a;外观模式详解外观模式&#xff08;Facade Pattern&#xff09;是 GoF 23 种设计模式中的结构型模式之一&#xff0c;其核心价值在于为一个复杂的子系统提供一个统一、简化的高层接口&#xff0c;从而降低客户端与子系统…

接口测试核心概念与实践指南

核心概念什么是接口&#xff1f;软件不同部分之间进行通信和数据交换的约定或契约。定义了&#xff1a;请求方 (Client/Consumer) 如何调用&#xff08;方法、URL、参数&#xff09;。提供方 (Server/Provider) 如何响应&#xff08;数据结构、状态码&#xff09;。双方需要遵循…

【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - 热词数量分析日期统计功能实现

大家好&#xff0c;我是java1234_小锋老师&#xff0c;最近写了一套【NLP舆情分析】基于python微博舆情分析可视化系统(flaskpandasecharts)视频教程&#xff0c;持续更新中&#xff0c;计划月底更新完&#xff0c;感谢支持。今天讲解热词数量分析日期统计功能实现 视频在线地…

ICPC 2024 网络赛(I)

M. Find the Easiest Problem 题目大意 给定所有的提交记录&#xff0c;找到通过队伍最多且字典序最小的题目。 解题思路 按题意模拟即可 代码实现 #include <bits/stdc.h>using i64 long long;int main() {std::ios::sync_with_stdio(false);std::cin.tie(0);std…

【快捷指令】ios/macos快捷指令如何调用api接口(json请求例子)

一、步骤 之前已经写了一个【n8n】使用 n8n 创建插入数据到mysql的api&#xff08;图解步骤&#xff09;博客,感兴趣的可以看一下. 流程&#xff1a; 快捷指令调用api—开源工作流n8n上设置个快速写数据库的工作流 这样就实现了记录体重的一个快捷指令 二、步骤说明 1、…

「源力觉醒 创作者计划」_文心大模型4.5系列开源模型,意味着什么?对开发者、对行业生态有何影响?

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录「源力…

CanMV-K230 AI学习笔记系列

在学习了一段时间CanMV-K230后&#xff0c;感觉虽然可以直接调用复杂的模型&#xff0c;但是很多环节不是很明白&#xff0c;因此希望能够从基础的模型开始逐渐深入学习。 下面为已经完成的一些笔记及计划&#xff1a; 1 CanMV K230使用经验分享 这个是刚开始学习K230时&#…

EtherCAT IGH别名(Alias)

EtherCAT 中的 Alias 是一个 16 位的数值&#xff0c;用于在拓扑结构中唯一标识从站&#xff08;除 Position 外的辅助定位方式&#xff09;IGH查看别名 “0:0”, 第一个0是别名(alias)&#xff0c;后面是位置(position) sudo ethercat slave -p 0 0 0:0 PREOP SV660_1Axi…