Python | OpenCV YOLOv8 模型訓練
📑 目錄
📚 前言
在上一篇 YOLOv8 預標籤(Pre-Label) 中,我們用預訓練模型自動產生標籤草稿,再透過 LabelImg 人工修正,完成了標記工作。
這一篇進入最核心的環節:YOLOv8 模型訓練。
YOLOv8 的訓練指令非常簡潔,但背後有許多重要參數影響訓練效果。
這一篇說明每個關鍵參數的意義,以及 GPU 加速與中斷恢復的設定方式。
🔎 開始訓練前的確認
在開始訓練之前,請確認前幾篇的工作都已完成,你手上應該有以下結構:
1 | project/ |
💻 基本訓練指令
🔹 指令列方式
1 | yolo detect train \ |
🔹 Python API 方式
1 | # train.py |
1 | D:\PythonWorkspace\yolov8-tutorial\.venv\Scripts\python.exe D:\PythonWorkspace\yolov8-tutorial\train.py |
💡 訓練完成後,結果會自動儲存在
runs/detect/my_model/目錄下。
圖:YOLOv8 訓練 Log 重點解析 ─ 環境資訊、模型規格、訓練參數與過程總覽
圖:YOLOv8 train.cache 與 val.cache 說明 ─ 加速訓練與注意事項
🧠 重要訓練參數說明
圖:YOLOv8 train 完整參數表 ─ 16 個常用參數與預設值說明
💡 模型選擇建議
圖:YOLOv8 三種起點模型選擇 ─ 從預訓練權重微調、從頭訓練到繼續中斷的 checkpoint
① 從預訓練權重微調(一般情況,推薦)
載入 Ultralytics 在 COCO 資料集上訓練好的權重,再用自己的資料繼續訓練。模型已具備基本的影像辨識能力,收斂快、所需資料量少,是最常見的做法。
1 | # demo_pretrained.py |
② 從頭訓練(特殊情況)
只載入網路架構定義,權重全部隨機初始化,需要大量資料(通常數千張以上)才能訓練出好的模型。若你的類別與 COCO 差異極大(例如醫療影像、衛星圖)才考慮。
1 | # demo_from_scratch.py |
③ 繼續訓練中斷的 checkpoint
訓練途中若因斷電、關機等原因中斷,可從上次儲存的 last.pt 繼續,不需要從頭跑。詳細用法見本篇 [中斷後繼續訓練] 章節。
1 | # demo_resume.py |
💻 多張 GPU 訓練
device 參數的常用值:0(第一張 GPU)、"0,1"(雙 GPU)、"cpu"(強制使用 CPU)。
有多張 GPU 時,可用以下方式自動偵測並全部啟用:
1 | # setup_gpu.py |
⛃ GPU 記憶體不足(OOM)
圖:GPU 記憶體使用原理 ─ batch 和 imgsz 是最吃記憶體的兩個參數
訓練時 GPU 需要把圖片、模型權重、梯度全部同時放進記憶體計算。batch(每次丟幾張圖)和 imgsz(每張圖的解析度)是最吃記憶體的兩個設定:
batch=16表示每次同時處理 16 張圖,16 張的資料都要同時放進 GPUimgsz=640表示每張圖縮放到 640×640,解析度越高,每張圖佔的記憶體越大
兩個值相乘就是每次計算的「記憶體負擔」。以 8GB 顯卡為例:
batch=16, imgsz=640→ 可能剛好 OOMbatch=8, imgsz=640→ 記憶體砍半,通常能跑batch=8, imgsz=416→ 更小,適合記憶體非常有限的環境
訓練啟動後若出現以下錯誤,就是記憶體不夠:
1 | RuntimeError: CUDA out of memory. |
依序嘗試以下調整,直到不再 OOM:
1 | # fix_oom.py |
💻 中斷後繼續訓練
YOLOv8 每個 epoch 都會儲存 last.pt,可隨時從中斷點繼續:
1 | # resume_training.py |
⚠️ 注意事項
- CPU 訓練速度非常慢:無 GPU 環境下,100 epochs 可能需要數小時甚至更長。第一次執行建議先將
epochs設為 3~5,確認資料集路徑、格式、流程都正確後,再調回正式輪數。若需要完整訓練,強烈建議使用有 CUDA 的環境或 Google Colab(免費 GPU)。 - Windows 上
workers需設為 0:設成其他數值可能造成 DataLoader 死鎖,訓練無法啟動。 batch=-1自動計算:可設定batch=-1讓 YOLOv8 根據 GPU 記憶體自動計算最大 batch size,但不夠穩定,建議手動設定。- 訓練過程中不要刪除
runs/目錄:中斷恢復需要依賴其中的last.pt與args.yaml。
🎯 結語
YOLOv8 的基本訓練流程相當精簡,幾行程式碼就能啟動,並內建快取、自動儲存與斷點恢復等機制。
下一步是 YOLOv8 訓練進階設定,介紹資料增強與防止過擬合的進階參數調整。
📖 如在學習過程中遇到疑問,或是想了解更多相關主題,建議回顧一下 Python | OpenCV 系列導讀,掌握完整的章節目錄,方便快速找到你需要的內容。
註:以上參考了
Ultralytics YOLOv8 官方文件 — Train
Ultralytics YOLOv8 官方文件 — Configuration