Posted on

Yolov8 – 物件偵測模型

模型介紹

GitHub位置: https://github.com/ultralytics/ultralytics

官方網站: https://ultralytics.com/

YOLOv8 最初由 Ultralytics 公司的開發人員開發和發布,旨在在目標檢測任務中提供高性能和高效率的解決方案。 基於深度學習和計算機視覺領域的前沿進步而構建,在速度和準確性方面提供無與倫比的性能。其流線型設計使其適用於各種應用程序,並可輕鬆適應從邊緣設備到雲 API 的不同硬件平台。

與之前的 YOLO 版本相比,YOLOv8 引入了一些新的設計思想和技術,以提高模型的精度和速度。它在模型結構、數據增強、網絡設計等方面進行了優化,使得在目標檢測任務中取得了出色的結果。 YOLOv8 不僅可以在通用的目標檢測任務中表現良好,還可以應用於各種應用領域,如自動駕駛、工業檢測、物體識別等。

模型安裝

官方的教學提供了非常明確的指導: https://docs.ultralytics.com/quickstart/

在這邊我選擇了使用pip安裝,只需要打下這一行就可以了

pip install ultralytics

用command line執行的方式如下

yolo predict model=yolov8n.pt source='https://ultralytics.com/images/bus.jpg'

用python執行偵測的方式

from ultralytics import YOLO

# Load a model
model = YOLO("yolov8n.yaml")  # build a new model from scratch
model = YOLO("yolov8n.pt")  # load a pretrained model (recommended for training)

# Use the model
model.train(data="coco128.yaml", epochs=3)  # train the model
metrics = model.val()  # evaluate model performance on the validation set
results = model("https://ultralytics.com/images/bus.jpg")  # predict on an image
path = model.export(format="onnx")  # export the model to ONNX format

官方建議使用的相關工具

建立一個物件偵測模型,需要做標註、影像增強、修改、訓練、佈署,以及將模型整合至使用端的程式。對於這些流程,Yolo提供了很完整的生態鏈去實現這些步驟

支持的任務

自己建立模型

下面是官方網站內一個包含建模、預測、輸出模型的程式碼範例

from ultralytics import YOLO

# Create a new YOLO model from scratch
model = YOLO('yolov8n.yaml')

# Load a pretrained YOLO model (recommended for training)
model = YOLO('yolov8n.pt')

# Train the model using the 'coco128.yaml' dataset for 3 epochs
results = model.train(data='coco128.yaml', epochs=3)

# Evaluate the model's performance on the validation set
results = model.val()

# Perform object detection on an image using the model
results = model('https://ultralytics.com/images/bus.jpg')

# Export the model to ONNX format
success = model.export(format='onnx')

我自己嘗試使用原有的模型訓練新的資料,在訓練過程中,會出現下面這樣的模型訊息

上面那些數值的解釋如下

  • Epoch (迭代輪數): 這是訓練過程中的迭代次數,每次迭代會處理數據集中的一批樣本。
  • GPU_mem (顯存佔用): 顯存是指圖形處理單元(GPU)上的內存,該數字顯示在當前迭代中 GPU 使用了多少顯存。
  • box_loss (框回歸損失): 這是目標檢測模型訓練中的一個損失項,用於優化檢測框的位置。
  • cls_loss (分類損失): 也是目標檢測模型訓練中的損失項之一,用於優化目標的分類預測。
  • dfl_loss (變換損失): 這可能是一種針對目標檢測中檢測框位置變換的損失。
  • Instances (實例數): 在每次迭代中,訓練過程處理的目標實例數量。
  • Size (尺寸): 可能是指輸入圖像的尺寸。
  • Class (類別): 指的是不同的目標類別。
  • Images (圖像數): 在評估模型性能時,所用圖像的數量。
  • Box (框)、P (精確率)、R (召回率): 這些是用於評估目標檢測模型性能的指標。精確率衡量模型在預測為正類的情況下有多少是正確的,召回率衡量模型在所有正類樣本中有多少被正確檢測出來。
  • mAP50、mAP50-95 (平均精確率): 這是在不同閾值下計算的平均精確率。 mAP50 表示在 50% 的 IoU 閾值下的平均精確率,而 mAP50-95 表示在 50% 到 95% 的 IoU 閾值範圍內的平均精確率。

以上圖而言,在第23輪的訓練其精度為48.4%,F1召回率為59%

處理圖片大小的不一致

YOLO原本建模時所使用的是COCO的資料集,在這個資料集裡面,圖片的長、寬皆為640px,但是實際上我們應用上所使用的圖片很可能並不是640×640的尺寸,這時候就要先對圖片做處理。

如果只是要做預測,可以直接使用resize_with_pad來對圖片做縮放,這個函數可以保持長寬比相同且不失真,將圖像大小調整為目標寬度和高度。如果目標尺寸與圖像尺寸不匹配,則會調整圖像大小,然後用零填充以匹配請求的尺寸。

但對於訓練,您還需要相應地調整邊界框的大小和填充邊界框,這並非易事。
這是如何完成此操作的示例https://nbviewer.jupyter.org/github/aleju/imgaug-doc/blob/master/notebooks/B02%20-%20Augment%20Bounding%20Boxes.ipynb

以下為幾個主要手法:

  • 調整輸入尺寸:你可以將攝像機圖像調整為與 YOLO 模型訓練時使用的正方形尺寸相匹配。這可能會導致圖像在寬度或高度上出現一些留白,但能夠與模型兼容。
  • 圖像裁剪:將攝像機圖像進行裁剪,以適應 YOLO 模型所需的正方形尺寸。你可以從圖像的中心或其他感興趣的區域進行裁剪,以確保包含重要的目標信息。
  • 填充:如果圖像的長寬比與模型所需的正方形尺寸不匹配,你可以在圖像的較短邊或較長邊添加填充,使其達到正方形尺寸。填充可以使用一些背景顏色或內容進行填充,以保持圖像比例。
  • 訓練新模型:如果你的攝像機圖像尺寸與標準的 YOLO 輸入尺寸差異較大,並且以上方法不適用,你可能需要考慮訓練一個新的 YOLO 模型,以適應你的攝像機圖像尺寸。這樣可以確保模型在不同尺寸的圖像上都有良好的性能。

無論你選擇哪種方法,都需要注意到調整輸入尺寸可能會對模型性能產生影響,特別是在目標檢測任務中。你可能需要在實際場景中進行測試和調整,以找到最適合你應用的方法。