OBB旋轉框檢測配置與訓練全流程(基于 DOTA8 數據集)

🚀 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 關鍵點檢測

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/90693.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/90693.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/90693.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

uniapp制作一個視頻播放頁面

1.產品展示2.頁面功能(1)點擊上方按鈕實現頁面跳轉&#xff1b;(2)點擊相關視頻實現視頻播放。3.uniapp代碼<template><view class"container"><!-- 頂部分類文字 --><view class"categories"><navigator class"category-…

8.卷積神經網絡基礎

8.1 卷積核計算 import torch from torch import nn import matplotlib.pyplot as plt def corr2d(X,k):#計算二維互相關運算h,wk.shape#卷積核的長和寬Ytorch.zeros((X.shape[0]-h1,X.shape[1]-w1))#創建(X-H1,X-W1)的全零矩陣for i in range(Y.shape[0]):for j in range(Y.s…

【每天一個知識點】子空間聚類(Subspace Clustering)

“子空間聚類&#xff08;Subspace Clustering&#xff09;”是一種面向高維數據分析的聚類方法&#xff0c;它通過在數據的低維子空間中尋找簇結構&#xff0c;解決傳統聚類在高維空間中“維度詛咒”帶來的問題。子空間聚類簡介在高維數據分析任務中&#xff0c;如基因表達、圖…

《匯編語言:基于X86處理器》第7章 整數運算(2)

本章將介紹匯編語言最大的優勢之一:基本的二進制移位和循環移位技術。實際上&#xff0c;位操作是計算機圖形學、數據加密和硬件控制的固有部分。實現位操作的指令是功能強大的工具&#xff0c;但是高級語言只能實現其中的一部分&#xff0c;并且由于高級語言要求與平臺無關&am…

JVM故障處理與類加載全解析

1、故障處理工具基礎故障處理工具jps&#xff1a;可以列出正在運行的虛擬機進程&#xff0c;并顯示虛擬機執行主類&#xff08;Main Class&#xff0c;main()函數所在的類&#xff09;名稱以及這些進程的本地虛擬機唯一ID&#xff08;LVMID&#xff0c;Local Virtual Machine I…

Python 第三方庫的安裝與卸載全指南

在 Python 開發中&#xff0c;第三方庫是提升效率的重要工具。無論是數據分析、Web 開發還是人工智能領域&#xff0c;都離不開豐富的第三方資源。本文將詳細介紹 Python 第三方庫的安裝與卸載方法&#xff0c;幫助開發者輕松管理依賴環境。 一、第三方庫安裝方法 1. pip 工具…

RabbitMQ 高級特性之消息分發

1. 為什么要消息分發當 broker 擁有多個消費者時&#xff0c;就會將消息分發給不同的消費者&#xff0c;消費者之間的消息不會重復&#xff0c;RabbitMQ 默認的消息分發機制是輪詢&#xff0c;但會無論消費者是否發送了 ack&#xff0c;broker 都會繼續發送消息至消費者&#x…

Linux操作系統從入門到實戰:怎么查看,刪除,更新本地的軟件鏡像源

Linux操作系統從入門到實戰&#xff1a;怎么查看&#xff0c;刪除&#xff0c;更新本地的軟件鏡像源前言一、 查看當前鏡像源二、刪除當前鏡像源三、更新鏡像源四、驗證前言 我的Linux版本是CentOS 9 stream本篇博客我們來講解怎么查看&#xff0c;刪除&#xff0c;更新國內本…

兩臺電腦通過網線直連形成局域網,共享一臺wifi網絡實現上網

文章目錄一、背景二、實現方式1、電腦A&#xff08;主&#xff09;2、電腦B3、防火墻4、驗證三、踩坑1、有時候B上不了網一、背景 兩臺windows電腦A和B&#xff0c;想通過**微軟無界鼠標&#xff08;Mouse without Borders&#xff09;**實現一套鍵盤鼠標控制兩臺電腦&#xf…

Java Reference類及其實現類深度解析:原理、源碼與性能優化實踐

1. 引言&#xff1a;Java引用機制的核心地位在JVM內存管理體系中&#xff0c;Java的四種引用類型&#xff08;強、軟、弱、虛&#xff09;構成了一個精巧的內存控制工具箱。它們不僅決定了對象的生命周期&#xff0c;還為緩存設計、資源釋放和內存泄漏排查提供了基礎設施支持。…

