🚀 YOLO交通標志識別實戰(五):OBB旋轉框檢測配置與訓練全流程(基于 DOTA8 數據集)
在專欄前面四篇里,我們完成了:
? Kaggle交通標志數據集下載并重組標準YOLO格式
? 訓練/驗證集拆分腳本
? 大圖裁剪成小圖的增強預處理
? LabelImg手工標注教程
本篇是系列的第五篇,我們來進入高級檢測任務:
? OBB(Oriented Bounding Box)旋轉框檢測。
這里我們會用到的數據配置就是:
dota8.yaml
? 本篇重點:
? 什么是OBB旋轉框檢測
? 數據格式和dota8.yaml配置
? YOLOv8 OBB模型的選擇
? 訓練命令(含Python和命令行)
? 推理與可視化結果
📌 1?? 什么是OBB(Oriented Bounding Box)
普通YOLO檢測框是水平矩形:
[x_center, y_center, width, height]
而**OBB(旋轉框)**擴展為:
[x_center, y_center, width, height, angle]
角度通常是弧度制(-π ~ +π)。
? 適用場景:
- 斜拍的交通標志
- 無人機遙感建筑物檢測
- 工業零件方向檢測
? 2?? YOLOv8對OBB任務的支持
Ultralytics YOLOv8 在 >=8.1 版本開始官方支持 OBB 任務。
其內置支持任務類型包括:
detect / segment / classify / obb
? 只需要在數據配置里寫明:
task: obb
即可自動切換到旋轉框檢測頭。
? 3?? 數據標簽格式(YOLO OBB)
OBB 標簽文件和普通YOLO不同,每一行是:
<class_id> <x_center> <y_center> <width> <height> <angle>
? 所有坐標都歸一化到0~1
? 角度是弧度
例如:
0 0.5123 0.4785 0.2645 0.3821 0.7854
表示:
- 類別ID:0
- 中心點: (0.5123, 0.4785)
- 寬高: (0.2645, 0.3821)
- 角度: 0.7854 弧度(≈45°)
? 4?? dota8.yaml 配置示例
這里,我們就用自己的配置文件名:dota8.yaml。
下面是一個標準格式示例:
path: ./traffic
train: images/train
val: images/valnc: 4
names: [prohibitory, danger, mandatory, other]task: obb
? 重點是最后一行:
task: obb
這告訴 YOLOv8 這是「旋轉框任務」。
? 5?? 選擇OBB專用模型
Ultralytics 提供了官方設計的 OBB 模型YAML和預訓練權重,比如:
? 結構文件(可定制):
- yolov8n-obb.yaml
- yolov8s-obb.yaml
- yolov8m-obb.yaml
? 預訓練權重(推薦起步):
- yolov8n-obb.pt
- yolov8s-obb.pt
- …
? 這些模型文件專門支持旋轉框檢測頭。
? 6?? Python訓練全流程(示例)
這里是你的真實代碼版本,直接可以復用:
from ultralytics import YOLO# 方法1:從頭構建
model = YOLO("yolov8n-obb.yaml")# 方法2:加載官方預訓練權重(推薦)
model = YOLO("yolov8n-obb.pt")# 方法3:自定義結構 + 加載預訓練權重(遷移學習)
model = YOLO("yolov8n-obb.yaml").load("yolov8n.pt")# 開始訓練
results = model.train(data="dota8.yaml", # 這里就是真實用的epochs=100,imgsz=640,batch=16,device=0
)
? 7?? 命令行訓練示例
如果你喜歡命令行,也可以這樣:
yolo detect train data=dota8.yaml model=yolov8n-obb.pt imgsz=640 epochs=100
? YOLOv8會自動檢測到:
task: obb
并啟用旋轉框檢測頭。
? 8?? 訓練結果文件結構
運行完成后,會在:
runs/obb/train/
里生成:
weights/best.ptlast.pt
results.png
confusion_matrix.png
P-R曲線、mAP曲線
? 9?? 推理與可視化預測
訓練好后,就可以加載模型來做推理:
Python接口
from ultralytics import YOLOmodel = YOLO("runs/obb/train/weights/best.pt")
results = model.predict(source="images/test",imgsz=640,conf=0.25,save=True
)
預測結果會自動保存在:
runs/obb/predict/
里。
命令行接口
yolo detect predict model=runs/obb/train/weights/best.pt source=images/test imgsz=640
結果會在輸出圖片上繪制帶角度的旋轉框。
? 10?? 進階技巧
? 預訓練權重遷移學習
官方的:
yolov8n-obb.pt
是在大型數據集上訓練好的,可以加載后再繼續在你的數據(dota8.yaml)上finetune。
? 參數可調節
- imgsz
- batch
- optimizer
- lr0, lrf
- warmup_epochs
? 多卡訓練
yolo detect train data=dota8.yaml model=yolov8n-obb.pt device=0,1,2,3
?? 總結
本篇是專欄的第五篇,我們學習了:
? 什么是OBB旋轉框檢測
? YOLOv8對OBB任務的原生支持
? 你的真實項目配置文件:dota8.yaml
? 標簽格式和類別管理
? Python與命令行的訓練與推理
? 遷移學習與進階參數
🔜 下一篇預告
? 第六篇:YOLOv8 關鍵點檢測