專案

一般

配置概況

動作

Feature #190

進行中
SC SC

實作 YOLOv11 訓練腳本並完成兩次訓練迭代

Feature #190: 實作 YOLOv11 訓練腳本並完成兩次訓練迭代

是由 Sashiba Chou1 天 前加入. 於 1 天 前更新.

狀態:
New
優先權:
Normal
被分派者:
開始日期:
2026-04-02
完成日期:
2026-04-02 (逾期 1 天)
完成比例:

100%

預估工時:
1:00 小時

概述

開發 train.py 訓練腳本,支援命令列參數設定(epochs, batch, device, name)。

第一次 Baseline 訓練(預設參數)取得 mAP50=0.445;分析問題後進行第二次優化訓練(freeze=10, lr0=0.001, mixup=0.3, copy_paste=0.3, degrees=15.0),mAP50 提升至 0.786(+76.6%),Recall 從 0.240 提升至 0.619(+157.9%)。保存兩次訓練的模型權重與完整結果。

SC 是由 Sashiba Chou1 天 前更新 動作 #1

h2. 背景

本專案使用 YOLOv11 Nano( @yolo11n.pt@ ,約 2.6M 參數)作為基礎模型,在僅有 33
張喉鏡影像的極小資料集上,透過遷移學習進行微調。由於資料量極少,訓練策略的設計是決定模型效能的關鍵因素。

h2. 實作內容

h3. 1. 訓練腳本 train.py

  • 支援命令列參數: @--model@ , @--epochs@ , @--imgsz@ , @--batch@ , @--device@ , @--name@
  • 內建小資料集優化參數(凍結 Backbone、低學習率、多種資料增強)
  • 訓練結束後自動執行驗證並輸出 mAP50 / mAP50-95
  • 自動儲存訓練過程的曲線圖、混淆矩陣、PR 曲線等視覺化圖表

h3. 2. 第一次訓練(Baseline)— runs/detect/vocal_cord/

使用 YOLO 預設超參數建立基線,觀察模型在此資料集上的學習行為:

  • 參數:epochs=100, batch=16, patience=20, lr0=0.01, 不凍結 Backbone, 無額外增強
  • 模型在第 38 epoch 被早停終止
  • 結果:mAP50=0.445, Precision=0.700, Recall=0.240
  • 發現問題:
    ** Recall 僅 0.240(漏掉 76% 的目標)
    ** Epoch 20→30 Recall 從 0.794 驟降至 0.264,訓練嚴重震盪
    ** 學習率 0.01 過高,預訓練特徵被破壞
    ** 26 張訓練圖缺乏增強,過擬合嚴重

h3. 3. 問題診斷與優化策略

|. 診斷問題 |. 優化策略 |_. 具體調整 |
| 預訓練特徵被全層更新覆寫 | 凍結 Backbone | freeze: 無 → 10 |
| 學習率過高導致訓練震盪 | 降低學習率 | lr0: 0.01 → 0.001(降低 10 倍) |
| 資料太少導致過擬合 | 大幅強化資料增強 | mixup=0.3, copy_paste=0.3, degrees=15.0, flipud=0.2 |
| 收斂時間不足 | 延長訓練與早停容忍 | epochs: 100→300, patience: 20→50 |
| 梯度更新過於粗糙 | 減小 batch size | batch: 16→8(每 epoch 從 2 步增為 ~4 步) |

h3. 4. 第二次訓練(優化版)— runs/detect/vocal_cord_v2/

套用全部優化策略後重新訓練:

  • 參數:epochs=300, batch=8, patience=50, lr0=0.001, freeze=10, augment=true, mosaic=1.0, mixup=0.3, copy_paste=0.3, degrees=15.0, scale=0.5,
    fliplr=0.5, flipud=0.2
  • 模型在第 195 epoch 被早停終止,最佳表現出現在第 147 epoch
  • 學習曲線四個階段:
    ** Epoch 1-25:初始學習,mAP50 從 0.01 升至 0.30(凍結 Backbone,慢但穩定)
    ** Epoch 25-75:快速提升,mAP50 從 0.30 升至 0.58
    ** Epoch 75-147:穩定優化,mAP50 從 0.58 緩慢爬升至 0.786(最佳)
    ** Epoch 147-195:過擬合跡象,指標開始下降,觸發早停
  • 最終結果:mAP50=0.786, mAP50-95=0.423, Precision=0.900, Recall=0.619

h3. 5. 兩次訓練成果對比

|. 指標 |. Baseline |. 優化版 |. 提升 |
| mAP50 | 0.445 | 0.786 | +76.6% |
| mAP50-95 | 0.239 | 0.423 | +77.0% |
| Precision | 0.700 | 0.900 | +28.6% |
| Recall | 0.240 | 0.619 | +157.9% |
| 訓練時間 | ~497 秒 | ~2,376 秒 | — |

h3. 6. 輸出成品

  • @runs/detect/vocal_cord/weights/best.pt@ :Baseline 最佳模型
  • @runs/detect/vocal_cord_v2/weights/best.pt@ :優化版最佳模型(5.3MB,正式模型)
  • 每次訓練包含完整視覺化:results.png, confusion_matrix.png, BoxPR_curve.png, BoxF1_curve.png, val_batch0_pred.jpg 等
動作

匯出至 PDF Atom