Python | OpenCV YOLOv8 模型訓練
📚 前言
在上一篇 YOLOv8 預標籤(Pre-Label) 中,我們用預訓練模型自動產生標籤草稿,再透過 LabelImg 人工修正,完成了標記工作。
這一篇進入最核心的環節:YOLOv8 模型訓練。
YOLOv8 的訓練指令非常簡潔,但背後有許多重要參數影響訓練效果。
這一篇將完整說明每個關鍵參數的意義,以及內建的增強與防過擬合機制。
🔎 本篇起點確認
在開始訓練之前,請確認前幾篇的工作都已完成,你手上應該有以下結構:
1 | project/ |
其中 dataset/ 的切分是由 YOLOv8 資料集準備 篇的 split_dataset.py 完成的,data.yaml 也是在該篇建立、放在專案根目錄。
若尚未完成上述步驟,建議先補齊再繼續。
💻 基本訓練指令
指令列方式
1 | yolo detect train \ |
Python API 方式
1 | # train.py |

圖:使用 Python API 呼叫 model.train() 啟動 YOLOv8 訓練,指定資料集、訓練輪數與裝置
訓練完成後,結果會自動儲存在 runs/detect/my_model/ 目錄下。
關於 train.cache 與 val.cache
第一次訓練時,YOLOv8 會掃描所有圖片與標籤、驗證格式並建立索引,結果存成快取檔:
1 | dataset/labels/train.cache |
下次訓練直接讀快取,跳過重新掃描,啟動速度會快很多。
⚠️ 若修改了標籤或新增、刪除圖片,舊快取不會自動更新,需手動刪除後重新訓練才會重建。建議將這兩個檔案加進
.gitignore,不需要 commit。
🧠 重要訓練參數說明
| 參數 | 預設值 | 說明 |
|---|---|---|
model |
— | 起點模型,yolov8n.pt 為預訓練,yolov8n.yaml 為從頭訓練 |
data |
— | data.yaml 路徑 |
epochs |
100 | 訓練總輪數 |
imgsz |
640 | 輸入圖片尺寸,越大越準確但越慢 |
batch |
16 | 每次訓練的圖片數量,依 GPU 記憶體調整 |
device |
— | 0/0,1/cpu,不設定則自動偵測 |
patience |
50 | Early Stopping:連續 N 個 epoch 無改善則停止 |
lr0 |
0.01 | 初始學習率 |
lrf |
0.01 | 最終學習率比例(lr0 × lrf) |
weight_decay |
0.0005 | L2 正規化係數,防止過擬合 |
dropout |
0.0 | Dropout 比率(僅分類頭,0 為停用) |
workers |
8 | 資料載入的執行緒數,Windows 建議設 0 |
save_period |
-1 | 每 N 個 epoch 儲存一次,-1 為停用 |
resume |
False | 從上次中斷的 checkpoint 繼續訓練 |
val |
True | 每個 epoch 後執行驗證 |
plots |
True | 自動產生訓練曲線圖表 |
模型選擇建議
YOLOv8 有三種起點,初次使用選第一種即可:
① 從預訓練權重微調(一般情況,推薦)
載入 Ultralytics 在 COCO 資料集上訓練好的權重,再用自己的資料繼續訓練。模型已具備基本的影像辨識能力,收斂快、所需資料量少,是最常見的做法。
1 | # demo_pretrained.py |
② 從頭訓練(特殊情況)
只載入網路架構定義,權重全部隨機初始化,需要大量資料(通常數千張以上)才能訓練出好的模型。若你的類別與 COCO 差異極大(例如醫療影像、衛星圖)才考慮。
1 | # demo_from_scratch.py |
③ 繼續訓練中斷的 checkpoint
訓練途中若因斷電、關機等原因中斷,可從上次儲存的 last.pt 繼續,不需要從頭跑。詳細用法見本篇 中斷後繼續訓練 章節。
1 | # demo_resume.py |
💻 GPU 加速設定
1 | # setup_gpu.py |

