【Datawhale組隊學習202506】YOLO-Master task03 IOU總結

系列文章目錄

task01 導學課程
task02 YOLO系列發展線


文章目錄

  • 系列文章目錄
  • 前言
  • 1 功能分塊
    • 1.1 骨干網絡 Backbone
    • 1.2 頸部網絡 Neck
    • 1.3 頭部網絡 Head
      • 1.3.1 邊界框回歸頭
      • 1.3.2 分類頭
  • 2 關鍵概念
  • 3 典型算法
    • 3.1 NMS
    • 3.2 IoU
  • 總結


前言

  • Datawhale是一個專注于AI與數據科學的開源組織,匯集了眾多領域院校和知名企業的優秀學習者,聚合了一群有開源精神和探索精神的團隊成員
  • YOLO-Master
  • 本章學習資料

1 功能分塊

1.1 骨干網絡 Backbone

  • 它的任務是把一張圖片的關鍵信息濃縮出來,比如形狀、紋理、顏色等特征,就像把水果榨成汁一樣,保留精華,去掉多余水分(無關背景)。

1.2 頸部網絡 Neck

1.3 頭部網絡 Head

1.3.1 邊界框回歸頭

1.3.2 分類頭


2 關鍵概念


3 典型算法

3.1 NMS

3.2 IoU

IoU(Intersection over Union):衡量兩個邊界框(Bounding Box)之間重疊程度和匹配度,常用于目標檢測任務中評估預測框 Predicted Box真實框 Ground Truth Box的匹配度。相比于 Jaccard Index

  • 其值范圍在 [ 0 , 1 ] [0,1] [0,1]1 表示完全重疊,0 表示無重疊。

  • 數學定義

I o U = 交集面積 并集面積 \mathrm{IoU} = \frac{交集面積}{并集面積} IoU=并集面積交集面積?

  • 即:

IoU = A inter A union = A inter A box1 + A box2 ? A inter \text{IoU} = \frac{A_{\text{inter}}}{A_{\text{union}}} = \frac{A_{\text{inter}}}{A_{\text{box1}} + A_{\text{box2}} - A_{\text{inter}}} IoU=Aunion?Ainter??=Abox1?+Abox2??Ainter?Ainter??

  • 計算步驟:
  1. 交集坐標
    • 左上角:取兩框左上坐標的較大值
    • 右下角:取兩框右下坐標的較小值
    • 若右下坐標 < 左上坐標,則交集面積為 0

x LeftTop = max ? ( x 1 a , x 1 b ) , y LeftTop = min ? ( y 1 a , y 1 b ) x_{\text{LeftTop}} = \max(x_1^a, x_1^b), \quad y_{\text{LeftTop}} = \min(y_1^a, y_1^b) xLeftTop?=max(x1a?,x1b?),yLeftTop?=min(y1a?,y1b?)
x RightBottom = min ? ( x 2 a , x 2 b ) , y RightBottom = max ? ( y 2 a , y 2 b ) x_{\text{RightBottom}} = \min(x_2^a, x_2^b), \quad y_{\text{RightBottom}} = \max(y_2^a, y_2^b) xRightBottom?=min(x2a?,x2b?),yRightBottom?=max(y2a?,y2b?)

  1. 面積計算

    • 交集面積 = max ? ( 0 , x RightBottom ? x LeftTop ) × max ? ( 0 , y RightBottom ? y LeftTop ) \max(0, x_{\text{RightBottom}} - x_{\text{LeftTop}}) \times \max(0, y_{\text{RightBottom}} - y_{\text{LeftTop}}) max(0,xRightBottom??xLeftTop?)×max(0,yRightBottom??yLeftTop?)
    • 并集面積 = 框1面積 + 框2面積 - 交集面積
  • 代碼實踐
