【跟我學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
英文地址,請注明出處:http://en.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…