YOLOv5基礎知識入門(7)— NMS(非極大值抑制)原理解析

前言:Hello大家好,我是小哥談。NMS是指非極大值抑制(non maximum suppression),它是一種常用于物體檢測任務的算法。在物體檢測中,通常會有多個預測框(bounding box)被提議出來,并且這些框可能存在重疊或者重復的情況。NMS的目的就是通過抑制非極大值的方式,來選擇出最具代表性的框。本節課就給大家介紹一下非極大值抑制的概念、原理及其算法實現。🌈?

?前期回顧:

? ? ? ? ? ?YOLOv5基礎知識入門(1)— YOLO算法的發展歷程

? ? ? ? ? ?YOLOv5基礎知識入門(2)— YOLOv5核心基礎知識講解

? ? ? ? ? ?YOLOv5基礎知識入門(3)— 目標檢測相關知識點

? ? ? ? ? ?YOLOv5基礎知識入門(4)— 神經網絡的基本概念與原理?

? ? ? ? ? ?YOLOv5基礎知識入門(5)— 損失函數(IoU、GIoU、DIoU、CIoU和EIoU)

? ? ? ? ? ?YOLOv5基礎知識入門(6)— 激活函數(Mish、Sigmoid、Tanh、ReLU、Softmax、SiLU等)

? ? ? ? ? ?目錄

🚀1.NMS概念

🚀2.目標檢測中的NMS

🚀3.NMS算法實現

🚀4.YOLOv5中的NMS

🚀1.NMS概念

非極大值抑制(Non-Maximum Suppression,NMS),顧名思義就是抑制不是極大值的元素,可以理解為局部最大搜索。這個局部代表的是一個鄰域,鄰域有兩個參數可變,一是鄰域的維數,二是鄰域的大小。這里不討論通用的NMS算法(參考論文《Efficient Non-Maximum Suppression》對1維和2維數據的NMS實現),而是用于目標檢測中提取分數最高的窗口的。🌳

舉例:在人臉檢測中,滑動窗口經提取特征,經分類器分類識別后,每個窗口都會得到一個分數,但是滑動窗口會導致很多窗口與其他窗口存在包含或者大部分交叉的情況。這時就需要用到NMS來選取那些鄰域里分數最高,并且抑制那些分數低的窗口。🍁


🚀2.目標檢測中的NMS

目標檢測一般分為兩個過程:訓練過程+檢測(推理)過程。🌻

訓練過程中,目標檢測算法會根據給定的ground truth調整深度學習網絡參數來擬合數據集的目標特征,訓練完成后,神經網絡的參數固定,因而能夠直接對新的圖像進行目標預測。 然而,在實際的目標預測中,一般的目標檢測算法(R-CNN、YOLO等等)都會產生非常多的目標框,其中有很多重復的框定位到同一個目標,NMS作為目標檢測的最后一步,用來去除這些重復的框,獲得真正的目標框。🍄

兩階段目標檢測算法中,以Faster-RCNN為例,有兩處使用NMS,第一處是在訓練的時候,利用 ProposalCreator 來生成 proposal 的時候,因為只需要一部分 proposal,所以利用NMS進行篩選。第二處使用是在預測的時候,當得到300個分類與坐標偏移結果的時候,需要對每個類別逐一進行非極大值抑制。那為什么對于每個類別不直接取置信度最高的那一個作為最終的預測呢?因為一張圖中某個類別可能不止一個,例如一張圖中有多個人,直接取最高置信度的只能預測其中的一個人,而通過NMS理想情況下可以使得每個人(每類中的每個個體)都會有且僅有一個 bounding box 框。🌺

一階段目標檢測算法中,以YOLOv5為例,輸入一張640*640的圖像,NMS之前會產生(80*80+40*40+20*20)*3=25200個目標框,這些框都有相應的分類置信度,當置信度滿足正樣本條件時(比如100個框,這些框密集的分布在目標周圍),被送入NMS,NMS后會產生個數位個目標框(比如7個),如下圖所示。👇

目標檢測中應用NMS算法的主要目的是消除多余(交叉重復)的窗口,找到最佳物體檢測位置。由于目標在圖像中的形狀和大小可能是各種各樣的,所以為了能夠較好地在圖像中檢測這些目標,通常會設計生成數量眾多、長寬各異的候選邊界框。但是對于一個目標檢測任務來說,理想的情況是一個,所以目標只需輸出一個最準確的邊界框即可。💞


🚀3.NMS算法實現

為了從多個候選邊界框中選擇一個最佳邊界框,通常會使用非極大值抑制(NMS)算法,這種算法用于“抑制”置信度低的邊界框并只保留置信度最高的邊界框。🌿

算法的實現過程為:

輸入: 候選邊界框集合B(每個候選框都有一個置信度)、IoU閾值N

輸出: 最終的邊界框集合D(初始為空集合)

1. 對集合B根據置信度進行降序排序;