import matplotlib.pyplot as plt
import matplotlib.patches as pts# 現在定義一個函數,接收兩個參數,都是兩個點坐標,以數組的形式
def calculate_iou(box1, box2):"""計算兩個邊界框之間的 IoU (Intersection over Union)參數:box1: 第一個邊界框,格式為 [x1, y1, x2, y2]box2: 第二個邊界框,格式為 [x1, y1, x2, y2]返回:iou: 兩個邊界框之間的 IoU 值"""# 解析邊界框坐標x1_box1, y1_box1, x2_box1, y2_box1 = box1x1_box2, y1_box2, x2_box2, y2_box2 = box2# 確保坐標的有效性assert x1_box1 < x2_box1, f"無效的 box1 x坐標: {x1_box1} >= {x2_box1}"assert y1_box1 < y2_box1, f"無效的 box1 y坐標: {y1_box1} >= {y2_box1}"assert x1_box2 < x2_box2, f"無效的 box2 x坐標: {x1_box2} >= {x2_box2}"assert y1_box2 < y2_box2, f"無效的 box2 y坐標: {y1_box2} >= {y2_box2}"# 計算交集區域的坐標x_left = max(x1_box1, x1_box2)y_top = max(y1_box1, y1_box2)x_right = min(x2_box1, x2_box2)y_bottom = min(y2_box1, y2_box2)# 檢查是否有交集if x_right < x_left or y_bottom < y_top:return 0.0# 計算交集區域面積intersection_area = (x_right - x_left) * (y_bottom - y_top)# 計算兩個邊界框各自的面積area_box1 = (x2_box1 - x1_box1) * (y2_box1 - y1_box1)area_box2 = (x2_box2 - x1_box2) * (y2_box2 - y1_box2)# 計算并集區域面積union_area = area_box1 + area_box2 - intersection_area# 計算IOU,并避免除零錯誤if union_area == 0:iou = 0else:iou = intersection_area / union_areareturn iou# 定義一個函數,根據坐標畫出兩個框
def plot_boxes(box1, box2):fig, ax = plt.subplots()# 繪制第一個框rect1 = pts.Rectangle((box1[0], box1[1]), box1[2]-box1[0], box1[3]-box1[1], linewidth=1, edgecolor='r', facecolor='none')ax.add_patch(rect1)# 繪制第二個框rect2 = pts.Rectangle((box2[0], box2[1]), box2[2]-box2[0], box2[3]-box2[1], linewidth=1, edgecolor='b', facecolor='none')ax.add_patch(rect2)# 設置坐標軸范圍ax.set_xlim(0, 100)ax.set_ylim(0, 100)# 顯示圖像plt.show()# 測試用例
if __name__ == "__main__":# # 測試1: 完全重疊box_a = [10, 10, 50, 50]# box_b = [10, 10, 50, 50]# iou = calculate_iou(box_a, box_b)# print(f"測試1 (完全重疊): IoU = {iou:.2f} (預期: 1.00)")# 測試2: 部分重疊box_c = [20, 20, 60, 60]iou = calculate_iou(box_a, box_c)print(f"測試2 (部分重疊): IoU = {iou:.2f} (預期: 0.47)")# 繪制框plot_boxes(box_a, box_c)
  • 效果圖
    請添加圖片描述

總結

  • 分段介紹YOLO的框架和基本原理。

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

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

相關文章

Spring IOC容器核心揭秘:BeanFactory創建、配置加載解析并注冊為BeanDefinition

文章目錄 一、為何這個階段如此重要&#xff1f;二、整體流程全景圖三、源碼級深度解析1. BeanFactory的誕生源碼入口&#xff1a;refresh()方法核心方法&#xff1a;obtainFreshBeanFactory()核心實現&#xff1a;refreshBeanFactory()BeanFactory實例化 2. ★ 核心&#xff1…

解鎖n8n:開啟工作流自動化的無限可能(5/6)

文章摘要&#xff1a;n8n 是一款開源低代碼工作流自動化平臺&#xff0c;通過可視化拖放節點創建復雜工作流&#xff0c;無需大量代碼。具有強大集成能力、數據轉換、錯誤處理等功能&#xff0c;適用于數據同步、客戶關系管理、IT 自動化等場景。相比 Zapier、IFTTT 等工具&…

數據賦能(308)——合作共享——數據交流

概述 重要性如下&#xff1a; 信息準確性&#xff1a;數據交流原則確保在數據傳遞過程中信息的準確性&#xff0c;這是決策和業務活動的基礎。決策支持&#xff1a;準確的數據交流為決策提供有力支持&#xff0c;幫助組織做出更明智的決策。業務效率&#xff1a;有效的數據交…

TCP流量控制與擁塞控制:核心機制與區別

一、TCP流量控制&#xff08;Flow Control&#xff09; 定義&#xff1a;通過調節發送方的發送速率&#xff0c;確保接收方能夠及時處理數據&#xff0c;避免緩沖區溢出。 本質&#xff1a;解決發送方與接收方之間的"端到端"速率匹配問題。 1. 實現機制&#xff1a…

iOS多端兼容性調試:一次iOS性能優化分工具協作排查過程

在多技術棧混合開發日益普及的今天&#xff0c;iOS應用中越來越多地集成了WebView、Flutter、React Native甚至小程序模塊。而這些模塊帶來的復雜性&#xff0c;不僅體現在UI適配&#xff0c;還包括數據同步、系統權限管理、線程調度等方面的問題。 本文記錄的是我們在處理一個…

秋招Day14 - MySQL - 索引

索引為什么能夠提高MySQL的查詢效率&#xff1f; 索引可以理解為目錄&#xff0c;通過索引可以快速定位數據&#xff0c;避免全表掃描 一般是B樹結構&#xff0c;查找效率是O(log n)。 索引還能加速排序、分組、連接等操作。 create index idx_name on students(name); 能簡…

第5天:LSTM預測火災溫度

&#x1f368; 本文為&#x1f517;365天深度學習訓練營 中的學習記錄博客&#x1f356; 原作者&#xff1a;K同學啊 目標 復用LSTM模型實現火災溫度預測 具體實現 &#xff08;一&#xff09;環境 語言環境&#xff1a;Python 3.10 編 譯 器: PyCharm 框 架: Pytorch &am…

目標檢測之YOLOV11自定義數據使用OBB訓練與驗證

