一、前置條件與環境準備
在開始訓練前,確保已完成以下準備《目標檢測之YOLOV11自定義數據預處理——從原始標注到YOLO-OBB格式轉換與驗證》:
數據目錄結構:
yolov11/
├── datasets/
│ └── shrimp/
│ ├── images/
│ │ ├── train/ # 訓練集圖片
│ │ └── val/ # 驗證集圖片
│ └── labels/
│ ├── train/ # 訓練集YOLO-OBB標注(.txt)
│ └── val/ # 驗證集YOLO-OBB標注(.txt)
├── shrimp_obb.yaml # 訓練配置文件
└── runs/ # 訓練結果保存目錄└── obb/ # OBB任務結果
二、訓練配置文件shrimp_obb.yaml
設置
配置文件定義了數據集路徑、類別數等關鍵信息,shrimp_obb.yaml
應包含以下內容:
# 數據集基礎信息(根據實際路徑調整)
train: /datasets/shrimp/images/train # 訓練集圖片目錄(需提前劃分訓練集)
val: /datasets/shrimp/images/val # 驗證集圖片目錄(你代碼中的val路徑)# 標簽路徑(YOLO自動匹配:與圖片目錄同級的labels目錄,如images/train → labels/train)
# 轉換后標簽路徑labels/val(與val圖片目錄同級)# 類別信息(你提到只有1個類別)
nc: 1 # 類別數量(必須與轉換后的class_index=0一致)
names: ["shrimp"] # 類別名稱(與實際標注的類別一致)# 可選:測試集路徑(若有)
#test: /datasets/shrimp/images/test# 以下為可選超參數(可在訓練命令中覆蓋,非必須寫在yaml里)
# 超參數參考:https://docs.ultralytics.com/yolov5/training
# hsv_h: 0.015 # 色調增強系數
# hsv_s: 0.7 # 飽和度增強系數
# hsv_v: 0.4 # 明度增強系數
# flipud: 0.5 # 上下翻轉概率(OBB任務慎用,可能改變旋轉方向)
三、訓練命令與參數詳解
1. 基礎訓練命令
使用YOLOv11-OBB模型(如yolo11n-obb.pt
)啟動訓練,命令示例:
yolo obb train \data=shrimp_obb.yaml \model=yolo11n-obb.pt \epochs=300 \imgsz=640 \device=0,1 \batch=128 \project=runs/obb/train \name=shrimp_exp \plots=True \verbose=True
2. 關鍵參數解釋
參數名 | 作用 | 示例值/說明 |
---|---|---|
data | 指定訓練配置文件(定義數據集路徑、類別等) | shrimp_obb.yaml |
model | 預訓練模型路徑(OBB專用模型) | yolo11n-obb.pt (輕量級) |
epochs | 訓練輪次(根據數據量調整,日志顯示300輪收斂) | 300 |
imgsz | 輸入圖片尺寸(與數據集中圖片分辨率匹配,日志為640) | 640 |
device | 訓練設備(多GPU加速) | 0,1 (使用2張顯卡) |
batch | 每批次圖片數(根據GPU顯存調整,日志為128) | 128 |
project | 訓練結果保存根目錄(歷史結果在runs/obb/train ) | runs/obb/train |
name | 當前實驗名稱(避免覆蓋歷史結果) | shrimp_exp (自定義) |
plots | 啟用訓練過程可視化(生成損失曲線、混淆矩陣等) | True (默認啟用) |
verbose | 終端輸出詳細日志(顯示每批次損失、學習率等) | True (調試時推薦) |
3. 結果曲線
四、訓練過程監控
1. 實時日志查看
訓練過程中,終端會輸出每輪(Epoch)的損失值(box_loss
、cls_loss
、dfl_loss
)和驗證指標(mAP50
、mAP50-95
),如日志所示:
2. TensorBoard可視化
訓練完成后,日志文件(events.out.tfevents.*
)保存在runs/obb/train/shrimp_exp
目錄。通過以下命令啟動TensorBoard查看損失曲線和mAP趨勢:
tensorboard --logdir runs/obb/train/shrimp_exp
瀏覽器訪問http://localhost:6006
即可查看。
五、模型驗證(Val)
訓練完成后,使用驗證集評估最佳模型(best.pt
)的泛化能力,命令如下:
yolo obb val \model=runs/obb/train/shrimp_exp/weights/best.pt \data=shrimp_obb.yaml \imgsz=640 \batch=128
輸出指標與訓練日志中的mAP50
、mAP50-95
一致(日志顯示mAP50-95=0.937
)。
六、模型預測(Inference)
使用訓練好的best.pt
對新圖片/視頻進行預測,命令示例(隱藏類別名和置信度):
yolo obb predict \model=runs/obb/train/shrimp_exp/weights/best.pt \source=xxx.jpg \imgsz=640 \show_labels=False \show_conf=False \project=runs/obb/predict \name=shrimp_pred
關鍵預測參數
參數名 | 作用 | 示例值/說明 |
---|---|---|
source | 預測源(圖片/視頻路徑或攝像頭ID) | 圖片:/path/to/image.jpg |
show_labels | 是否顯示類別名稱(需求是隱藏) | False |
show_conf | 是否顯示置信度分數(需求是隱藏) | False |
project /name | 預測結果保存目錄(歷史結果在runs/obb/predict ) | runs/obb/predict/shrimp_pred |
部分預測結果
七、常見問題與解決方案
問題現象 | 可能原因 | 解決方法 |
---|---|---|
訓練報錯label not found | 標簽文件與圖片文件名不匹配(如圖片是.png ,標簽是.txt 但前綴不一致) | 確保images/train/xxx.jpg 對應labels/train/xxx.txt (同名不同后綴) |
mAP 遠低于預期 | 數據增強參數不當(如rotate 過大導致標注方向混亂) | 調整shrimp_obb.yaml 中的rotate 值(如從0.5降至0.3) |
預測框偏移原圖目標 | 數據轉換時坐標歸一化錯誤(如圖片尺寸讀取失敗) | 檢查convert_to_yolo_obb.py 中img.shape 是否正確獲取寬高(shape[1] 是寬) |
八、總結
難以想象,一句像樣的代碼都沒怎么寫,就能完成了一個yolov11的訓練和驗證。
通過本文的步驟,已完成從數據格式轉換→訓練配置→模型訓練→驗證→預測的全流程。訓練得到的best.pt
可直接用于實際場景(如蝦類檢測),后續可通過調整超參數(如學習率、數據增強)進一步優化模型性能。
不過對比之前用yolov5-obb和現在的yolov11-obb,現在的結果比之前的好很多,無論是訓練過程還是結果都有提升。