2. 從集合B中選擇第一個候選框(置信度最高),把它放入集合D中并從集合B中刪除;

3. 遍歷集合B中的每個候選框,計算它們與D集合中這個候選框的IoU值。如果IoU值大于閾值N, 則把它從集合B中刪除;

4. 重復步驟2~3直到集合B為空。


🚀4.YOLOv5中的NMS

YOLOv5的通用工具類中有一段核心代碼是處理后處理的NMS(非極大值抑制)部分。NMS是一種用于去除重疊較多的邊界框的算法,以篩選出最準確的目標框。🐳

下面就對YOLOv5的NMS進行詳解。🍎 🍏 ?🍒

NMS的主要思路是通過計算目標框之間的重疊度(即IOU,交并比),并選擇IOU較低的目標框保留下來。YOLOv5的NMS代碼使用了一個循環來遍歷所有的預測框,并進行判斷和篩選。🌴

首先,通過設定置信度閾值IOU閾值,將預測框中置信度低于閾值的框過濾掉,只保留置信度高的框。

接著,對剩下的框按照置信度進行降序排序,確保置信度高的框排在前面。

然后,從置信度最高的框開始,與其余框逐一計算IOU。如果某個框的IOU高于設定的IOU閾值,則將其刪除,否則保留。

最后,重復上述步驟,直到遍歷完所有的預測框,并得到最終篩選出來的目標框。

以上就是YOLOv5的NMS的主要講解。這段代碼的作用是在目標檢測過程中,根據置信度和IOU閾值對預測框進行篩選,以得到準確的目標框。📚

名詞解釋:

置信度:置信度是介于0-1(或100%)之間的數字,它描述模型認為此預測邊界框包含某類別目標的概率。

IoU(Intersection over Union,IoU):即兩個邊界框相交面積與相并面積的比值,邊界框的準確度可以用IoU進行表示;一般約定,在檢測中,IOU>0.5,則認為檢測正確,一般閾值設為0.5。

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

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

相關文章

機器學習深度學習——transformer(機器翻譯的再實現)

👨?🎓作者簡介:一位即將上大四,正專攻機器學習的保研er 🌌上期文章:機器學習&&深度學習——自注意力和位置編碼(數學推導代碼實現) 📚訂閱專欄:機器…

【論文閱讀】 Model Sparsity Can Simplify Machine Unlearning

Model Sparsity Can Simplify Machine Unlearning 背景主要內容Contribution Ⅰ:對Machine Unlearning的一個全面的理解Contribution Ⅱ:說明model sparsity對Machine Unlearning的好處Pruning方法的選擇sparse-aware的unlearning framework Experiments…

JetBrains IDE遠程開發功能可供GitHub用戶使用

JetBrains與GitHub去年已達成合作,提供GitHub Codespaces 與 JetBrains Gateway 之間的集成。 GitHub Codespaces允許用戶創建安全、可配置、專屬的云端開發環境,此集成意味著您可以通過JetBrains Gateway使用在 GitHub Codespaces 中運行喜歡的IDE進行…

VScode搭建Opencv(C++開發環境)

VScode配置Opencv 一、 軟件版本二 、下載軟件2.1 MinGw下載2.2 Cmake下載2.3 Opencv下載 三、編譯3.1 cmake-gui3.2 make3.3 install 四、 VScode配置4.1 launch.json4.2 c_cpp_properties.json4.3 tasks.json 五、測試 一、 軟件版本 cmake :cmake-3.27.2-windows-x86_64 Mi…

JAVA基礎知識(一)——Java語言描述、變量和運算符

TOC(Java語言描述、變量和運算符) 一、JAVA語言描述 1.1 java語言描述 JDK、JRE、jVM三者之間的關系,以及JDK、JRE包含的主要結構有哪些? JDKJre java的開發工具(javac.exe java.exe javadoc.exe) jre jvmjava的核心類庫 為什…

C++策略模式

1 簡介: 策略模式是一種行為型設計模式,用于在運行時根據不同的情況選擇不同的算法或行為。它將算法封裝成一個個具體的策略類,并使這些策略類可以相互替換,以達到動態改變對象的行為的目的。 2 實現步驟: 以下是使用…

【JavaEE基礎學習打卡03】Java EE 平臺有哪些內容?

目錄 前言一、Java EE平臺說明二、Java EE平臺容器及組件1.平臺容器2.平臺組件 三、JavaEE平臺API服務1.API服務概覽2.平臺API 總結 前言 📜 本系列教程適用于Java Web初學者、愛好者,小白白。我們的天賦并不高,可貴在努力,堅持不…

使用CLI添加磁盤到VM

登錄 https://portal.azure.com/#home,點擊右上角的控制臺圖標 ,打開CLI 在控制臺中輸入如下指令,在NetworkWatcherRG創建一個名字為TEST的虛擬機,使用的鏡像是Win2019datacenter,username是aaa,password是1234567890A…

