Posted on

YOLOv8模型訓練及其指標意義

訓練自定義的YOLOv8模型

以下為官網的一個範例程式

from ultralytics import YOLO

# Load a model
model = YOLO('yolov8n.yaml')  # build a new model from YAML
model = YOLO('yolov8n.pt')  # load a pretrained model (recommended for training)
model = YOLO('yolov8n.yaml').load('yolov8n.pt')  # build from YAML and transfer weights

# Train the model
results = model.train(data='coco128.yaml', epochs=100, imgsz=640)

範例中三種載入方式的比較

  • model = YOLO(‘yolov8n.yaml’):
    這段代碼使用給定的 YAML 配置文件構建一個新的 YOLO 模型。 YAML 配置文件包含了有關模型架構、層設置、超參數等的信息。通過提供 YAML 文件的路徑,可以創建一個全新的 YOLO 模型。(yaml檔案位於: ultralytics\cfg\models\v8)
  • model = YOLO(‘yolov8n.pt’):
    這段代碼加載一個預訓練的 YOLO 模型,該模型以 PyTorch 的 .pt 文件格式保存。預訓練模型已經在某個數據集上進行了訓練,並且包含了在該數據集上學到的權重。這個過程稱為遷移學習,它可以加快在新數據集上訓練模型的收斂速度,同時保留之前任務的特徵提取能力。
  • model = YOLO(‘yolov8n.yaml’).load(‘yolov8n.pt’):
    這段代碼首先使用給定的 YAML 配置文件構建一個 YOLO 模型,然後從預訓練的 .pt 文件中加載權重,將權重遷移到新構建的模型中。這使您可以根據自己的需求創建模型結構,然後將預訓練模型的權重用於該結構。這種方法允許您根據不同的目標任務進行微調或擴展。

YOLOv8 模型的每個類別中有五個模型

YOLOv8nYOLOv8sYOLOv8mYOLOv8lYOLOv8x
YOLOv8 Nano是最快和最小的,而YOLOv8 Extra Large(YOLOv8x)是最準確但最慢的

YOLOv8 使用了以下預訓練模型:

  • 在 COCO 檢測數據集上訓練的對象檢測,圖像分辨率為 640。
  • 在 COCO 分割數據集上訓練的實例分割,圖像分辨率為 640。
  • 在 ImageNet 數據集上預訓練的圖像分類模型,圖像分辨率為 224。

訓練指標分析

Intersection over Union指標

IoU(Intersection over Union)是一個用於評估目標檢測和分割任務的常用指標。它主要用於衡量預測的目標與實際目標之間的重疊程度。在機器學習和計算機視覺領域中,IoU通常用於衡量模型的預測準確度,特別是在處理像目標檢測、物體定位和分割等任務時。

IoU的計算方式是將預測的目標區域(通常是矩形框或分割區域)與實際目標區域的交集面積除以它們的聯集面積。公式如下:

其中,交集是預測區域和實際區域的重疊部分,聯集是預測區域和實際區域的整體合併部分。

在目標檢測中,當模型預測的目標框與實際目標框之間的IoU值越高,表示模型的預測越準確。通常,當IoU超過一個預定的閾值(例如0.5或0.7)時,可以將該預測視為成功檢測。這種指標可以用於計算Precision-Recall曲線以及平均精度(Average Precision)等性能指標。

在分割任務中,IoU用於衡量模型預測的分割區域與實際分割區域之間的相似度。當分割區域的IoU越高,表示模型的分割結果越準確。

mAP50(B)

mAP50(B) 是指”Mean Average Precision at IoU 0.50 for Large Objects”,意思是在IoU(Intersection over Union,重疊度)為0.50 的情況下,針對較大目標計算的平均精度(AP)值的均值。 mAP 是模型在不同類別上的平均精度值,而 mAP50(B) 是針對較大目標計算的平均精度值。

mAP50-95(B)

mAP50-95(B) 是指 “Mean Average Precision across IoU 0.50 to 0.95 for Large Objects”,意思是在 IoU 從 0.50 到 0.95 範圍內,針對較大目標計算的平均精度值的均值。這個指標更全面地評估了模型在不同重疊度下的性能。

precision(B)

precision(B) 是針對較大目標計算的精確率,即模型在預測中有多少是正確的,相對於所有預測中的正確和錯誤。它是衡量模型預測的準確性的指標之一。

recall(B)

recall(B) 是針對較大目標計算的召回率,即模型正確預測的目標數與實際目標數之比。它表示模型能夠檢測到多少實際目標。召回率是衡量模型識別能力的指標之一。

dfl_loss(Detection Focal Loss)

dfl_loss 是一種在YOLO目標檢測中引入的特殊損失函數,它是基於焦點損失(Focal Loss)的改進。焦點損失的主要目標是應對樣本不平衡問題,即正負樣本比例嚴重失衡。在目標檢測中,負樣本(即不含目標的區域)遠遠多於正樣本(含有目標的區域)。 dfl_loss 試圖通過放大難以分類的正樣本的損失,來應對這種不平衡,從而使模型更關注難以識別的目標。

box_loss(Box Regression Loss)

這是用於衡量預測框位置的損失函數。在目標檢測中,模型不僅要預測目標的類別,還要預測框的位置,即邊界框的中心坐標、寬度和高度。 box_loss 的目標是使模型的位置預測更接近真實目標框的位置。這有助於確保檢測到的框與真實目標框的位置相匹配,從而提高目標定位的準確性。

cls_loss(Class Classification Loss)

cls_loss 用於分類目標的類別。在YOLO中,每個檢測框需要預測它所屬的目標類別。 cls_loss 的作用是確保模型的類別預測盡可能準確。這對於準確地將檢測框與正確的目標類別關聯非常重要,從而實現了目標分類的準確性。

我的tensorborad訓練狀況

這邊深藍色的是使用YOLOv8m.pt做預訓練模型、淺藍色的是使用YOLOv8n,深藍色的跑了2個多小時(100次),淺藍色的因為懶得跑完只做了60幾次。橘色的是別人訓練的歷程。

為什麼自己訓練的結果即使所有資料集都一樣卻有不同的狀況,需要進一步去了解。