圖:自動偵測 GPU 數量,依情況選擇多張 GPU、單張 GPU 或 CPU 進行訓練
GPU 記憶體不足(OOM)
訓練啟動後若出現類似以下錯誤,表示 GPU 記憶體不夠:
1 | RuntimeError: CUDA out of memory. |
調整方向是縮小 batch 或 imgsz,二選一或同時調整,直到不再 OOM:
1 | # fix_oom.py |
💻 內建資料增強設定
YOLOv8 在訓練時內建了豐富的資料增強,預設已自動啟用,不需要額外撰寫增強程式碼。
一般情況下預設值已夠用,不需要動。但以下幾種情況可能需要調整:
- 資料集很小(< 100 張):可以加強增強強度,讓模型看到更多變化,減少過擬合
- 物件方向固定(如俯視圖):可以關閉
fliplr、flipud,避免產生現實中不存在的翻轉角度 - 室內固定光源場景:
hsv_s、hsv_v可以調低,不需要大幅模擬色彩變化 - 訓練結果不穩定或 mAP 很低:可以嘗試關閉
mosaic=0.0,有時過強的增強反而干擾學習
可透過參數調整增強強度:
1 | # augmentation_params.py |

圖:設定 YOLOv8 內建資料增強參數,調整幾何變換、色彩抖動及 Mosaic 拼接的增強強度
💡 Mosaic 增強是 YOLO 的招牌技術,將 4 張圖片拼接在一起,讓模型學習更多背景多樣性,對偵測小物件特別有效。
💻 防止過擬合設定
1 | # anti_overfit_params.py |

圖:設定 patience、weight_decay 與 dropout 等參數,啟用 Early Stopping 與 L2 正規化防止過擬合
如何判斷是否過擬合、怎麼讀懂這些指標,將在下一篇 YOLOv8 訓練結果分析 中完整說明。
💻 中斷後繼續訓練
YOLOv8 每個 epoch 都會儲存 last.pt,可隨時從中斷點繼續:
1 | # resume_training.py |
💻 完整訓練範例
1 | # train_full.py |

圖:完整的 YOLOv8s 訓練範例,整合增強、Early Stopping、定期儲存等設定並輸出最佳模型路徑
⚠️ 注意事項
- CPU 訓練速度非常慢:無 GPU 環境下,100 epochs 可能需要數小時甚至更長。第一次執行建議先將
epochs設為 3~5,確認資料集路徑、格式、流程都正確後,再調回正式輪數。若需要完整訓練,強烈建議使用有 CUDA 的環境或 Google Colab(免費 GPU)。 - Windows 上
workers需設為 0:設成其他數值可能造成 DataLoader 死鎖,訓練無法啟動。 patience不要設太小:YOLOv8 訓練初期的 mAP 可能波動較大,patience=10可能會太早停止。建議至少設 20~30。batch=-1自動計算:可設定batch=-1讓 YOLOv8 根據 GPU 記憶體自動計算最大 batch size,但不夠穩定,建議手動設定。- 訓練過程中不要刪除
runs/目錄:中斷恢復需要依賴其中的last.pt與args.yaml。
🎯 結語
YOLOv8 的訓練流程非常完整,內建了增強、Early Stopping、自動儲存等功能,讓訓練過程更穩定。
下一步是 YOLOv8 訓練結果分析,學習如何解讀訓練輸出的各種圖表與指標,判斷模型是否訓練良好。
📖 如在學習過程中遇到疑問,或是想了解更多相關主題,建議回顧一下 Python | OpenCV 系列導讀,掌握完整的章節目錄,方便快速找到你需要的內容。
註:以上參考了
Ultralytics YOLOv8 官方文件 — Train
Ultralytics YOLOv8 官方文件 — Configuration
Ultralytics YOLOv8 官方文件 — Augmentation