一、前置條件與環境準備 在開始訓練前&#xff0c;確保已完成以下準備《目標檢測之YOLOV11自定義數據預處理——從原始標注到YOLO-OBB格式轉換與驗證》&#xff1a; 數據目錄結構&#xff1a; yolov11/ ├── datasets/ │ └── shrimp/ │ ├── images/ │ …

Labview教程進階一(Labview與OPC UA設備通信)

1.Labview與OPC UA設備通信 OPC UA通信協議優勢顯著,具體表現如下: 跨平臺兼容:支持多種操作系統和硬件平臺,實現無縫數據交換。高安全性:內置加密、身份驗證和授權機制,確保數據傳輸安全。高效數據交換:采用二進制編碼和優化的傳輸協議,提高通信效率。復雜數據建模:…

【Comsol教程】如何求解指定范圍的積分 或 在積分中去除奇異點/異常值

我們在Comsol中經常需要對物體的邊界求積分&#xff0c;比如求物體在流場中所受的總流體牽引力&#xff0c;又或者是物體在電場中受到的總介電泳力。當物體的材料或者邊界條件存在突變時&#xff0c;物體表面的粘性應力或者麥克斯韋電應力可能會存在異常值。通常解決方法有細化…

Python 多版本治理理念(Windows 平臺 · 零基礎友好)

&#x1f9e0; Python 多版本治理理念&#xff08;Windows 平臺 零基礎友好&#xff09; &#x1f310; 核心原則&#xff1a;三維治理、四級隔離、五項自治 以下是基于人工智能深度學習環境搭建實踐&#xff0c;總結出的"零基礎入門 Conda工具鏈 全隔離項目環境"…

Python文件管理利器之Shutil庫詳解

Shutil是一個Python內置的用來高效處理文件和目錄遷移任務的庫。Shutil不僅支持基本的文件復制、移動和刪除操作&#xff0c;還具備處理大文件、批量遷移目錄、以及跨平臺兼容性等特性。通過使用Shutil&#xff0c;我們可以更加輕松地實現文件系統的管理和維護&#xff0c;本文…

學習華為 ensp 的學習心得體會

引言? 在信息技術日新月異的今天&#xff0c;網絡技術作為連接世界的橋梁&#xff0c;其重要性不言而喻。作為一名對網絡技術充滿熱情的大一新生&#xff0c;我選擇了 eNSP&#xff08;Enterprise Network Simulation Platform&#xff0c;企業網絡模擬平臺&#xff09;作為我…

jenkins-2.439.1搭建

一、 二、pipeline文件 pipeline { agent any // 可以指定特定的agent, 如 label 或 docker environment { JAVA_HOME "/usr/local/software/jdk1.8.0_451" PATH "${JAVA_HOME}/bin:${env.PATH}" } tools { …

【threejs】一天一個小案例講解:控制面板(GUI)

# 好吧&#xff0c;每天更新實在有點艱巨&#xff0c;我盡量少量多次 代碼倉 所有代碼都會上傳到這里&#xff0c;可自行clone GitHub - TiffanyHoo/three_practices: Learning three.js together! 運行效果圖 ? 知識要點 一、安裝dat.gui npm i dat.gui 二、使用步驟&a…

飛輪儲能輔助雙饋風機參與電力系統一次調頻的仿真模型研究

以下是一篇關于飛輪儲能輔助雙饋風機參與電力系統一次調頻的仿真模型研究的論文 ,涵蓋理論分析、數學模型構建、控制策略設計及仿真驗證等內容,適用于電氣工程、新能源技術等領域的研究參考。 飛輪儲能輔助雙饋風機參與電力系統一次調頻的仿真模型研究 摘要 隨著風電在電力…

一次性理解Java垃圾回收--簡單直接方便面試時使用

Java的垃圾回收是一個面試必問題&#xff0c;只要按照下面的步驟回答肯定不會有大問題。 1.先告訴面試官垃圾回收分為兩大步&#xff1a; a.識別哪些對象是"垃圾"(不再被使用的對象) b.回收這些垃圾對象占用的內存空間 2. 接下來分別介紹標記階段和回收階段的細節…

XML映射文件-輔助配置

如果你沒有按照同包同名來&#xff0c;就要下面的配置&#xff0c;指定好路徑 1.把路徑改為類下面的xml文件 #指定xml映射文件的位置 mybatis.mapper-locationsclasspath:mapper/*.xml

120、三角形最小路徑和

題目 解答&#xff1a; 直接按照空間復雜度O(n)來做了。這種明顯是動態規劃&#xff0c;每一層用到上一層的信息。 觀察數據形狀&#xff0c;如下&#xff1a; (0,0) (1,0)(1,1) (2,0)(2,1)(2,2) (3,0)(3,1)(3,2)(3,3) ... (n-1,0)...(n-1,n-1) 設dp[n],定義為本層第n…

仕么是Transformer以及工作原理和架構

Transformer 是一種革命性的**深度學習架構**&#xff0c;由 Google 團隊在 2017 年論文《Attention is All You Need》中提出。它徹底改變了自然語言處理&#xff08;NLP&#xff09;領域&#xff0c;并逐漸擴展到計算機視覺、語音識別等多模態任務。其核心創新在于**完全依賴…