華為云對碳管理系統的全生命周期數據處理流程

碳管理系統的全生命周期數據處理流程包含完整的數據采集、處理、治理、分析和應用的流程架構,可以理解為是一個核心是圍繞數據的“采集-傳輸-處理-存儲-治理-分析-應用”鏈路展開。以下是對每個階段的解釋,以及它們與數據模型、算法等的關系: 1. 設備接入(IoTDA) 功能: …

大模型安全風險與防護產品綜述 —— 以 Otter LLM Guard 為例

大模型安全風險與防護產品綜述 —— 以 Otter LLM Guard 為例 一、背景與安全風險 近年來&#xff0c;隨著大規模預訓練語言模型&#xff08;LLM&#xff09;的廣泛應用&#xff0c;人工智能已成為推動文檔處理、代碼輔助、內容審核等多領域創新的重要技術。然而&#xff0c;…

1.2.2 計算機網絡分層結構(下)

繼續來看計算機網絡的分層結構&#xff0c;在之前的學習中&#xff0c;我們介紹了計算機網絡的分層結構&#xff0c;以及各層之間的關系。我們把工作在某一層的軟件和硬件模塊稱為這一層的實體&#xff0c;為了完成這一層的某些功能&#xff0c;同一層的實體和實體之間需要遵循…

實訓八——路由器與交換機與網線

補充——基本功能路由器&#xff1a;用于不同邏輯網段通信的交換機&#xff1a;用于相同邏輯網段通信的1.網段邏輯網段&#xff08;IP地址網段&#xff09;&#xff1a;IP地址的前三組數字代表不同的邏輯網段&#xff08;有限條件下&#xff09;&#xff1b;IP地址的后一組數字…

C++——構造函數的補充:初始化列表

C中&#xff0c;構造函數為成員變量賦值的方法有兩種&#xff1a;構造函數體賦值和初始化列表。構造函數體賦值是在構造函數里面為成員變量賦值&#xff0c;如&#xff1a;class Data { public://構造函數體賦值Data(int year,int month,int day){_year year;_month month;_d…

代碼隨想錄|圖論|12島嶼周長

leetcode:106. 島嶼的周長 題目 題目描述 給定一個由 1&#xff08;陸地&#xff09;和 0&#xff08;水&#xff09;組成的矩陣&#xff0c;島嶼是被水包圍&#xff0c;并且通過水平方向或垂直方向上相鄰的陸地連接而成的。 你可以假設矩陣外均被水包圍。在矩陣中恰好擁有…

開發制作模仿參考抄別人的小程序系統

很多老板看見別人公司的小程序系統界面好看&#xff0c;功能強大&#xff0c;使用人數多。就想要抄襲模仿參考別人家的小程序系統。想要了解一下有沒有侵權風險&#xff0c;以及怎么開發制作開發制作模仿參考抄別人的小程序系統。首先回答第一個問題&#xff0c;只要你的小程序…

c語言中的數組IV

數組的集成初始化 集成初始化的定位 數組的大小 數組的賦值 不能直接將一個數組a賦值給數組b&#xff0c;只能通過遍歷來實現 遍歷數組 示例——檢索元素在數組中的位置#include <stdio.h> int search(int key,int a[],int length); int main(void){int a[] {2,4,6,7,1,…

LDO選型

目錄 一、最大輸出電流 二、最大輸入電壓 三、最大功率&#xff1a;Pmax 四、負載動態調整率 五、輸入電源紋波抑制比&#xff1a;PSRR 一、最大輸出電流 參考TI LM1117IMPX-3.3/NOPB數據手冊 由于LDO轉換效率很低&#xff0c;LDO的標稱最大電流 ≥ 實際最大負載電流 1…

飛算JavaAI:重構Java開發的“人機協同”新范式

目錄一、從需求到架構&#xff1a;AI深度參與開發“頂層設計”1.1 需求結構化&#xff1a;自然語言到技術要素的準確轉換1.2 架構方案生成&#xff1a;基于最佳實踐的動態匹配二、編碼全流程&#xff1a;從“手寫代碼”到“人機協同創作”2.1 復雜業務邏輯生成&#xff1a;以“…