mysql的快速復習 和一些思考記錄

數據庫設計 第一范式:有主鍵,具有原子性,字段不可分割 數據庫表中不能出現重復記錄,每個字段是原子性的不能再分 關于第一范式,每一行必須唯一,也就是每個表必須有主鍵。 每一列不可再分!&#…

Sui主網升級至V1.7.1版本

Sui主網現已升級至V1.7.1版本,此升級包含了多項修復和優化。升級要點如下所示: #12915 協議版本提升至20版本。 在Sui框架中新增Kiosk Extensions API和一個新的sui::kiosk_extension模塊。 您可以使用該API構建自定義的Kiosk應用程序,以…

okhttp源碼簡單流程分析

攔截器詳細解析可以看大佬簡書 "https://www.jianshu.com/p/6fac73f7570f"和 “https://www.jianshu.com/p/3c740829475c” okhttp請求流程 1:OkHttpClient okHttpClient new OkHttpClient.Builder() 構建一個okhttpClient對象,傳入你想傳入的…

vector使用以及模擬實現

vector使用以及模擬實現 vector介紹vector常用接口1.構造2.迭代器3.容量4.增刪查改5.練習 vector模擬實現1.迭代器失效2.反向迭代器3.完整代碼 vector介紹 和我們原來講的string不同&#xff0c;vector并不是類&#xff0c;是一個類模板&#xff0c;加<類型>實例化以后才…

主機防護的重要性和方式

01 主機防護的重要性 主機防護是網絡安全的重要組成部分。在互聯網時代&#xff0c;網絡攻擊成為了一種常見的威脅&#xff0c;而主機防護則是保護計算機系統免受網絡攻擊的重要手段。 主機防護可以防范各種網絡攻擊&#xff0c;如病毒、木馬、黑客攻擊等&#xff0c;從而保…

氣象監測站:用科技感知氣象變化

氣象監測站是利用科學技術感知當地小氣候變化情況的氣象觀測儀器&#xff0c;可用于農業、林業、養殖業、畜牧業、環境保護、工業等多個領域&#xff0c;提高對環境數據的利用率&#xff0c;促進產業效能不斷提升。 氣象監測站主要由氣象傳感器、數據傳輸系統、電源系統、支架…

Linux debian12解壓和壓縮.rar文件教程

一、Debian12安裝rar命令 sudo apt install rar二、使用rar軟件 1.解壓文件 命令格式&#xff1a; rar x 文件名.rar實力測試&#xff1a; [rootdoudou tmp]# rar x test.rar2.壓縮文件 test是一個文件夾 命令格式&#xff1a; rar a 文件名.rar 文件夾名實例測試&#x…

centos7 yum獲取軟件所有依賴包 創建本地yum源 yum離線安裝軟件

centos7 yum獲取軟件所有依賴包 創建本地yum源 離線安裝軟件 1、以安裝docker 20.10為例2、centos7 yum獲取docker 20.10 所有依賴包3、創建本地docker yum源4、yum使用本地docker源 離線安裝docker 1、以安裝docker 20.10為例 參考鏈接&#xff1a; 添加docker 清華軟件源 y…

git環境超詳細配置說明

一&#xff0c;簡介 在git工具安裝完成之后&#xff0c;需要設置一下常用的配置&#xff0c;如郵箱&#xff0c;縮寫&#xff0c;以及git commit模板等等。本文就來詳細介紹些各個配置如何操作&#xff0c;供參考。 二&#xff0c;配置步驟 2.1 查看當前git的配置 git conf…

使用 Apache Kafka 和 Go 將數據引入 OpenSearch

需要編寫自定義集成層來滿足數據管道中的特定要求&#xff1f;了解如何使用 Go 通過 Kafka 和 OpenSearch 實現此目的。 可擴展的數據攝取是OpenSearch等大規模分布式搜索和分析引擎的一個關鍵方面。構建實時數據攝取管道的方法之一是使用Apache Kafka。它是一個開源事件流平臺…

單詞倒排(C語言詳解)

題目&#xff1a;單詞倒排 描述&#xff1a;對字符串中的所有單詞進行倒排。 說明&#xff1a; 1、構成單詞的字符只有26個大寫或小寫英文字母&#xff1b; 2、非構成單詞的字符均視為單詞間隔符&#xff1b; 3、要求倒排后的單詞間隔符以一個空格表示&#xff1b;如果原字…

米爾瑞薩RZ/G2L開發板-02 ffmpeg的使用和RTMP直播

最近不知道是不是熬夜太多&#xff0c;然后記憶力減退了&#xff1f; 因為板子回來以后我就迫不及待的試了一下板子&#xff0c;然后發現板子有SSH&#xff0c;但是并沒有ffmpeg&#xff0c;最近總是在玩&#xff0c;然后今天說是把板子還原一下哇&#xff0c;然后把官方的固件…